【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
约束:CONSTRAINTS
数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据的完整性要从以下四个方面考虑:
- 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录
- 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女”
- 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门
- 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等,本部门经理的工资不得高于本部门职工的平均工资的5倍。
根据约束的特点,分为几种:
- 键约束:主键约束、外键约束、唯一键约束
- Not NULL约束:非空约束
- Check约束:检查约束
- Default约束:缺省约束
主键约束PRIMARY KEY
主键:Primary key,简称PK,数据库主键作用保证实体的完整性,可以是一个列或多列的组合。
- 主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值,如果是多列组合的主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
- 每个表有且最多只允许一个主键约束。
- MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用。
当创建主键约束时,MySQL默认在对应的列上建立主键索引。删除主键时,也会直接删除主键索引。
//直接添加主键
CREATE TABLE t_stu(
sid INT PRIMARY KEY,
sname VARCHAR(100),
gender CHAR
);
//单独声明主键
CREATE TABLE t_course(
cid INT ,
cname VARCHAR(100),
decription VARCHAR(200),
PRIMARY KEY(cid)
);
//建表后添加主键
ALTER TABLE t_stu ADD PRIMARY KEY(sid);
//删除主键
alter table表名称 drop primary key;
唯一键Unique key,简称UK
- 同一个表可以有多个唯一约束。
- 唯一约束可以是某一个列的值唯一,也可以多个列组合值的唯一。
- MySQL会给唯一约束的列上默认创建一个唯一索引。
- 删除唯一键只能通过删除唯一索引的方式删除,删除时需要指定唯一索引名,唯一索引名就是唯一约束名一样。
--在某一列后面直接添加唯一性约束
CREATE TABLE t_course(
cid INT PRIMARY KEY,
cname VARCHAR(100) UNIQUE,
description VARCHAR(200)
);
--单独指定表的唯一性约束
CREATE TABLE t_stu(
sid INT PRIMARY KEY,
sname VARCHAR(100),
card_id CHAR(18),
CONSTRAINT uk_card_id UNIQUE KEY(card_id)
);
--在建表后修改表结构:
alter table 【数据库名.】表名称 add unique key(字段名);
alter table 【数据库名.】表名称 add unique key(字段列表); #复合唯一
--删除唯一键
alter table 【数据库名.】表名称 drop index 索引名;
alter table emp drop index cardid;
如果不知道索引名,可以通过如下的语句查询:
show index from 表名称;
唯一键和主键的区别:
(1)主键不能为空,唯一键可以为空
(2)主键约束,一个表只能有一个,而唯一键可以有很多个
外键:Foreign key,简称FK
外键约束不是必须的,而且现在很多大的公司,数据量比较大时,不建议在数据库层面设计外键,
因为他觉得这样效率低,把这个数据的约束挪到代码层面去判断。
特点:
(1)约束的是两张表的关系
需要两张表,或者一张表虚拟成两张表
(2)两张表分为主表(父表)和从表(子表)
外键的建立/指定是在子表上建立。
(3)被参考的表称为主表,主表的被参考列必须是主键或唯一键
(4)一个表可以有多个外键
- 添加/修改从表记录时,引用主表的列的值必须是存在的。
- 默认情况下,如果主表的被参考列的值被引用,那么就不能轻易的被删除和修改。
--先建主表,再建从表
create table emp(
字段1 数据类型 primary key,
字段2 数据类型 【unique key】【not null】【default 默认值】,
foreign key(从表的外键列) references 主表名(主表被参考的列名)
);
--建表后指定外键
alter table 从表名称 add foreign key(从表的字段) references 主表名(主表被参考的列名);
非空和默认值约束
- NOT NULL 非空约束,规定某个字段不能为空
-
default:默认值,在插入数据时某列如果没指定其他的值,那么会将默认值添加到新记录。
--建表
create table 【数据库名.】表名称(
字段1 数据类型 primary key,
字段2 数据类型 【unique key】【not null】【default 默认值】,
字段2 数据类型 【unique key】【not null】【default 默认值】,
...
);
--实例
create table emp(
eid int primary key, #员工编号
ename varchar(20) not null, #姓名
cardid varchar(18) unique key not null , #身份证号
tel varchar(11) unique key not null,
gender char not null default '男'
);
--修改
alter table 表名 modify 列名 数据类型 【unique key】 【not null】 ;
alter table emp modify cardid varchar(18) unique key not null;
alter table emp modify tel varchar(11) not null;
alter table emp modify gender char not null default '男';
--去掉非空和默认值约束
alter table emp modify gender char ;
自增列:AUTO_INCREMENT
关键字:auto_increment
特点:
- (1)一个表只能有一个自增列
- (2)自增列必须是整型的
- (3)自增列必须是键列,例如:主键,唯一键
create table emp(
eid int primary key auto_increment,
ename varchar(20) not null
);
来源:oschina
链接:https://my.oschina.net/u/4152684/blog/3149194