MySQL语句基础之数据库约束

约束–可以更好地保证数据表里数据的完整性,它是在表上强制执行的数据校验规则,约束主要用于保证数据库里数据的完整性。大部分数据库支持以下5种完整性约束。
1、not null – 非空约束
2、unique – 唯一约束
3、primary Key – 主键,指定该列的值可以唯一地标识该条记录
4、foreign Key – 外键,指定该行记录从属于主表中的一条记录,主要用于保证参照完整性
5、check – 检查,用于指定对应列的值必须满足该表达式!–MySQL不支持Check约束。
约束也是数据库对象,并被存储在系统表中,也拥有自己的名字
约束语法分为列级约束语法和表级约束语法。
1、not null约束,它只能作为列级约束使用。
与Java类似的是,空字符串<>null,null<>0,null<>null.
1.1 在建表时为指定列指定非空约束,只需在列定以后增加not null 即可,语句如下:

 CREATE table table_name(
 #建立非空约束
  column_name1 int not null
  #mysql的非空约束不能指定名字
  column_name2 varchar(22) default 'xyz' null
);

在MySQL中,对于非空约束,不能指定默认值,只有取消非空约束,才可以指定默认值。
1.2 使用alter 用关键字modify修改表时增删非空约束,只能是单列约束

#取消非空约束
alter table table_name modify column_name1 null;
#增加非空约束
alter table table_name modify column_name1 not null;
取消非空约束,并指定默认值
alter table table_name modify column_name1 default 'ax' null;

2、UNIQUE约束
唯一约束用于保证指定列或指定列的组合不允许出现重复值,虽然唯一约束的列不可以出现重复值,但可以出现多个null值
唯一约束既可以使用列级约束语法建立,也可以使用表级约束语法建立,如果需要为多列建组合约束,或者需要为唯一约束指定约束名,则只能用表级约束语法
2.1使用列级约束语法建立唯一约束较为简单,只要简单的在列定义后增加unique关键字即可,代码形式如下:

column_name1 datatype unique;

2.2 表级约束语法,添加关键字constraint 来指定约束名,使用unique(column_name1,column_name2)的形式建立多列约束,也可以在修改表的结构时使用add关键字增加多列的唯一约束,

 #使用表级约束为多列组合建立唯一约束:
 unique(column_name1,column_name2)
 #使用表级约束指定约束名
 contraint 约束名 unique(column_name)

2.3删除约束,对于绝大多数数据库,删除约束都是在alter table 语句后面使用 ‘drop constraint 约束名’来完成,而MySQL使用的是‘drop index 约束名’的方式来删除约束,如下代码:

 alter table table_name drop index 约束名;

3、PRIMARY KEY 约束
主键约束相当于非空约束和唯一约束,即主键约束的列即不允许出现重复值,也不允许出现null值,如果对多列组合建立主键约束,则多列里包含的每一列都不能为空,但只要求这些列组合不能重复
主键是表中能唯一确定一行记录的字段或字段组合。
建立主键约束既可以使用列级约束,也可以使用表级约束,如果需要对多个字段建立组合主键约束,只能使用表级约束语法,!–MySQL总是将所有的主键约束命名为PRIMARY。
3.1创建主键约束的表级和列级语法与创建唯一约束的语法极为相似,只需把 unique更改为 primary key
3.2,删除指定表的主键约束,在alter table 语句后面使用drop primary key 语句 即可,示例代码如下:

 alter table table_name drop primary key;

3.3 自增长—如果某个数据列的类型是整形,而且该列作为主键列,则可指定该列具有自增长功能,指定自增长功能通常用于设置逻辑主键列,该列的值没有任何物理意义,仅仅用于标识每行记录,MySQL使用auto_increment来设置自增长,一旦该列拥有了自增长特性,则向该表插入记录时可不为该列指定值,该列的值由数据库系统自动生成。
4 FOREIGN KEY 约束–
外键约束主要用于保证一个或两个数据表之间的参照完整性,外键是构建于一个表的两个字段或者两个表的两个字段之间的参照关系。外键确保了相关的两个字段的参照关系:从表外键列的值必须在主表被参照列的值的范围之内,或者为空。
当主表的记录被从表记录参照时,主表的记录不允许被删除,必须先把从表里参照该记录的所有记录全部删除后,才可以删除主表的该记录;还有一种方式,删除主表记录时级联删除从表中所有参照该记录的从表记录。
从表外键参照的只能是主表主键列或者唯一键列,这样才可保证从表记录可以准确定位到被参照的主表记录。同一个表内可以拥有多个外键。建立外键约束是,MySQL也会为该列建立索引。
外键约束通常用于定义两个实体之间的一对多、一对一的关联关系。对于多对多的关联关系,则需要额外增加一个连接表来记录他们的关联关系。
外键约束保证被参照的记录必须存在,但并不保证必须有被参照记录,即外键列可以为null,如果想保证每条从表记录必须存在对应的主表记录,则应使用非空、外键两个约束。
4.1采用列级约束语法建立外键约束直接使用reference关键字,reference指定该列参照主表,以及参照主表的哪一列。!虽然MySQL支持使用列级约束语法来建立外键约束,但是这种列级约束不会生效,,要使MySQL中的外键约束生效,则应使用表级约束语法。
4.2使用表级约束语法,需要使用foreign key来指定本表的外键列,并使用references来指定参照那个主表的哪个数据列,如果创建外键约束时没有指定约束名,则MySQL会为该外键约束命名为table_name(从表名)_ibfk_n,示例代码如下:

 #未指定约束名
 foreign key(column_name) references table_name(column_name)
 #自定义约束名
 constraint 约束名 foreign key(column_name1,column_name2) references table_name(column_name1,column_name2)
4.3删除外键约束,这个语法很简单,在alter table 后增加‘drop foretin key'子句即可,如下代码:
 alter table table_name drop foreign key 约束名;

4.4 增加外键约束通常使用add foreign key命令.
4.5自关联–外键约束不仅可以参照其他表,而且可以参照自身
4.6如果如果想定义当删除主表记录时,从表记录也会随之删除,则需要在建立外键约束后添加 on delete cascade 或者添加 on delete set null,第一种是删除主表记录时,把参照该主表记录的从表记录全部级联删除第二种是指定当删除主表记录时,把参照该主表记录的从表记录的外键设为null
4.7 CHECK约束,当前版本的MySQL支持在建表时指定Check约束,但这个Check约束不会有任何作用,建立这个语法较为简单,只要在建表的列定以后增加Check(逻辑表达式)即可。
如果确实希望MySQL创建的数据表有Check约束,可以借助于MySQL的触发器机制

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值