MySQL:SQL约束
1) 约束的作用:
对表中的数据进行一定的限制,从而保证数据的正确性、有效性、完整性.
违反约束的 不正确数据,将无法插入到表中
2) 常见的约束
约束名 | 约束关键字 |
主键 | primary key |
唯一 | unique |
非空 | not null |
外键 | foreign key |
主键的特点 | 不可重复 唯一 非空 |
作用 | 用来表示数据库中的每一条记录 |
1.添加主键约束
语法格式
字段名 字段类型 primary key
1) 需求: 创建一个带主键的表
# 方式1 创建一个带主键的表 CREATE TABLE emp2( -- 设置主键 唯一 非空 eid INT PRIMARY KEY, ename VARCHAR(20), sex CHAR(1) ); -- 删除表 DROP TABLE emp2; -- 方式2 创建一个带主键的表 CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(1), -- 指定主键为 eid字段 PRIMARY KEY(eid) ); -- 方式3 创建一个带主键的表 CREATE TABLE emp2( eid INT , ename VARCHAR(20), sex CHAR(1) ) -- 创建的时候不指定主键,然后通过 DDL语句进行设置 ALTER TABLE emp2 ADD PRIMARY KEY(eid);
DESC 查看表结构
-- 查看表的详细信息 DESC emp2;
2) 测试主键的唯一性 非空性
# 正常插入一条数据 INSERT INTO emp2 VALUES(1,'宋江','男'); # 插入一条数据,主键为空 -- Column 'eid' cannot be null 主键不能为空 INSERT INTO emp2 VALUES(NULL,'李逵','男'); # 插入一条数据,主键为 1 -- Duplicate entry '1' for key 'PRIMARY' 主键不能重复 INSERT INTO emp2 VALUES(1,'孙二娘','女');
3) 哪些字段可以作为主键 ?
通常针对业务去设计主键,每张表都设计一个主键id
主键是给数据库和程序使用的,跟最终的客户无关,所以主键没有意义没有关系,只要能够保证不重复 就好,
比如 身份证就可以作为主键
2.删除主键约束
删除 表中的主键约束 (了解)
-- 使用DDL语句 删除表中的主键 ALTER TABLE emp2 DROP PRIMARY KEY; DESC emp2;
3. 主键的自增
注: 主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值.
关键字:
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)
1) 创建主键自增的表
-- 创建主键自增的表 CREATE TABLE emp2( -- 关键字 AUTO_INCREMENT,主键类型必须是整数类型 eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) );
2) 添加数据 观察主键的自增
INSERT INTO emp2(ename,sex) VALUES('张三','男'); INSERT INTO emp2(ename,sex) VALUES('李四','男'); INSERT INTO emp2 VALUES(NULL,'翠花','女'); INSERT INTO emp2 VALUES(NULL,'艳秋','女');
4. 修改主键自增的起始值
默认地 AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下面的方式
-- 创建主键自增的表,自定义自增其实值 CREATE TABLE emp2( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), sex CHAR(1) )AUTO_INCREMENT=100; -- 插入数据,观察主键的起始值 INSERT INTO emp2(ename,sex) VALUES('张百万','男'); INSERT INTO emp2(ename,sex) VALUES('艳秋','女');
5. DELETE和TRUNCATE对自增长的影响
删除表中所有数据有两种方式
清空表数据的方式 | 特点 |
DELETE | 只是删除表中所有数据,对自增没有影响 |
TRUNCATE |
truncate 是将整个表删除掉,然后创建一个新的结构相同的表 自增的主键,重新从 1开始 |
测试1: delete 删除表中所有数据
-- 目前最后的主键值是 101 SELECT * FROM emp2; -- delete 删除表中数据,对自增没有影响 DELETE FROM emp2; -- 插入数据 查看主键 INSERT INTO emp2(ename,sex) VALUES('张百万','男'); INSERT INTO emp2(ename,sex) VALUES('艳秋','女')
测试2: truncate删除 表中数据
-- 使用 truncate 删除表中所有数据, TRUNCATE TABLE emp2; -- 插入数据 查看主键 INSERT INTO emp2(ename,sex) VALUES('张百万','男'); INSERT INTO emp2(ename,sex) VALUES('艳秋','女');
二. 非空约束
非空约束的特点: 某一列不允许为空
语法格式
字段名 字段类型 not null
需求1: 为 ename 字段添加非空约束
# 非空约束 CREATE TABLE emp2( eid INT PRIMARY KEY AUTO_INCREMENT, -- 添加非空约束, ename字段不能为空 ename VARCHAR(20) NOT NULL, sex CHAR(1) );
三. 唯一约束
唯一约束的特点: 表中的某一列的值不能重复( 对null不做唯一的判断 )
语法格式
字段名 字段类型 unique
1) 添加唯一约束
#创建emp3表 为ename 字段添加唯一约束 CREATE TABLE emp3( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20) UNIQUE, sex CHAR(1) );
2) 测试唯一约束
-- 测试唯一约束 添加一条数据 INSERT INTO emp3 (ename,sex) VALUES('张百万','男'); -- 添加一条 ename重复的 数据 -- Duplicate entry '张百万' for key 'ename' ename不能重复 INSERT INTO emp3 (ename,sex) VALUES('张百万','女');
主键约束和唯一约束的区别
1. 主键约束: 唯一,且不能为空
唯一约束:唯一,但是可以为空
2. 一个表中,只能有一个主键,但是可以有多个唯一约束
四. 外键约束
FOREIGN KEY 表示外键约束,将在多表中学习
五. 默认值
默认值约束 用来指定某列的默认值
语法格式
字段名 字段类型 DEFAULT 默认值
1) 创建emp4表, ename字段默认奥利给
-- 创建带有默认值的表 CREATE TABLE emp4( eid INT PRIMARY KEY AUTO_INCREMENT, -- 为ename 字段添加默认值 ename VARCHAR(20) DEFAULT '奥利给', sex CHAR(1) );
2) 测试 添加数据使用默认值
-- 添加数据 使用默认值 INSERT INTO emp4(ename,sex) VALUES(DEFAULT,'男'); INSERT INTO emp4(sex) VALUES('女'); -- 不使用默认值 INSERT INTO emp4(ename,sex) VALUES('艳秋','女');