第一节 数据完整性
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性=在创建表时给表中添加约束
完整性的分类:
- 实体完整性:行
- 域完整性:列
- 引用完整性:学生表(学号,姓名) 成绩表(学号,科目,成绩) 科目表(科目编号,科目名称)
1.1 实体完整性约束
实体:即表中的一行(一条记录)代表一个实体(entity)
实体完整性的作用:标识每一行数据不重复
约束类型:
主键约束(primary key)
唯一约束(unique)
自动增长列(auto_increment)
1.1.1 主键约束(primary key)
注意:每个表中只有一个主键。
特点:数据唯一,且不能为null
示例:
第一种添加方式:
#创建表student
CREATE TABLE student(
id INT PRIMARY KEY,
`name` VARCHAR(50)
);
第二种添加方式:此种方式优势在于,可以创建联合主键
CREATE TABLE student(
id INT,
`name` VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE student2(
id INT,
identity VARCHAR(20),
`name` VARCHAR(50),
PRIMARY KEY(id,identity)
);
1.1.2 唯一约束
特点:数据不能重复,可以为null
CREATE TABLE student(
id INT primary key,
`name` VARCHAR(50) uniqe
);
1.1.3 自动增长列
sqlserver数据库(identity)oracle(sequence)
自动增长不能单独使用,一般需要和主键配合。
给主键添加自动增长的数值,列只能是数值类型
CREATE TABLE student5(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(50)
);
CREATE TABLE student6(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(10)
)AUTO_INCREMENT=10;#从10开始,递增1
1.2 域完整性约束
域完整性约束的作用:限制此单元格的数据正确,不对其他单元格起作用,域代表当前单元格
域完整性约束:数据类型、非空约束(not null)、默认值约束(default)
check约束(mysql不支持)check(sex = '男’or sex =‘女’)
1.2.1 数据类型
数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
tinyint | 1字节 | (-128,127) | (0,255) | 小 |
smallint | 2字节 | (-32768,32767) | (0,65535) | 大 |
mediumint | 3字节 | (-8388608,8388607) | (0,16777215) | 大 |
int或integer | 4字节 | (-2147483648,2147483647) | (0,4294967295) | 大 |
bigint | 8字节 | (-9233372036854775808,9233372036854775807) | (0,18446744073709551615) | 极大 |
float | 4字节 | 查看帮助文档 | 查看帮助文档 | 单 |
double | 8字节 |