MySQL——约束(constraint)笔记

发布于:2025-04-18 ⋅ 阅读:(24) ⋅ 点赞:(0)

重点!!!

1.什么是约束???常见的约束有哪些????
    
在创建表的时候,可以给表的字段添加相应的约束.添加约束的目的是保证数据合法性,有效性,完整性...等等等.......

2.常见的约束有哪些呢??    

     

注意:

   not null没有表级约束,其他都有表级约束!

3.非空约束 not null.

a.没有表级约束
b.给已经创建好的表的字段修改约束

c.xxx.sql 被称作sql脚本文件 编写了大量了sql 文件。该文件中的所有sql 语句全部执行

source  绝对路径 (终端执行)

4.唯一性约束

唯一性约束修饰的字段具有唯一性,不能重复.但可以为null. 例如:座位号

* 案例:给某一列添加unique

以上zhangsan不能重复..zhangsan只能出现一次.该属性设置了唯一性

* 案例:给两个列或者多个列添加unique

(多个字段联合添加约束) (表级约束)   

(添加了两个约束.)  (列级约束)  

注意: not null没有表级约束,只有列级约束!!

解释: unique

  

添加唯一性约束的列上会自动创建唯一索引

删除唯一约束只能通过删除唯一索引的方式删除.

null值可以重复!

场景:现在有新需求就是两个字段联合起来就有唯一性

错误: create table class 
(
    id,
    name unique,
    type unique(列级约束)
)
这个是各自唯一

正确:create table class 
(
    id,
    name ,
    type ,
    unique(name,type)(这样被称为表级约束)(多个字段联合起来约束)
)
即使张三和张三的名字重复了但是仍然可以插入

4.主键约束 primary key

    

测试:

  a.加了一个重复的值

  

 b.(将主键字段设置为默认null)

结论:

    

 主键相关的术语:

 主键约束 : primary key

 主键字段

 主键值 :  

主键有什么作用?

- 表的设计三范式中有要求,第一范式就要求任何一张表都应该有主键,否则没有主键是非法的,
我们平常的ID就是主键,主键不能为空也不能重复,你可以姓名性别等信息一样,但是主键不可以

- 主键的作用: 主键值是这行记录在这张表当中的唯一标识(一行数据里面的身份证号)

根据主键性质来划分:

   自然主键: 主键值最好就是一个和业务没有任何关系的自然数..(推荐用),不重复就行

   业务主键: 主键值和系统的业务挂钩..与业务紧密关联

最好不要拿着一张表的有业务含义的字段来做主键.. 因为一旦以后的业务发生改变的话,主键值可能也会随着发生变化.. 但有时候主键值没法改变,因为改变可能会导致主键值重复了...     假设银行卡号被修改了

注意:一张表的主键约束只能有1个,主键字段上的每一个值是这一行记录在表中的唯一标识.(身份证号)

深层:

而整个表的数据就是依赖这个主键索引去构建的,对应的数据结构叫做b+树

不建议删除主键约束.

5.主键自增

注册用户时候系统自己分配主键

auto_increment 是在内存中加载让主键部分以1自增..一旦重启服务器就不会出现裂缝问题.
接着实际有的主键的继续递增..(是在内存中的)

6.外键约束

外键约束: foreign key  

外键字段该字段上添加了外键约束

外键值 外键当中的每一个值

场景:两张表(班级表和学生表)(一对一,一个学生只属于一个班级)

a.这个班级NO找到就知道哪个班了(如果将来不添加约束的话,有可能写的这个班级编号不存在
为了保证Cno的值都在其表的范围内 ,所以我们就要加上约束,让它去引用外键表的字段,这个就是外键约束的作用
 

解释:


用外键约束之后,就有了父子关系,所以要遵循规则

顺序要求(有思想):

注意:

父表被引用的字段最低的要求是unique,但通常是主键.父表的某个字段只要是唯一性就行,不能重复

 外键可以为null

总结:

当加unique约束的时候,会自动创建唯一索引
当加主键约束的时候,会自动创建主键索引
当加外键约束的时候,会自动创建普通索引

语法:

结论:

一般会在应用层面解决引用数据的完整性,而不是通过数据库中的外键外键与级联更新适合单机低并发.不适合分布式,高并发集群..级联更新是强阻塞,存在数据库"更新风暴"的问题,

外键影响数据库的插入速度.
但是建外键约束,对查询没有影响,只会限制对数据的增删改!(重点)

7.check约束(实际开发没怎么用)

默认值约束 default


网站公告

今日签到

点亮在社区的每一天
去签到