一、数据的完整性
- 数据的完整性指存储在数据库中的数据应该保持准确性和可靠性
如出现学号相同的数据就是不准确的
二、实体完整性约束
- 实体完整性是对关系中的记录唯一性
- 定义表中的所有行能唯一的标识
- 表中主属性(字段)不能为Null且不能有相同值
- 一般用主键、唯一索引、unique关键字来实现
2.1、主键约束(唯一、不重复、不能为空)
一个表中有且只有一个主键约束
- 主关键字(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录
- 创建表时指定主键
(1)建表时直接添加
格式一!!!:
create table 表名(
列名1 数据类型 primary key,
列名2 数据类型
);
create table t_user(user_id int(10) primary key);
格式二:
主键约束名字的写法:PK_列名
create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1)
);
create table t_user(user_id int(10),user_name varchar(30),constraint pk_id_name primary key(user_id,user_name));
格式三:
create table 表名(
列名1 数据类型,
列名2 数据类型,
primary key(列名1)
);
create table t_user(user_id int(10),primary key(user_id));
例:
(2)通过ALTER语句(针对已存在的表)
格式一:
alter table 表名 modify 列名 数据类型 primary key;
alter table t_user modify user_id int(10) primary key;
格式二:
alter table 表名 add primary key(列名);
alter table t_user add primary key(user_id);
格式三!!!:
alter table 表名 add constraint 主键约束的名字 primary key(列名);
alter table t_user add constraint pk_id primary key(user_id)
例:
(3)删除主键约束
格式:
alter table 表名 drop primary key;
alter table t_user drop primary key;
联合主键:指的是把两个列看成是两个整体,这个整体是不为空,唯一,不重复
- 创建表的同时创建联合主键
格式二:
create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1,列名2)
);
格式三:
create table 表名(
列名1 数据类型,
列名2 数据类型,
primary key(列名1,列名2)
);
- 针对已经存在的表
格式二:
alter table 表名 add primary key(列名,列名2);
格式三:
alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2);
例:
2.2唯一约束(唯一、不重复,可以为空)
- 唯一约束是指定table的列或列组合不能重复,保证数据的唯一性;
- 唯一约束不允许出现重复的值,但是可以为多个null;
- 同一个表可以有多个唯一约束,多个列组合的约束;
- 如果不给唯一约束名称,就默认和列名相同;
- MySQL会给唯一约束的列上默认创建一个唯一索引;
索引:等同于书本的目录,将来能够加快数据的查询速度
(1)创建表的同时创建唯一约束 UN_列名
格式一:
create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 唯一约束的名字 unique(列名1)
);
格式二:
create table 表名(
列名1 数据类型 unique,
列名2 数据类型 unique,
列名3 数据类型
);
一个表中可以存在多个约束
例:
(2)针对已经存在的表,添加唯一约束
格式:alter table 表名 add unique(列名[,列名2]);
(3)删除唯一约束
格式:alter table 表名 drop index 唯一约束的名字;
三、域完整性
- 域完整性是对数据表中字段属性的约束
- 它是由确定表结构时所定义的字段的属性决定的
- 限制数据类型,缺省值,规则,约束,是否可以为空
- 域完整性可以确保不会输入无效的值
3.1默认约束 default
当默认约束来修饰某个列的时候,修饰的列即使不写数据也会默认一个值
(1)创建表的同时创建默认约束
格式:
create table 表名(
列名1 数据类型 default '字符串类型或者日期类型的默认值',
列名2 数据类型 default 数值,
列名3 数据类型
);
(2)针对已经存在的表,通过alter语句
格式:alter table 表名 modify 列名 数据类型 default '值';
(3)删除默认约束
格式:alter table 表名 modify 列名 数据类型;
3.2非空约束not null
(1)创建表时创建非空约束
格式:
create table 表名(
列名1 not null,
列名2
);
(2)针对已经存在的表,通过alter语句
格式:alter table 表名 modify 列名 数据类型 not null;
(3)删除非空约束
格式:alter table 表名 modify 列名 数据类型;
四、参照完整性
- 指表与表之间的数据参照引用
- 使用外键约束实现
4.1外键约束foreign key
- 外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系;
- 表的外键值必须在主表中能找到;
- 当主表的记录被从表参照时,主表的记录将不允许删除;
- 如果要删除数据,需要先删除从表中依赖该记录的数据
- 从表参照主表的某个列,要求主表的列必须有主键约束或者唯一约束
- 当从表中的数据想做操作的时候,先询问主表的意见,主表有的,运行从表操作;主表没有,拒绝从表操作
(1)创建表的同时创建外键约束
主表(接下来在创建新表的时候,要参照的表)
create table 表1(
列名1 数据类型 primary key,
列名2 数据类型
);
从表(外键约束所在的表)FK_l列名
create table 表2(
列名1 数据类型,
列名2 数据类型,
constraint 外键约束的名字 foreign key(从表的列名1) references 主表表名1(列名1)
);
注意:关于引用的列是要求:从表的列和主表的列,列名可以不一样,但是这两个列的数据类型和内容你须保持一致
学生信息(sno)
成绩表(学号)
(2)针对已经存在的表,添加外键约束alter
格式:alter table 从表表名 add constraint 外键约束的名字 foreign key(从表表名1) references 主表表名(主表列名);
(3)删除外键约束
格式:alter table 表名 drop foreign key 外键约束的名字;
版权声明:本文为weixin_49164248原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。