我们使用RDBMS来存储数据,而不用电子表格或者文字处理程序存储数据的主要原因就是,数据库可以防止存储垃圾数据,保证数据的可靠高效。而RDBMS就是通过维护数据完整性来保证没有冗余的垃圾数据。
数据完整性可以分为四大类:
一、实体完整性
通过主键来实现,每一行所代表的实体是唯一的,与其他行不同。primary key ,一般设置为自动增长 auto_increment。
二、域完整性
域完整性是指每一列所代表的属性,一般有
非空 not null
唯一 unique
检查 check()
默认 default
外键 foreign key ( 列名) references 表名(列名)
三、引用完整性
一张表的外键的值是另一张表的主键,一般用外键来表示,foreign key。
在mysql中外键想关联的表必须是innodb类型的。
四、用户自定义完整性
有触发器和存储过程。
列子:
create database data_user
use data_user;
create table t_department(
d_deptid int primary key auto_increment,-- 部门id
d_deptname varchar(50) not null,-- 部门名称
d_describe varchar(500),-- 部门描述
)engin=innodb charset='utf8';
creat table t_employee(
e_employeeid int primary key,-- 员工工号
e_deptid int ,-- 所属部门id
e_employeename varchar(50) not null,-- 姓名
e_gender char(2) not null default '男',-- 性别
e_birthday datatime not null,-- 生日
e_idcard char(18) not null unique,-- 员工身份证号
e_degree varchar(12) not null,-- 学历
e_graduateschool varchar(50) not null,-- 毕业学校
e_graduatedate datetime not null,-- 毕业时间
e_specialty varchar(50) not null,-- 专业
e_telephone varchar(200) not null,-- 电话,可以存储多个
e_salary smallint,-- 固定薪水
e_allowance decimal(18,2),-- 住房补贴
e_skill varchar(2000),-- 特长
consraint foreign key fk_d_deptid (e_deptid) references t_department(deptid),
constraint c_valid check(e_birthday<e_getdate() and e_graduatedate<getdate() and len(e_idcard)=18)
)engin=innodb charset='utf8';