笔记资料来自黑马程序员。
一,约束
1,概念:约束实际上就是表中数据的限制条件
2,作用:表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。
3,分类:
主键约束(primary key) PK 自增长约束(auto_increment)
非空约束(not null) 唯一性约束(unique)
默认约束(default) 零填充约束(zerofill)
外键约束(foreign key) FK
二,主键约束
1,概念:
MySQL主键约束是一个列或者多个列的组合,其值能唯一地标识表中的每一行,方便在RDBMS中尽快的找到某一行(类似于身份证号)。主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。每个表最多只允许一个主键
主键约束的关键字是:primary key当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
2,操作
2.1添加单列主键
语法1:
实现:
语法2:
在定义字段的最后加,[constraint <约束名>] 这个中括号里面的可以省略。
实现:
2.2添加多列主键(联合主键)
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。只要组成联合主键的几个字段不是全都一样就可以,但是它们都不可为空。
注意:
1. 当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
2. 一张表只能有一个主键,联合主键也是一个主键
语法:
例子:
2.3修改表结构添加主键
主键约束不仅可以在创建表的同时创建,也可以在修改表时添加。
语法:
例子:
2.4删除主键约束
一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。
语法:
例子:
三,自增长约束
1,概念
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
通过给字段添加 auto_increment 属性来实现主键自增长
语法:
例子:
注意:
默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。
一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
auto_increment约束的字段必须具备 NOT NULL 属性。
auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等。
auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效
2,指定自增字段初始值
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加
新增加的是从100开始
注意:delete和truncate在删除后自增列的变化
delete数据之后自动增长从断点开始(比如上次数据最后一个是2,那么即使所有数据都删除了,再新添加数据是从3开始,是接着上面的数据继续)
truncate数据之后自动增长从默认起始值(从1)开始
四,非空约束
1,概念
MySQL 非空约束(not null)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
语法:
例子:
2,删除非空约束
五,唯一约束
1,概念
唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。
注意:在MYSQL中NULL和任何值都不相等,和自己也不相等。
语法:
注意:在这里,约束名主要是为了删除时用。
例子:
2,删除唯一约束
注意:方法一时,若删除时没有唯一约束名,列名就是约束名。
六,默认约束
1,概念
MySQL 默认值约束用来指定某列的默认值。
语法:
例子:
2,删除默认约束
七,零填充约束
1,概念:
插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0,zerofill默认为int(10),当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128~+127,无符号为0~256。
操作:
2,删除零填充约束