MySQL中三种表关系的建立

MySQL中三种表关系的建立

一:约束条件之主键

1.什么是主键?

从约束条件的角度,主键是非空且唯一的字段 not null unique

create table t1(

id int not null unique,

name varchar(32)

);

2.主键的特点

主键可以加快数据查询,类似于新华字典的目录

1.InnoDB存储引擎规定,mysql必须有且只有一个主键

2.当表中没有主键字段或者非空且唯一的字段的时候,mysql会自动创建一个隐藏的主键字段

3.如果创建的表中没有主键字段,而有非空且唯一的字段,InnoDB存储引擎会自动将该字段设置为主键

4.创建表的时候都应该有一个’id’字段,并且该字段为主键(eg:udi,sid,eid…)

5.联合主键:几个字段公用一个主键

create table t3(

nid int,

sid int,

primary key(nid, sid)

);

6.主键的自增 auto_increment

该约束条件不能单独使用 必须跟在键后面(主要配合主键一起使用)自增的特点:自增的操作不会因为删除数据的操作而回退和重置

create table t4(

id int primary key auto_increment,

name varchar(32)

);

7.重置主键: truncate 表名; 删除表数据并重置主键值

二:约束条件之外键

1.什么是外键?

专门用来记录表与表之间数据的关系

2.表与表之间数据的关系

1.一对多2.多对多3.一对一4.没有关系

3.如何判断表与表之间的关系

方法:换位思考,即:站在不同的表的角度上分析,看该表与其他表之间是否是一对多关系

4.sql语句建立表关系的顺序

1.先写普通字段2.再写外键字段3.先创建被关联的表(没有外键)4.然后再是关联表(有外键)

5.有外键的表的数据操作

1.插入表数据的时候 针对外键字段只能填写被关联表字段已经出现过的数据值2.被关联字段无法修改和删除级联更新、级联删除 被关联数据一旦变动 关联的数据同步变动

三:三种关系表的建立

1.一对多

1.什么是一对多表关系?

如下图:员工表中的每一条员工数据只能对应部门表中的一条部门数据,而部门表中的每一条部门数据够对应员工表中的多条员工数据,这种关系就是一对多的表关系。

2.图示:

3.sql语句创建一对多表关系

外键建在多的一方

create table dep(

id int primary key auto_increment,

name varchar(32)

);

create table emp(

id int primary key auto_increment,

name varchar(32),

dep_id int,

foreign key(dep_id) references dep(id)

on update cascade

on delete cascade

);

2.多对多

1.什么是多对多表关系?

如下图所示:书籍表中的每一条书籍数据可以对应作者表中的多条作者数据,而作者表中的一条作者数据也能对应书籍表中的多条书籍数据,这种关系就是多对多的关系

2.图示:

3.sql语句创建多对多表关系

需要单独创建第三张表来存储这种关系,外键建在第三张表中

create table Book(

id int primary key auto_increment,

name varchar(32)

);

create table Author(

id int primary key auto_increment,

name varchar(32)

);

create table Author2Book(

id int primary key auto_increment,

author_id int,

foreign key(author_id) references Author(id)

on update cascade

on delete cascade,

book_id int,

foreign key(book_id) references Book(id)

on update cascade

on delete cascade

);

3.一对一

1.什么是一对一表关系?

如下图所示:用户表中的每一条数据只能对应用户详情表中的一条数据,用户详情表中的每一条数据也只能对应用户表中的一条数据,这种关系就是一对一

2.图示:

3.sql语句创建多对多表关系

外键建在任意一方都可以,建议建在调用频率高的一方

create table user(

id int primary key auto_increment,

name varchar(32),

detial_id int unique,

foreign key(detial_id) references user_detial(id)

on update cascade

on delete cascade

);

create table user_detial(

id int primary key auto_increment,

age int,

phone bigint

);

清芳推荐

一站式翻译平台评测:翻易通
365是黑平台吗

一站式翻译平台评测:翻易通

📅 08-15 👀 6702
北京哪家银行有硬币存款机 工行北京分行硬币兑换机安装地点在什么位置?
香港购6s攻略,如何以实惠价格入手新款iPhone 6s_香港买6s攻略