约束和分页


什么是约束
• 为了保证数据的一致性和完整性,SQL规范以约
束的方式对表数据进行额外的条件限制。
• 约束是表级的强制规定
• 可以在创建表时规定约束(通过 CREATE
TABLE 语句),或者在表创建之后也可以(通
过 ALTER TABLE 语句)

约 束
• 有以下六种约束:
– NOT NULL 非空约束,规定某个字段不能为空
– UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
– PRIMARY KEY 主键(非空且唯一)
– FOREIGN KEY 外键
– CHECK 检查约束
– DEFAULT 默认值

NOT NULL 约束

1.非空约束用于确保当前列的值不为空值,非空约
束只能出现在表对象的列上。
2.Null类型特征:
所有的类型的值都可以是null,包括int、
float等数据类型
空字符串””不等于null,0也不等于null

创建 not null 约束:

CREATE TABLE emp(
id INT(10) NOT NULL,
NAME VARCHAR(20) NOT NULL DEFAULT 'abc',
sex CHAR NULL
);

增加 not null 约束:

ALTER TABLE emp
MODIFY sex VARCHAR(30) NOT NULL;

取消 not null 约束:

ALTER TABLE emp
MODIFY sex VARCHAR(30) NULL;

取消 not null 约束,增加默认值:

ALTER TABLE emp
MODIFY NAME VARCHAR(15) DEFAULT 'abc' NULL;

UNIQUE 约束

唯一约束,允许出现多个空值:NULL。
• 同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束的时候,如果不给唯一约束名称,就
默认和列名相同。
• MySQL会给唯一约束的列上默认创建一个唯一索引

CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表级约束语法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);

• 表示用户名和密码组合不能重复
添加唯一约束

ALTER TABLE USER
ADD UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
ADD CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
MODIFY NAME VARCHAR(20) UNIQUE;

删除约束

ALTER TABLE USER
DROP INDEX uk_name_pwd;

PRIMARY KEY 约束
• 主键约束相当于唯一约束+非空约束的组合,主
键约束列不允许重复,也不允许出现空值
• 如果是多列组合的主键约束,那么这些列都不允
许为空值,并且组合的值不允许重复。
• 每个表最多只允许一个主键,建立主键约束可以
在列级别创建,也可以在表级别上创建。
• MySQL的主键名总是PRIMARY,当创建主键约束
时,系统默认会在所在的列和列组合上建立对应的
唯一索引。

列级模式

CREATE TABLE emp4(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20)
);

表级模式

CREATE TABLE emp5(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp5_id_pk PRIMARY KEY(id)
);

组合模式

CREATE TABLE emp6(
id INT NOT NULL,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp7_pk PRIMARY KEY(NAME,pwd)
);

删除主键约束

ALTER TABLE emp5
DROP PRIMARY KEY;

添加主键约束

ALTER TABLE emp5
ADD PRIMARY KEY(NAME,pwd);

修改主键约束

ALTER TABLE emp5
MODIFY id INT PRIMARY KEY;

FOREIGN KEY 约束

• 外键约束是保证一个或两个表之间的参照完整性,
外键是构建于一个表的两个字段或是两个表的两个字
段之间的参照关系。
• 从表的外键值必须在主表中能找到或者为空。当主
表的记录被从表参照时,主表的记录将不允许删除,
如果要删除数据,需要先删除从表中依赖该记录的数
据,然后才可以删除主表的数据。
• 还有一种就是级联删除子表数据。
• 注意:外键约束的参照列,在主表中引用的只能是
主键或唯一键约束的列
• 同一个表可以有多个外键约束

主表

CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);

从表

CREATE TABLE emp(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
); CONSTRAINT emp_dept_id_fk FOREIGN KEY(dept_id)
REFERENCES dept(dept_id)

创建多列外键组合,必须使用表级约束:
主表

CREATE TABLE classes(
id INT,
NAME VARCHAR(20),
number INT,
PRIMARY KEY(NAME,number)
);

从表

CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
classes_name VARCHAR(20),
classes_number INT,
FOREIGN KEY(classes_name,classes_number)
REFERENCES classes(NAME,number)
);

删除外键约束:

ALTER TABLE emp
DROP FOREIGN KEY emp_dept_id_fk;

增加外键约束:

ALTER TABLE emp
ADD [CONSTRAINT emp_dept_id_fk] FOREIGN KEY(dept_id)
REFERENCES dept(dept_id);

– FOREIGN KEY: 在表级指定子表中的列
– REFERENCES: 标示在父表中的列
–ON DELETE CASCADE(级联删除): 当父表中的列被删除
时,子表中相对应的列也被删除
–ON DELETE SET NULL(级联置空): 子表中相应的列置空

CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20),
classes_name VARCHAR(20),
classes_number INT,
/*表级别联合外键*/
FOREIGN KEY(classes_name, classes_number)
REFERENCES classes(NAME, number) ON DELETE CASCADE);

limit实现分页

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值