完整性及约束(Constraints):---------------------------------------------------------------------------------------------------------------------------------
非空约束 NOT NULL
not null约束强制列不接受NULL值。只能出现在表对象的列上。
not null约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
-
设置列级非空约束:
create table customerinfo(
customerid interger,
customername varchar(12) not null,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200)
);
-
修改表时添加非空约束:
alter table customerinfo alter customerage not null;
alter table modify customerage integer not null;
-
取消非空约束:
alter table customerinfo alter customerage null;
唯一约束 UNIQUE
unique约束唯一标识数据库表中的每条记录。
unique和primary key约束均为列或列集合提供了唯一性的保证。
primary key拥有自定义的unique约束。
请注意:每个表可以有多个unique约束,但是每个表只能有一个primary key约束。
字段值唯一,但是可以为多个null。
-
设置列级唯一约束:
create table customerinfo(
customerid interger primary key,
customername varchar(12) unique,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200)
);
-
设置表级唯一约束:
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
[constraint uq_customername] unique(customername)
);
-
设置多个列级唯一约束
create table customerinfo(
customerid interger primary key,
customername varchar(12) unique,
customerage integer unique,
customersex varchar(4),
customertel varchar(15),
remark varchar(200)
);
-
设置多个表级唯一约束
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
[constraint uq_name] unique(customername),
[constraint uq_age] unique(customerage)
);
-
多个列设置共同的唯一约束
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
[constraint uq_name_age] unique(customername,customerage)
);
-
修改表时添加一个列的唯一约束
alter table customerinfo add [constraint uq_customerinfo] unique(customertel);
-
修改表时添加多个列的唯一约束
alter table customerinfo add [constraint uq_customerinfo] unique(customertel,customername);
-
删除唯一约束
alter table customerinfo drop index uq_customerinfo
drop index uq_customerinfo on customerinfo;
主键约束 PRIMARY KEY
primary key约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含null值。
每个表都应该有一个主键,并且每个表只能有一个主键。
-
设置列级主键约束:
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
);
-
设置表级主键约束:
create table customerinfo(
customerid interger ,
customername varchar(12) ,
customerage integer,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
[constraint pk_id] primary key(customerid)
);
-
联合主键约束(不推荐)
create table orderinfo(
customerid interger ,
roomid interger,
checkindate datetime,
checkoutdate datetime,
Amout numeric(7,2),
remark varchar(200),
[constraint pk_id] primary key(customerid,roomid)
);
-
修改表时指定主键约束:
alter table roominfo add [constraint pk_roominfo] primary key(roomid);
-
修改表时添加主键约束并设置主键自增:
alter table roominfo modify customerid interger auto_increment primary key;
-
修改表时指定联合主键约束:
alter table orderinfo add [constraint pk_orderinfo] primary key(customerid,orderid);
-
删除主键约束(只是删除主键约束,而不会删除主键列):
alter table employee drop primary key;
-
设置主键自增(主键必须是整型才可以自增长)
create table temp(
id int auto_increment primary key,
name varchar(20),
pwd varchar(16)
);
-
默认的,auto_increment的开始值是1,每条新记录递增1,要让auto_incremen序列以其他值起始:
alter table temp auto_increment=100
外键约束 FOREIGN KEY
一个表中的foreign key指向另一个表中的primary key。
foreign key约束用于预防破坏表之间连接的动作。
foreign key约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。也就是说从表的外键值必须在主表中能找到或者为空。
-
创建外键约束
create table typeinfo(
roomtypeid integer,
roomtype varchar(20)
);
create table roominfo(
roomid int primary key,
roomtypeid int,
roomprice numeric(7,2),
roomstate varchar(2),
Remark varchar(200),
[constraint fk_roominfo] foreign key(roomid) references typeinfo(roomtypeid)
);
-
添加外键约束
alter table roominfo add[constraint fk_roominfo] foreign key(roomid) references typeinfo(roomtypeid)
-
删除外键约束
alter table customerinfo drop foreign key fk_roomtypeid;
检查约束 CHECK
check约束用于限制列中的值的范围。
如果对单个列定义check约束,那么该列只允许特定的值。
如果对一个表定义check约束,那么此约束会在特定的列中对值进行限制。
在mysql数据库现在所有版本中支持check语法,但是不进行检查
-
设置列级检查约束
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer check (customerage>=18),
customersex varchar(4),
customertel varchar(15),
remark varchar(200)
);
-
设置表级检查约束
create table customerinfo(
customerid interger primary key,
customername varchar(12) ,
customerage integer ,
customersex varchar(4),
customertel varchar(15),
remark varchar(200),
[constraint chk_age] check (customerage>=18)
);
-
修改表时添加检查约束
alter table roominfo add [constraint chk_age] check(customerage>=18);
-
撤销检查约束
alter table roominfo drop check chk_age;
缺省约束 DEFAULT
default约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
如果没有指定default约束,那么这个列的默认值为null。
-
设置缺省约束
create table orderinfo(
customerid interger ,
orderid interger,
checkindate datetime,
checkoutdate datetime,
amout numeric(7,2) default 0,
remark varchar(200),
);
也可以使用default约束插入类似now()这样的函数来获取系统值。
create table orderinfo(
customerid interger ,
orderid interger,
checkindate datetime default now(),
checkoutdate datetime,
amout numeric(7,2) default 0,
remark varchar(200),
);
-
添加默认值
alter table orderinfo add [constraint df_amount] default(1) for amount;
-
修改默认值
alter table orderinfo alter amount set default 1;
-
删除默认值
alter table orderinfo alter amount drop default;