日韩性视频-久久久蜜桃-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個表已經有了約束關系,誰也離不開誰了。

?

?

?

?

?

總結

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

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

主站蜘蛛池模板: 久久水蜜桃 | av5566| 靠逼视频网站 | 国产搞逼视频 | 国精品一区二区三区 | 午夜精品区 | 欧美乱大交 | 全部孕妇毛片丰满孕妇孕交 | eeuss鲁丝片一区二区三区 | 91精品国产综合久久福利 | 美女自拍视频 | 伊人色综合久久久 | 国产激情视频在线播放 | 日本xxxx免费 | 迈开腿让我尝尝你的小草莓 | 一区二区三区日韩精品 | 成人手机在线观看 | 欧美不卡在线视频 | 欧美一级特黄视频 | 国产午夜福利一区 | 中文字幕在线观看视频网站 | 五月婷婷天堂 | 国产精品久久网 | 国产宾馆自拍 | 啪啪在线视频 | 免费精品无码AV片在线观看黄 | 手机看片一区二区 | 欧美精品啪啪 | 国产鲁鲁视频在线观看免费 | 日本老师巨大bbw丰满 | 欧美乱码精品 | a一级网站 | 久久国产精品首页 | 亚洲欧美日韩另类 | 日本伦理一区二区三区 | 国产亚洲视频在线 | 美女免费福利视频 | 日韩伦人妻无码 | 黄色片视频在线观看 | 午夜久久久久久久久久 | 91福利视频在线 | 成人av电影免费观看 | 免费av片| 激情开心成人网 | 男人影院在线 | 丰满人妻老熟妇伦人精品 | 国产又粗又黄的视频 | 波多野结衣高清电影 | 91丨九色丨国产在线 | 国产美女黄网站 | 色av一区 | 日韩一二区 | 在线观看国产免费视频 | 久久高清无码电影 | 都市激情麻豆 | 奇米网久久 | 国产一级二级三级精品 | 久久精品一区二 | 亚洲人成免费电影 | 永久免费在线视频 | 久久精品视频一区二区三区 | 娇妻之欲海泛舟无弹窗笔趣阁 | 日韩精品中文字幕在线 | 人人cao | 成 人免费va视频 | 日本一区二区免费电影 | 加勒比久久综合 | 少妇呻吟视频 | av最新版天堂资源在线 | 天堂av2019| 国产免费999| jiizzyou欧美2| 日本少妇xxxx软件 | 五月天亚洲综合 | 自拍偷拍色 | 日韩欧美国产片 | 一区二区三区少妇 | 色一情一乱一乱一区91av | 亚洲怡春院 | 天天色天天爽 | aa一级黄色片 | 国产精品成熟老女人 | 国产a免费 | 视频在线日韩 | 婷婷久久久久久 | 怡春院一区二区 | 日韩一级在线观看视频 | 亚洲欧洲在线播放 | 国产呦小j女精品视频 | 国产免费av网址 | 九九天堂网| 性插视频在线观看 | 一本在线免费视频 | 日韩乱码人妻无码中文字幕久久 | 久久色播 | 国产黄色网络 | 麻豆视频一区 | 高清福利视频 | 精品无码人妻少妇久久久久久 |