日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库主键和外键

發布時間:2025/6/15 数据库 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库主键和外键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? 剛開始學數據庫的時候,剛接觸到的一個較為陌生的概念就是主鍵和外鍵。啥叫主鍵,從字面意思上來看感覺一臉懵。簡單點說主鍵就類似每個人的身份證,代表一個唯一的某個人,而且主鍵不能為空,估計你也沒見過哪個人沒有身份證的。

? ? ? ? ? ? ?那外鍵是啥,一個表中的某一個或多個字段是關聯另一個表的主鍵,那我們把這一個或多個字段稱為這個表的外鍵,外鍵可以是這個表的主鍵也可以不是。外鍵的作用是保證引用數據的完整性。

? ? ? ? ? ? 來看看書上是怎么定義主鍵的。主鍵:又稱主碼,是表中一列或多列的組合。下面來展示如何創建主鍵。

create table stu( id int PRIMARY KEY, name varchar(10), hobby varchar(20) ); Query OK, 0 rows affected (0.03 sec)mysql> show create table stu; +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | stu | CREATE TABLE `stu` (`id` int(11) NOT NULL,`name` varchar(10) DEFAULT NULL,`hobby` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)

主鍵id顯示的是NOT NULL,PRIMARY KEY (`id`)表明id是主鍵,上面是單字段主鍵。

mysql> create table stu1( id int , name varchar(10), hobby varchar(20),primary key(id,name) ); Query OK, 0 rows affected (0.02 sec)mysql> show create table stu1; +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | stu1 | CREATE TABLE `stu1` (`id` int(11) NOT NULL,`name` varchar(10) NOT NULL,`hobby` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)mysql>

上面是多字段主鍵。

mysql> create table stu2( id int primary key, stu_id int, name varchar(20),constraint fk_stu foreign key(stu_id) references stu(id) ); Query OK, 0 rows affected (0.04 sec)mysql> mysql> mysql> show create table stu2; +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | stu2 | CREATE TABLE `stu2` (`id` int(11) NOT NULL,`stu_id` int(11) DEFAULT NULL,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`),KEY `fk_stu` (`stu_id`),CONSTRAINT `fk_stu` FOREIGN KEY (`stu_id`) REFERENCES `stu` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)mysql>

在表stu2上添加了fk_stu的外鍵約束,外鍵名稱為stu_id,其依賴于表stu的主鍵id。下面來看外鍵保證引用數據的完整性 。

mysql> select * from stu2; +----+--------+------+ | id | stu_id | name | +----+--------+------+ | 1 | 1 | lisi | +----+--------+------+ 1 row in set (0.00 sec)mysql> select * from stu; +----+----------+-------+ | id | name | hobby | +----+----------+-------+ | 1 | zhangdan | daqiu | +----+----------+-------+ 1 row in set (0.00 sec)

上面是2個表中的數據。表stu2的外鍵stu_id和stu的主鍵一一對應?,F在再想表stu2中插入數據。

mysql> insert into stu2 values(1,2,"wangwu"); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' mysql>

插入記錄報錯了,因為表stu中沒有id=2的記錄。

mysql> insert into stu values(2,"wangwu","chifan"); Query OK, 1 row affected (0.00 sec)mysql> select * from stu; +----+----------+--------+ | id | name | hobby | +----+----------+--------+ | 1 | zhangdan | daqiu | | 2 | wangwu | chifan | +----+----------+--------+ 2 rows in set (0.00 sec) mysql> insert into stu2 values(2,2,"zhaoliu"); Query OK, 1 row affected (0.00 sec)mysql> select * from stu2; +----+--------+---------+ | id | stu_id | name | +----+--------+---------+ | 1 | 1 | lisi | | 2 | 2 | zhaoliu | +----+--------+---------+ 2 rows in set (0.00 sec)mysql>

我們先向表stu表插入id=2的字段,再對stu2操作就成功了。主表先動,從表才能動。從表是含有外鍵約束的那個表,主表就是那個含有外鍵約束對應主鍵的那個表。再想想,如果試著刪除某一行會發生啥。

mysql> delete * from stu2 where id=2; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from stu2 where id=2' at line 1 mysql> delete * from stu where id=2; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from stu where id=2' at line 1 mysql>

不管對stu還是stu2進行刪除操作都會失敗,因為2個表已經有了約束關系,誰也離不開誰了。

?

?

?

?

?

總結

以上是生活随笔為你收集整理的数据库主键和外键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩成人在线播放 | 极品少妇一区二区三区 | 久久丝袜美腿 | 天天色综合色 | 日本一级大毛片a一 | 欧美日韩精品久久久 | 99热这里只有精品5 国产精品伦子伦免费视频 精品一二三 | 精品国产乱码久久久久夜深人妻 | 在线观看成人动漫 | 伊人22综合 | 日本a级大片 | 精品无码一区二区三区电影桃花 | 爱欲av| 精品成人无码一区二区三区 | 欧美 日韩 国产 成人 在线 | 俺啪也 | 可以直接看的毛片 | 激情777 | 天天操天天操天天干 | 美女成人在线 | 成人在线免费视频 | yjizz视频| 国产wwwxxx | av资源在线免费观看 | 在线免费观看日本 | 日美韩av | 久久久免费高清视频 | 久久久久久久久综合 | 色黄网站在线观看 | 华丽的外出在线 | 麻豆国产一区二区三区四区 | 乳罩脱了喂男人吃奶视频 | 中文字幕一区二区三区手机版 | 国产性猛交xx乱 | 黄色福利视频网站 | 国产亚洲午夜 | 国产影音先锋 | 国产精品每日更新 | 欧美婷婷六月丁香综合色 | 黄色a一级片 | 国产真实在线 | 国产精品69久久久久孕妇欧美 | 精品视频一区二区在线观看 | 国产女优在线播放 | 丰满少妇高潮在线观看 | 五月婷婷狠狠爱 | av免费在线观看网站 | 亚洲国内在线 | 玉势 (1v1 高h) | 青青青视频在线播放 | 少女情窦初开的第4集在线观看 | 欧洲综合视频 | 欧美日本成人 | 亚洲一二三av | 国产精品国产三级国产播12软件 | 久草色在线 | 一道本久久 | 精品无人区无码乱码毛片国产 | 黑人借宿巨大中文字幕 | 男人的av| se日韩| 国产精品成人一区二区 | 亚洲欧美日韩一区二区 | 免费成人蒂法网站 | 美女大bxxxxn内射 | 日本老肥婆bbbwbbbwzr | 欧美人与动牲交xxxxbbbb | 青青草成人免费在线视频 | 免费观看黄色小视频 | 一区三区视频 | 亚洲精品高清视频在线观看 | www.超碰 | 久久精品高清 | 老熟女毛茸茸浓毛 | 欧美性三级 | 成人在线观看免费高清 | 国产成人无码精品久久二区三 | 99久久婷婷国产精品综合 | 色噜噜在线播放 | 久久久久久久久久国产精品 | 解开人妻的裙子猛烈进入 | 在线观看的黄网 | 性做久久久久 | 天堂а√在线中文在线鲁大师 | 91九色视频在线观看 | 国产精品麻豆视频 | 国产免费一区二区视频 | 欧美××××黑人××性爽 | 另类视频一区 | 人人爱人人搞 | 老太脱裤让老头玩ⅹxxxx | av在线.com| 欧美交| 精品人妻一区二区色欲产成人 | 让男按摩师摸好爽 | 欧美一级黄色片在线观看 | 中字av在线| 成人春色影视 | 久久艹中文字幕 |