MySQL数据库约束条件的补充

约束条件的补充

主键

自增

外键

 

 

 

约束条件:主键

主键    primary key

1.从约束条件的层面上来说 相当于 not null unique>>>>>非空且唯一

 create table t1(id int primary key);
 creare table t2(id int not null unique);

2.但是主键还是InnoDB储存引擎组织数据表的依据

InNoDB规定了一个表必须有且只有一个主键

不指定主键的情况下会采用隐藏的字段作为主键

当表中没有主键但是有非空且唯一的字段就自动的升级为主键(从上往下的第一个)

主键可以加快查询的速度 隐藏意味着无法使用主键就会导致速度无法提升

 create table t2(
       id int,
       name char(16),
       age int not null unique,
       addr char(16) not null unique);

结论:在创建表的时候一般都需要id字段 并且该字段一个设置为标的主键字段

 

联合主键

主键可以是单列主键也可以是多列主键 但是联合主键使用的频率很低

 create table t3(
       id int,
       name char(16),
       primary key(id,name));

 

约束条件:自增

自增  auto_increment

配合主键一起使用

create table t4(
    id int primary key,
    name char(16));

主键字段的固定写法:

id int primary key auto_increment

自增的补充点

1.自增的特性不会因为delete操作而重置或回退

delete from   只删除数据

2.如果想重置需要清空表数据和表结构

truncate   即删除数据又重置主键

 

约束条件:外键

怎么引出外键这个知识点

举个员工表的例子:

先定义一张员工表

MySQL数据库约束条件的补充

 id   name    age       dep_name     dep_desc   

问题出现了:

1.表结构不清晰

2.表数据重复

3.数据扩展性差

 

如何解决上面的三个问题:对表格进行拆分

 

 

 

MySQL数据库约束条件的补充

 

 

 虽然通过拆表解决了上面的三个问题但是员工跟部门却没有了关系

在员工表里面添加一个部门的编号dep_id(外键)

MySQL数据库约束条件的补充

外键的定义:记录表与表之间数据关系的字段

 

表关系的种类

一对多关系

多对多关系

一对一关系

没有关系

如何判断表的关系(重要)

一对多关系

判断表的关系需要我们遵循 换位思考 的原则

例子: 员工表与部门表

1.先占在员工表的层面

问题:一个员工是否能够存在于多个部门

回答:不行

2.再在部门表的层面

问题:一个部门可以有多个员工吗

回答:可以

结论:一个可以 一个不可以 那么员工表和部门表的关系就是"一对多"

MySQL数据库约束条件的补充

对应的SQL语句怎么写

1.先写基本字段类型与约束条件

2.之后在考虑外键

create table emp(
    id int primary key auto_increment,
    name char(16),
    age int,
    dep_id int,
    foreign key(dep_id) references dep(id)
);
create table dep(
    id int primary key auto_increment,
    dep_name char(16),
    dep_desc char(32)
);

MySQL数据库约束条件的补充

 

 

 

多对多关系

例子: 以书籍表与作者表

1.先站在书籍表

问:一本书可以有多个作者嘛

答:可以

2.站在作者表

问:一名作者可不可以有多个书

答:可以

结论:两边都可以 表关系就是"多对多"

针对多对多的表关系 外键字段需要建立在第三张表格中

MySQL数据库约束条件的补充 

SQL语句写法

create table book(
    id int primary key auto_increment,
    name char(16));

create table author( id int primary key auto_increment, name char(16), age int);

create table book2author(
id int primary key auto_increment,
author_id int,
book_id int,
foreign key(author_id) references author(id)
on update cascade
on delete cascade,
foreign key(book_id) references book(id)
on update cascade
on delete cascade
);

 MySQL数据库约束条件的补充

 

 

一对一关系

可以借鉴的例子就是

客户表与学生表

用户名与用户详情表

下面是客户表与可以纤细信息表

MySQL数据库约束条件的补充

 

 结论:两边都不可以 那么表关系不是"一对一"的关系就是没有关系

一对一表关系:外键建立在任何的一个表中都可以 但是推荐建立在查询频率比较高的表中

SQL语句写法

create table user(
    id int primary key auto_increment,
    name varchar(16),
    detail_id int unique,
    foreign key(detail_id) references user_detail(id)
    on update cascade
    on delete cascade
);
create table user_detail(
    id int primary key auto_increment,
    phone bigint,
    addr varchar(16)
);

MySQL数据库约束条件的补充

 

 

 

修改表相关的SQL语句

1.修改表名

alter table 表名 rename 新表名;

2.增加字段

alter table 表名 add 字段名 数据类型 [完整性约束条件],

 add 字段名  数据类型 [完整性约束条件…];

alter table 表名
add 字段名 数据类型 [完整性约束条件…] first;

alter table 表名
add 字段名 数据类型 [完整性约束条件…]after 字段名;

3.删除字段

alter table 表名 drop 字段名;

3.修改字段(modify只能修改字段数据类型完整约束,不能修改字段名,但是change可以哦!!!!)

alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整约束条件...];

alter table 表名 change 旧字段名 新字段名 新数据类型 [完整约束条件...];

 

 

 

 

上一篇:mysql的主键/删除操作等


下一篇:13. Amazon DocumentDB