一、SQL约束
1、主键约束
PRIMARY KEY 约束,用于标识数据库表中的每条记录是唯一不重复的。
开发中,每个表有且只有一个主键
主键特点:唯一且不能为空
添加主键约束的三种方式
方式一:创建表时,在字段描述处,声明指定字段为主键:
CREATE TABLE p1
(
id int primary key,
name varchar(200),
idCard varchar(50)
)
方式二:创建表时,在constraint约束区域,声明指定字段为主键:
格式:[constraint 名称] primary key (字段列表)
关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
联合主键:多个字段共同作为主键,单个字段的值可以重复,联合起来的值不能重复
CREATE TABLE p2
(
id int,
name varchar(200),
idCard varchar(50),
Primary key(字段列表)
)
方式三:创建表之后,通过修改表结构,声明指定字段为主键:
CREATE TABLE p3
(
id int,
name varchar(200),
idCard varchar(50)
)
#因为一般主键都是提前确定好的,都是跟随表一起创建
ALTER TABLE p3 ADD CONSTRAINT pk_p4 PRIMARY KEY (id);
删除主键约束
如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE 表名 DROP PRIMARY KEY;
注:主键约束一旦确定,开发中不会轻易删除。
2、非空约束
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
下面的 SQL 语句强制"Name" 列不接受 NULL 值:
CREATE TABLE p4
(
id int,
name varchar(200) not null,
idCard varchar(50)
)
3、唯一约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束都可以标识当前字段唯一,不重复。
注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
唯一约束,会忽略null值
主键约束和唯一约束的区别:
1、主键是唯一且不能为空,唯一约束是唯一可以为空
2、一个表最多只能有一个主键,可以多个唯一约束
添加唯一约束
与主键添加方式相同,共有3种,
方式1:创建表时,在字段描述处,声明唯一:
CREATE TABLE p5
(
id int,
name varchar(200),
idCard varchar(50) unique
)
方式2:创建表时,在约束区域,声明唯一:
CREATE TABLE p6
(
id int,
name varchar(200),
idCard varchar(50),
Unique(idCard)
)
方式3:创建表后,修改表结构,声明字段唯一:(仅需了解)
ALTER TABLE Persons ADD [CONSTRAINT 名称] UNIQUE (字段)
删除唯一约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE p6 DROP INDEX 名称
如果添加唯一约束时,没有设置约束名称,默认是当前字段的字段名。
一般不会开发中一旦设置唯一约束,不会轻易删除
4、自动增长
我们通常希望在每次插入新记录时,数据库自动生成字段的值。
我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(可以是唯一约束,可以是主键约束)。
计数器:从1开始增
下列 SQL 语句把 “Persons” 表中的 “P_Id” 列定义为 auto_increment 主键
CREATE TABLE p7
(
id int PRIMARY KEY auto_increment,
name varchar(200),
idCard varchar(50)
)
#自动增长策略
#算出主键的最大值,再插入最大值+1
向persons添加数据时,可以不为P_Id字段设置值,也可以设置成null,数据库将自动维护主键值:
面试:delete和truncate的区别
Delete 不会清空自动增长的值
Truncate 清空自动增长的值
二、外键约束
外键作用:进行多表数据关联
(逻辑外键(一般用到的) 外键(受数据库的保护))
主表:数据提供方(一方的表)
从表:数据引用方(多方的表)
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
查看所有的主键,外键信息;
外键特点:
从表外键指向主表主键
从表外键的数据类型和长度,必须和主表主键数据类型和长度 一致
三、多表关系
1、一对多
2、多对多
3、一对一
四、多表查询
什么是多表查询
多表查询的分类
1、笛卡尔积现象
如何清除笛卡尔积
内连接
外连接
2、子查询