数据的完整性
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据完整性 = 在创建表时给表中添加约束
数据的完整性是指数据的可靠性和准确性,数据完整性类型一般分三种:
1.实体完整性:通过唯一约束,主键约束或标识列属性来实现,如:PRIMARY KEY(主键约束)、UNIQUE 唯一值约束,自动增长列(auto_increment)。
2.域完整性:通过数据类型(如数值类型、日期类型、字符串类型等限制类型)、非空约束(NOT NULL)、默认值定义(DEFAULT)、CHECK检查(MySQL不支持check约束)来实现。
3.引用完整性:又叫做参照完整性,通过外键约束(FOREIGN KEY)来实现。引用完整性保证键值在所有表中一致,不能引用不存在的值。
1.实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity)。
实体完整性包含主键约束和唯一值约束,作用:标识每一行数据不重复。
1.1 主键约束 (PRIMARY KEY)
- 每个表中都要有一个主键
- 特点:数据唯一,且不能为null
示例:
第一种添加方式:
CREATE TABLE student(
id int primary key,
name varchar(50)
);
第二种添加方式:此种方式优势在于可以创建联合主键
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
一张表只能设置一个主键,值必须唯一,不允许为空,可以设置一列,也可以设置多列为复合主键(那么就是多列组合唯一,且都不为空),主键就是索引。
CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid?stuid)
);
第三种添加方式:
CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);
1.2 唯一值约束(unique)
一张表一列添加唯一值约束,保证数据值不重复,也可以有多个列添加唯一值约束,只允许一条记录为空值。
CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);
注意:
如果表中现有记录是重复的,该列不允许添加唯一性约束。
1.3 自动增长列(auto_increment)
给主键添加自动增长的数值,列只能是整数类型
CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
);
INSERT INTO student(name) values(‘tom’);
2.域完整性
域完整性的作用:限制此单元格数据正确,不对照此列的其他单元格比较域代表当前单元格
域完整性约束: 数据类型 非空约束(not null) 默认值约束(default)
check约束(mysql不支持) check(sex= ‘男’ or sex = ‘女’)
- 2.1 数据类型:(数值类型、日期类型、字符串类型)
- 2.2 非空约束:NOT NULL 确保当前列的值不为空。
- 2.3 默认值约束:default
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO student values(1,’tom’,null);
注意:
NULL表示所有的类型的值都可以是NULL,但是空字符串是不等于NULL的,0也不等于NULL,“ ”空格字符更不等于NULL。
默认值约束:default 插入新的记录时,如果该字段没有赋值,就使用默认值。
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘?’
);
insert intostudent1 values(1,'tom','?');
insert intostudent1 values(2,'jerry',default);
CREATE TABLE student(
Id INT pirmary KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT ‘男’
);
INSERT INTO student1 VALUES(1,'tom','女');
INSERT INTO student1 VALUES(2,'jerry',DEFAULT);
#给表中一列添加默认值约束:
ALTER TABLE student MODIFY COLUMN name VARCHAR(50) DEFAULT '张三';
#删除表中一列的默认值约束:
ALTER TABLE student MODIFY COLUMN name VARCHAR(50) DEFAULT NULL;
3. 引用完整性(参照完整性)
外键约束:FOREIGN KEY
例:
CREATE TABLE student(
sid INT pirmary KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT ‘男’
);
CREATE TABLE score(
id INT,
score INT,
sid INT , -- 外键列的数据类型一定要与主键的类型一致
CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES student(sid)
);
#删除外键
ALTER TABLE score DROP FOREIGN KEY fk_score_sid;
第二种添加外键方式:
ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(sid);
- 注意:
外键所引用表的列必须是主键。