MySQL 主外键约束与标准SQL不一样的地方

标准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): 子表引用交表的惟一索引ui

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上作的扩展url

  1): 只要在父表上有在对应的列上建索引,那么这个列就能在子表中引用spa

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 |
+----+----------+------+

 

 

个人评介.net

  主外键约束在标准SQL下体现的是一种一对多的关系,可是通过MySQL的拓展以后能够表现出“多对多”的关系;虽然MySQL这样设计

  的设计有必定的灵活性,我的以为最好仍是使用标准SQL的方式。code

 

学习交流blog

 

 -----------------------------http://www.sqlpy.com-------------------------------------------------索引

 -----------------------------http://www.sqlpy.com-------------------------------------------------

相关文章
相关标签/搜索