mysql数据库五大约束_Mysql数据库(五大约束,三大范式),多表查询,子查询

- 五大约束

1. 主键约束 primary key

2. 唯一约束 unique

3. 默认约束 default

4. 非空约束 null

5. 外键约束 foreign key

- 主键约束特点

7. 唯一不重复

8. 不能设置为 null

9. 一张表里面只能存在一个主键

10. 可以设置两个字段来设置主键(联合主键)

- 主键约束的三种创建方式

1.在创建表的时候设置主键

creat table 表名(

字段名 字段类型 primary key

)

create table 表名(

字段1 字段类型1 字段2 字段类型2

primary key (字段名1)

)

2.表创建完之后设置主键

ALTER TABLE 表 ADD 名字 PRIMARY KEY(列名)

注意:一张表里只能存在一个主键 一般是 id

删除主键 : 因为表里只有一个主键 所以不用根据名称去删除

ALTER TABLE p3 DROP PRIMARY KEY

自增长策略: 关键字 auto_increment

特点:

只能用于整形

一般在开发中用于给主键来设置

每次增长的波长为1 i++ 设置自增常就不用区关注这个字段 系统 默认来给其插入值

- delete 与TRUNCATE TABLE 区别

delete 是一条一条数据删除 效率低 不会删除表结构 只是删除数据,自增长id会接着之前的

TRUNCATE TABLE 删除表结构 所有的数据全部删除 效率高 自增长id从零开始

-唯一约束特点:(唯一 不能重复)

主键约束与唯一约束的区别 都唯一 都可以设置组合外键

一个表里只能存在一个主键 可以有多个唯一

主键约束不能设置为null 唯一约束可以为空

如果没有设置唯一约束的名称 系统就是 将列名设置为唯一约束的名称

创建表

create table 表名(

字段名 字段类型 unique

)

1. 创建表时:唯一约束也可以使用两个列名来设置

alter table 表名 add constarint 名称 unique(列名)

2. 删除

alter table 表名 drop index 唯一约束设置名称

- 非空约束

1. 设置非null约束之后 插入的该列不能为空

create table 表名( 字段名 字段类型 not null )

2. 默认约束

create table 表名( 字段名 字段类型 default )

注意点:

设置默认值之后,插入数据不插入该字段 会自己插入默认值

插入的时候 如果直接写 DEFAULT 插入就是设置的默认

如果不想使用默认值 就需要手动来插入数据

-外键约束

限制两个表的关系,从表的字段值引用了主表的某字段值

外键约束的关键字 foreign key

前提:一般是两张表示(多表)

两张表存在关系 一对一 一对 多 多对多关系

两张表 主表 (一) 老师表(tid int(4)) 从表(多) 学生表(tid int(4))

注意事项:

1.设置外键 一般是设置在从表(多)那边 学生表

2.被引用的一般是对应主表的主键

3.主表的主键 类型与长度必须与外键的类型长度一样

1.创建两张表 :

CREATE TABLEteacher(

tidINT(4) AUTO_INCREMENT PRIMARY KEY,

tnameVARCHAR(20)

);CREATE TABLEteacher(

SidINT(4) AUTO_INCREMENT PRIMARY KEY,

SnameVARCHAR(20),

tidINT(4)

);

2. 添加外键

alter table 表名 add coinstarint 外键的名字 foreign key(从表关联字段)

reference 主表(主键)

3. 删除外键: 先删除外键 再删除外键索引

alter table 表名 drop foreign key 外键的名称

注意:

增加数据 先增加主表 再增加从表

删除数据 先删除从表 再删除主表

总结:约束主要是用于对数据表中的字段来进行约束 保证数据表中的数据的完整性 与正确性

- 三大范式

第一大范式: 每一列都是最小的原子单位 不能进行再分割

第二大范式:每一张表值描述一种事物 每一列 都与主键进行依赖

第三大范式:在第二大范式的基础上 ,不能出现局部传递依赖

总结: 所有列 只找主键进行依赖

- 多表查询

非等值查询, 问题 :大量的数据冗余 所以基本上不使用

select 列名1,列名2 from表1,表名2SELECT a.aid,a.aname,r.a_r_id FROM actor AS a,a_r AS r

等值查询: 在非等值查询语句后面 加上关联的条件 where a.aid =r.aid

连接查询

内连接查询:关键 字 inner join on

匹配规则: 取的是两张表交际

a721a39b86b248a524ad16f257970ccc.png

左外连接 :关键字: left join on

匹配的规则: 查询的时候 以 左表为基准 右表一一匹配 如果匹配上 正常显示

如果匹配不上的 左表依赖显示 右边设置为null

a29a654ba81bd2e3ba57bc4ee350eaea.png

右外连接:关键字 right join on

匹配规则 :查询的时候 已右表为基准 左表一一匹配 如果匹配上 正常显示

如果匹配不上 右表依然显示 左表设置为null

1ddf01d288c2323a4245d74b6532e12d.png

-子查询

定义 :一个完整的查询语句 嵌套另一个完整的查询语句

第一种形式: 把一个子查询的结果当做另一个子查询的条件来使用

cdfbae62fabadd56485295180281164a.png

子查询与连接查询嵌套:

5684af0d5ef05d817103ac60cd747432.png

第二种子查询的方式: 把子查询查询出的结果当成列来进行显示:

3790ffa575f4387e45e8d3e8cd70a3e7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值