MySQL 主外键约束与标准SQL不同的地方
生活随笔
收集整理的這篇文章主要介紹了
MySQL 主外键约束与标准SQL不同的地方
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【標準SQL的外鍵約束條件】
1): 子表引用父表的主鍵
drop table if exists child,parent;create table if not exists parent(id int not null auto_increment primary key,v int);create table if not exists child(id int not null auto_increment primary key,parent_id int not null,v int,constraint fk__child__parent_id foreign key (parent_id) references parent(id) );insert into parent(id,v) values(1,100); insert into child(parent_id,v) values(1,1000); insert into child(parent_id,v) values(1,1000);select * from parent; +----+------+ | id | v | +----+------+ | 1 | 100 | +----+------+select * from child; +----+-----------+------+ | id | parent_id | v | +----+-----------+------+ | 1 | 1 | 1000 | | 2 | 1 | 1000 | +----+-----------+------+?
2): 子表引用交表的唯一索引
create table if not exists parent(id int not null,v int,constraint unique index uix__parent_id (id));create table if not exists child(id int not null auto_increment primary key,parent_id int not null,v int,constraint fk__child__parent_id foreign key (parent_id) references parent(id) );insert into parent(id,v) values(1,100); insert into child(parent_id,v) values(1,1000); insert into child(parent_id,v) values(1,1000);select * from parent; +----+------+ | id | v | +----+------+ | 1 | 100 | +----+------+select * from child; +----+-----------+------+ | id | parent_id | v | +----+-----------+------+ | 1 | 1 | 1000 | | 2 | 1 | 1000 | +----+-----------+------+?
【innodb在標準SQL上做的擴展】
1): 只要在父表上有在對應的列上建索引,那么這個列就能在子表中引用
create table if not exists parent(id int not null auto_increment primary key,v int,index uix__parent_v (v) -- 只要父表上有索引就行 );create table if not exists child(id int not null auto_increment primary key,parent_v int not null,v int,constraint fk__child__parent_v foreign key (parent_v) references parent(v) -- 在子表中引用 );insert into parent(id,v) values(1,100); insert into parent(id,v) values(2,100);insert into child(parent_v,v) values(100,2000); insert into child(parent_v,v) values(100,2000);select * from parent; +----+------+ | id | v | +----+------+ | 1 | 100 | | 2 | 100 | +----+------+select * from child; +----+----------+------+ | id | parent_v | v | +----+----------+------+ | 1 | 100 | 2000 | | 2 | 100 | 2000 | +----+----------+------+?
?
【我的評介】
主外鍵約束在標準SQL下體現的是一種一對多的關系,但是經過MySQL的拓展之后可以表現出“多對多”的關系;雖然MySQL這樣
的設計有一定的靈活性,個人覺得最好還是使用標準SQL的方式。
?
【學習交流】
?
?-----------------------------http://www.sqlpy.com-------------------------------------------------
?-----------------------------http://www.sqlpy.com-------------------------------------------------
?
總結
以上是生活随笔為你收集整理的MySQL 主外键约束与标准SQL不同的地方的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker图形化管理工具之Portai
- 下一篇: 小程序开发实战学习笔记