第8节 约束和分页
目 标
- 描述约束
- 创建和维护约束
- 数据库分页
什么是约束
- 为了保证数据的一致性和完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
- 约束是表级的强制规定
- 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)
约 束
有以下六种约束:
- NOT NULL 非空约束,规定某个字段不能为空
- UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
- PRIMARY KEY 主键(非空且唯一) – FOREIGN KEY 外键
- CHECK 检查约束
- DEFAULT 默认值
注意: MySQL不支持check约束,但可以使用check约束,而没有任何效果;
根据约束数据列的限制,约束可分为:
- 单列约束:每个约束只约束一列
- 多列约束:每个约束可约束多列数据
根据约束的作用范围,约束可分为:
- 列级约束只能作用在一个列上,跟在列的定义后面
- 表级约束可以作用在多个列上,不与列一起,而是单独定义
NOT NULL 约束
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:
- 所有的类型的值都可以是null,包括int、float等数据类型
- 空字符串””不等于null,0也不等于null
保证列值不能为空:
创建 not null 约束:
增加 not null 约束:
取消 not null 约束:
取消 not null 约束,增加默认值:
UNIQUE 约束
- 同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。
-
MySQL会给唯一约束的列上默认创建一个唯一索引
表示用户名和密码组合不能重复
添加唯一约束
删除约束
PRIMARY KEY 约束
- 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
- 如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
- 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。
- MySQL的主键名总是PRIMARY,当创建主键约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
删除主键约束
添加主键约束
修改主键约束
FOREIGN KEY 约束
- 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
- 从表的外键值必须在主表中能找到或者为空。当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据。
- 还有一种就是级联删除子表数据。
- 注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列
- 同一个表可以有多个外键约束
创建外键约束:
创建多列外键组合,必须使用表级约束:
删除外键约束:
增加外键约束:
FOREIGN KEY 约束的关键字
- FOREIGN KEY: 在表级指定子表中的列
- REFERENCES: 标示在父表中的列
- ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除
-
ON DELETE SET NULL(级联置空): 子表中相应的列置空
CHECK 约束
MySQL可以使用check约束,但check约束对数据验证没有任何作用,添加数据时,没有任何错误或警告
MySQL中使用limit实现分页
背景
- 查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢?
分页原理
- 所谓分页显示,就是将数据库中的结果集,一段一段显示出来需要的条件
怎么分段,当前在第几段(每页有几条,当前在第几页)
- 前10条记录:SELECT * FROM table LIMIT 0,10;
- 第11至20条记录:SELECT * FROM table LIMIT 10,10;
- 第21至30条记录: SELECT * FROM table LIMIT 20,10;
公式:
*(当前页数-1)每页条数,每页条数
*SELECT * FROM table LIMIT(PageNo - 1)PageSize,PageSize;
注意:
- limit子句必须放在整个查询语句的最后!