数据完整性
1、完整性分类:
实体完整性
域完整性
引用完整性
2、什么是实体完整性
表中的一行(一条记录)代表一个实体(entity)
3、实体完整性的作用
标识每一行数据不重复.行级约束
4、约束类型
主键约束(primary key)
唯一约束(unique)
自动增长(auto_increment)
1、 主键约束
1、特点:
每个表中要有一个主键
数据唯一,且不能为null
2、添加方式:
CREATE TABLE 表名(字段名1 数据类型 primary key,字段名2 数据类型);
3、举例:创建person表
CREATE TABLE person(ID BIGINT primary key,NAME VARCHAR(50))
CREATE TABLE 表名(字段1 数据类型,字段名2 数据类型,primary key(要设置主键的字段));
4、举例创建
CREATE TABLE person(
ID BIGINT,
name VARCHAR(50),
age INT,
primary key(ID)
);
2、联合主键:两个字段数据同时相同时,才违反联合主键约束
1、创建联合主键
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型,primary key(主键1,主键2));
2、举例
CREATE TABLE student(
ID BIGINT,
snum BIGINT,
name VARCHAR(50),
primary key(ID,snum))
3、先创建表再添加主键
CREATE TABLE student(sid INT,name VARCHAR(50));
4、如果表中你之前已经添加了数据,数据不符合主键规则就会报错
ALTER TABLE student ADD CONSTRAINT primary key(sid);
3、唯一约束
1、特点
指定列的数据不能重复
可以为空值
2、格式:
CREATE TABLE students(
id INT primary key,
name VARCHAR(50) UNIQUE
)
4、自动增长列
1、特点
指定列的数据自动增长
即使数据删除,还是从删除的序号继续往下
2、格式
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE);
3、举例
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE);
5、域完整性
1、使用
限制此单元格的数据正确,不对照此列的其他单元格比较
域代表当前的单元格
2、数据类型
数值类型
日期类型
字符串类型
3、非空约束(NOT NULL)
CREATE TABLE stu(
id int primary key auto_increment,
name varchar(20) unique not null,
gender char(1) default '男'
)
4默认值约束(DEFAULT)
CREATE TABLE 表名(
字段名1 数据类型 primary key AUTO_INCREMENT,
字段2 数据类型 UNIQUE NOT NULL,
字段3 数据类型 DEFAULT '默认值');
5、举例:
CREATE TABLE students(
id INT primary key AUTO_INCREMENT,
name VARCHAR(20) UNIQUE NOT NULL,
gender CHAR(1) DEFAULT '男'
);
多表查询
- 一对一
一夫一妻(开发中使用比较少)
2、一对多关系
一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆
创建Person表
人
CREATE TABLE person(
p_id INT PRIMARY KEY AUTO_INCREMENT,
p_name VARCHAR(50),
p_age INT,
p_sex CHAR(1)
);
车
CREATE TABLE car(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(50),
c_color VARCHAR(25),
p_id INT,
CONSTRAINT fk_Person FOREIGE KEY(c_id) REFERENCES person(p_id)
);
合并结果集UNION与UNION_ALL
1、UNION
合并时去除重复记录
2、 UNION ALL
合并时不去除重复记录
3、格式
SELECT * FROM 表1 UNION SELECT * FROM 表2;
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;
4、创建表
CREATE TABLE A(name VARCHAR(10),score INT);
CREATE TABLE B(name VARCHAR(10),score INT);
INSERT INTO A VALUES('a',10),('b',20),('c',30);
INSERT INTO A VALUES('a',10),('b',20),('c',40);
4、 UNION
SELECT * FROM A
UNION
SELECT * FROM B;
5、UNION ALL
SELECT * FROM A
UNION ALL
SELECT * FROM B;
6、 注意事项
被合并的两个结果集:列数,列类型必须相同