SQL约束
SQL 约束
简介
SQL 约束是表中数据的限制条件,包括主键约束、唯一约束、外键约束、非空约束、检查约束等。这些约束可以确保表中数据的完整性、唯一性和有效性。主键约束用于确保表中每行数据都有唯一标识符,唯一约束用于保证数据唯一性,外键约束用于建立表与表之间的引用关系,非空约束用于限制列中是否允许有空值,检查约束用于限制列中输入的数据类型和范围。
常见约束:
- 主键约束:PRIMARY KEY
- 非空约束:NOT NULL
- 唯一约束:UNIQUE
- 默认约束:DEFAULT
- 外键约束:FOREIGN KEY
主键约束
- 主键:一列(或一组列),其值能够唯一标识表中每一行
- 特点:不可重复,唯一,非空
- 语法:
列名 字段类型 PRIMARY KEY
添加主键约束
-- 选择 hog_demo 数据库
USE hog_demo;
-- 创建一个带主键的表
CREATE TABLE emp1(
-- 设置主键 唯一 非空
eid INT PRIMARY KEY,
ename VARCHAR(20),
sex CHAR(1)
);
-- 查看表的详细信息
DESC emp1;
-- 给存在的表添加主键
CREATE TABLE emp2(
eid INT ,
ename VARCHAR(20),
sex CHAR(1)
);
-- 通过 DDL 语句进行设置
ALTER TABLE emp2 ADD PRIMARY KEY(eid);
-- 查看表的详细信息
DESC emp2;
创建主键自增的表
关键字:
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
-- 创建主键自增的表
CREATE TABLE emp3(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
);
-- 查看表的详细信息
DESC emp3;
修改主键自增的起始值
默认地 AUTO_INCREMENT
的开始值是 1,如果希望修改起始值,请使用下面的方式
-- 创建主键自增的表,自定义自增其实值
CREATE TABLE emp4(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
sex CHAR(1)
)AUTO_INCREMENT=100;
-- 插入数据,观察主键的起始值
INSERT INTO emp4(ename,sex) VALUES('小李','男');
INSERT INTO emp4(ename,sex) VALUES('小王','女');
注意:使用不同的删除数据的语法,对自增长的影响不同
DELETE
:只是删除表中所有数据,对自增没有影响,还会按照原来的顺序继续往下排。TRUNCATE
:是将整个表删除掉,然后创建一个新的表,所以主键自增会从 1 重新开始
删除主键约束
-- 删除表中的主键
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 使用 DDL 语句删除表中的主键
ALTER TABLE emp2 DROP PRIMARY KEY;
-- 查看表结构
DESC emp2;
选择主键原则
- 针对业务设计主键,往建议每张表都设计一个主键
- 主键可以没有业务意义,只需要保证不重复
什么类型的字段适合作为主键呢?
- 通常针对业务去设计主键,往往每张表都设计一个主键
- 主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证 不重复就好
非空约束
- 非空约束特点: 某一列不予许为空
- 语法:
字段名 字段类型 NOT NULL
非空约束 NOT NULL 强制这个列不接受 NULL 值。如果不向字段添加值,就无法插入新记录或者更新记录。
示例
-- 选择 hog_demo 数据库
USE hog_demo;
-- 添加非空约束
CREATE TABLE emp5(
eid INT PRIMARY KEY AUTO_INCREMENT,
-- ename 字段不能为空
ename VARCHAR(20) NOT NULL,
sex CHAR(1)
);
# 正常插入一条数据
INSERT INTO emp5 VALUES(1,'张三','男');
# 插入一条数据, ename 字段为空
-- Column 'ename' cannot be null 不可以为空
INSERT INTO emp5 VALUES(2, NULL,'男');
唯一约束
- 唯一约束: 表中的某一列的值不能重复
- 对 NULL 不做唯一的判断
- 语法:
列名 字段类型 UNIQUE
唯一约束可以确保在不是主键的特定列中不会有重复的值。唯一约束对于 NULL 是不做判断的,也就是说唯一约束的列中可以有 NULL 值。
示例
-- 为 ename 字段添加唯一约束
CREATE TABLE emp6(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20) UNIQUE,
sex CHAR(1)
);
主键约束与唯一约束的区别
- 主键约束 唯一且不能够为空
- 唯一约束,唯一但是可以为空
- 一个表中只能有一个主键 , 但是可以有多个唯一约束
默认值
- 默认值约束:用来指定某列的默认值
语法格式
字段名 字段类型 DEFAULT 默认值
字段指定默认值
-- 创建带有默认值的表
CREATE TABLE emp7(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(20),
-- 为 sex 字段添加默认值
sex CHAR(1) DEFAULT '女'
);
总结
SQL 约束是一种重要的数据库对象,用于规定和限制表中数据的规则和条件,确保数据的准确性和可靠性。通过使用 SQL 约束,可以有效地维护数据库中数据的完整性和一致性。