疾速懂得MySQL中主鍵與外鍵的實例教程。本站提示廣大學習愛好者:(疾速懂得MySQL中主鍵與外鍵的實例教程)文章只能為提供參考,不一定能成為您想要的結果。以下是疾速懂得MySQL中主鍵與外鍵的實例教程正文
主鍵與外鍵的關系,淺顯點兒講,我如今有一個服裝論壇t.vhao.net,有兩張表,一張是主貼 thread,一張是回帖 reply
先說說主鍵,主鍵是內外面獨一辨認記載的字段,普通是帖子id,表現在拜訪的時刻,例如是
thread.php?id=1 表現我要拜訪的是帖子id是1 的帖子~
再來講說外鍵,當我們刪除某個帖子的時刻,須要履行另外一個操作,就是刪除一切回帖,假如正常情形下,我們須要履行兩次delete操作(thread和 reply),這時候候假如存在外鍵,例如,在reply 內外面樹立一個指向thread表的主鍵(id)的外鍵(這個外鍵綁的字段,必需是對應帖子的id),並指定呼應 delete ,那你在刪除 thread 的時刻,mysql 本身會幫你把 reply 表中這個帖子的答復都刪失落,而不須要你手動再去履行一次reply表的delete操作~
至於二者之間的關系,在適才的例子中,reply 表的外鍵,指向的就是 thread 表的主鍵~~
弄個例子,簡略演示一下應用,做dage和xiaodi兩個表,年夜哥表是主鍵,小弟表是外鍵:
建表:
CREATE TABLE `dage` ( `id` int(11) NOT NULL auto_increment, `name` varchar(32) default '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `xiaodi` ( `id` int(11) NOT NULL auto_increment, `dage_id` int(11) default NULL, `name` varchar(32) default '', PRIMARY KEY (`id`), KEY `dage_id` (`dage_id`), CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
拔出個年夜哥:
mysql> insert into dage(name) values('銅鑼灣');
Query OK, 1 row affected (0.01 sec)
mysql> select * from dage;
+----+--------+ | id | name | +----+--------+ | 1 | 銅鑼灣 | +----+--------+ 1 row in set (0.00 sec)
拔出個小弟:
mysql> insert into xiaodi(dage_id,name) values(1,'銅鑼灣_小弟A');
Query OK, 1 row affected (0.02 sec)
mysql> select * from xiaodi;
+----+---------+--------------+ | id | dage_id | name | +----+---------+--------------+ | 1 | 1 | 銅鑼灣_小弟A | +----+---------+--------------+
把年夜哥刪除:
mysql> delete from dage where id=1;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提醒:不可呀,有束縛的,年夜哥上面還有小弟,可不克不及扔下我們不論呀!
拔出一個新的小弟:
mysql> insert into xiaodi(dage_id,name) values(2,'旺角_小弟A');
2ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bstar/xiaodi`, CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`))
提醒:小子,想造反呀!你還沒年夜哥呢!
把外鍵束縛增長事宜觸發限制:
mysql> show create table xiaodi;CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
mysql> alter table xiaodi drop foreign key xiaodi_ibfk_1;
Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings:
mysql> alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade;
Query OK, 1 row affected (0.04 sec) Records: 1 Duplicates: 0 Warnings: 0
再次試著把年夜哥刪了:
mysql> delete from dage where id=1;
Query OK, 1 row affected (0.01 sec)
mysql> select * from dage;
Empty set (0.01 sec)
mysql> select * from xiaodi;
Empty set (0.00 sec)
得,這回對應的小弟也沒了,沒方法,誰讓你跟我on delete cascade了呢!
例子解釋的應當蠻清晰了吧,其他功效對應手冊本身理論吧!:-)