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('艳秋','');

 

posted @ 2021-07-12 21:46  Jasper2003  阅读(177)  评论(0编辑  收藏  举报