数据库的完整性介绍
用来保证存放到数据库中的数据是有效的,即数据的有效性和准确性。
而为了保证数据的有效性和准确性,就需要在创建表时给表中添加约束(当然也可以后续添加)。
数据库完整性的分类:
-
实体完整性(行完整性)
-
域完整性(列完整性)
-
引用完整性(关联表完整性)
约束的分类:
-
主键约束:primary key
-
唯一约束:unique [key]
-
非空约束:not null
-
默认约束:default
-
自动增长:auto_increment
-
外键约束:foreign key
如果有多个约束,之间应该用空格间隔开
示例:
create table student(
studentno int primary key auto_increment,
loginPwd varchar(20) not null default '123456',
studentname varchar(50) not null,
sex char(2) not null,
gradeid int not null,
phone varchar(255) not null,
address varchar(255) default '学生宿舍',
borndate datetime,
email varchar(50)
);
1.实体完整性
实体:表中的一行记录就表示一个实体。
实体完整性:标识行的数据不重复。
包含的约束类型:
-
主键约束:primary key
-
唯一约束:unique [key]
-
自动增长:auto_increment
1.1主键约束
每一个表都只能有一个主键。标识为主键的列数据唯一且不能为null。(当一张表有多个主键时,我们称之为联合主键,即用多个字段一起作为一张表的主键)
主键约束添加方式:
(1)创建表时在列名的后面添加主键约束。
CREATE TABLE student( id int primary key, name varchar(50) );
(2)创建表时在所有列名最后添加主键约束(方便建立联合主键)
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) );
(3)创建完表后进行更改
CREATE TABLE student( id int, name varchar(50) );
ALTER TABLE student ADD PRIMARY KEY (id);
1.2唯一约束
保证不同行的数据不能重复
CREATE TABLE student( Id int primary key, Name varchar(50) unique );
1.3自动增长约束
当设置某列自动增长约束时,该列只能是整数类型。
自动增长约束可以设置任意字段,并不一定非要是主键。
自增长字段可以不进行赋值,它自动从1开始每插入一条数据就加一。
CREATE TABLE student( Id int primary key auto_increment, Name varchar(50) );
2.域完整性
域完整性是用于限制某列的各个单元格中数据,是对单个单元格数据进行约束,不对照其他单元格比较。
包含的约束类型:
-
非空约束:not null
-
默认约束:default
-
check约束(mysql不支持此约束)
2.1非空约束
设置单元格值非空
CREATE TABLE student( Id int primary key, Name varchar(50) not null, Sex varchar(10) );
INSERT INTO student values(1,’tom’,null);
2.2默认约束
设置添加数据时的默认值
CREATE TABLE student( Id int primary key, Name varchar(50) not null, Sex varchar(10) default '男' );
insert intostudent1 values(1,'tom','女');
insert intostudent1 values(2,'jerry');
3.引用完整性
不同表之间的关联通过引用完整性来约束。
引用完整性只包含外键约束:foreign key
外键的数据类型一定要和对应的参照列(另一个表的主键列)相同。
外键约束的添加方式:
(1)创建表时添加
//constraint 自定义外键名称 foreign key(外键列名) references 主键表名(主键列名)
CREATE TABLE student(id int primary key, name varchar(50) not null, sex varchar(10) default '男' );
create table score(id int primary key, score int, sid int , constraint fk_score_sid foreign key(sid) references student(id));
(2)后续添加
ALTER TABLE score ADD CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student(id);