约束
何为约束?
对字段添加限制,称为约束。
约束的增加
constraint 约束名
创建表的时候,直接为字段定义约束
create table 表名(字段 数据类型 [约束定义语句]);
创建表后,修改字段定义增加约束
alter table 表名 add[constraint + 约束名]+约束的定义语句
主键约束(PRIMARY KEY)
确定表中的标识列(主键字段不能为空,必须唯一)
定义主键约束
create table DDD(
DDDid char(10) primary key,
DDDname varchar(10));//创建名为DDD的表。创建时,将DDDid约束为主键
create table DDD(
DDDid char(10),
DDDname varchar(10),
primary key(DDDid));//创建表后,约束主键
为约束命名
create table DDD(
DDDid char(10),
DDDname varchar(10),
primary key(DDDid),
constraint pk_id primary key(DDDid));
组合主键
表中主键字段需要多个字段组合起来充当,来满足主键约束的要求
特征 : 每个字段允许有重复值,但是组合在一起不许重复,而组合中每个字段都不可以取空值,
格式 :
[constraint 约束名]primary key[(字段名1,字段名2)];
注意:由于组合主键萨河及多个字段因此,组合主键只能定义表级约束,定义在表的最后或者被约束字段完成之后。
唯一约束(UNIQUE)
不可重复,可以有空值。
格式:
--建表时添加约束
CREATE TABLE 表名(
字段名 int(10) UNIQUE); --定义唯一约束
--建表后添加约束
ALTER TABLE 表名 ADD CONSTRAINT 唯一约束名 UNIQUE 字段名 ;
unique index_name [字段名]; --索引命名
非空约束(NOT NULL)
不允许空值
如果省略关键字,默认值为null
not null 只能放在字符后面
--建表时添加
Create table Student(
Name varchar(100) not null ); --定义非空约束
--建表后添加
ALTER TABLE student MODIFY Name varchar(100) NOT NULL ; --MODIFY 添加非空约束
检查约束(CHECK)
控制特定列中的值的完整性约束
使用场景:
订购册数 :(1-100),出版时间等。
--建表时添加约束
create table s2(
学号 char(10) not null,
性别 char(10) not null,
check ( 学号 in ( select 学号 from student)));
--建表后添加约束
ALTER TABLE s2 ADD CONSRAINT 检查约束名
CHECK ( 学号 in ( select 学号 from student));
外键约束(FOREIGN KEY)
foreign key 定义在子表中。
一个表中的某一个字段是参考另一个表中某个字段的取值,被称为外键约束。
受约束的称为子表,约束子表的表称为父表。
四个限制
- 子表中的外键字段必须和父表中的参考字段的数据类型一致。
- 父表中的参考字段必须被主键约束或者唯一键约束,才能约束子表中的外键约束
- 父表中的主键值一旦被子表参照,那么这些值就不能随意修改和删除。
- 子表的外键字段的值可以为空值,但是如果有值必须是在父表的参照列的取值范围内
--建表时定义
CREATE TABLE 表名(
字段名 int(10),
CONSTRAINT 外键约束名
FOREIGN KEY 字段名
REFERENCES 主表名[主表字段1,主表字段2] ;
--建表后定义
ALTER TABLE 表名
ADD CONSTRAINT 外键约束名
FOREIGN KEY 字段名 REFERENCES 主表名[主表字段1,主表字段2] ;
默认约束(DEFAULT)
如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL。
定义默认约束
--建表时定义
CREATE TABLE 表名(
字段名 int(10) default 10); --10为默认值
--建表后定义
ALTER TABLE 表名 ADD DEFAULT 10 FOR 字段名 ;