MySQL——6.约束



完整性及约束(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约束唯一标识数据库表中的每条记录。

uniqueprimary 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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值