DDL语言之常见的约束类型

六大约束

  • NOT NULL:非空
  • DEFAULT:默认
  • PRIMARY KEY:主键,值唯一且非空
  • UNIQUE:唯一,可以为空
  • CHECK:检查,mysql不支持
  • FOREIGN KEY:外键,限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值。在从表添加外键约束,用于引用主表中某列的值

分类

添加约束的时机:创建表时,修改表时
约束的添加分类:列级约束,表级约束

  • 列级约束——除了外键都支持,不可以起约束名
  • 表级约束——除了非空、默认都支持,可以起约束名,但是对主键无效
create table 表名(
			字段名 字段类型 列级约束,
			字段名 字段类型 ,
			表级约束
)

创建表时添加约束

create table 表名(
	列名 字段类型 not null#非空
	列名 字段类型 primary key#主键
	列名 字段类型 unique#唯一
	列名 字段类型 default 值,	#默认
	列名 字段类型 check(列名=‘’or列名=‘’),	#检查
	constraint 约束名 foreign key(列名) reference 主表(被引用列名) 
)

主键,外键,唯一键自动生成索引

主键和唯一的区别

  • 主键不允许为空,唯一键可以
  • 一个表中至多一个主键,唯一键可以有多个
  • 均允许两个列组成一个键(在表级中的括号里直接写两个列名)
  • 均保证唯一性
	create table unique_test3(
    test_id int not null,
    test_name varchar(255),
    test_pass varchar(255),
    # 使用表级约束语法建立唯一约束,指定两列组合不允许重复
    constraint test3_uk unique(test_name,test_pass)
);

外键的特点

  • 在从表设置外键的关系
  • 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
  • 主表的关联列必须是一个key(一般是主键或唯一)
  • 插入数据时,先插入主表;删除数据时,先删除从表

修改表时添加约束

外键

alter table 表名 add foreign key(列名) references 主表(被引用列)

列级约束(非空、默认)

alter table 表名 modify column 列名 数据类型 新约束键名;

modify 为列级约束语法来增加唯一约束
表级约束(主键、唯一)

alter table 表名 addconstraint 约束名】键名(列名);

【constraint 名】是给键重命名,可以省略,省略后有默认的名字

add 关键字来增加唯一约束

修改表时删除约束

对于大部分数据库而言,删除约束都是在alter table 语句后使用 “drop constraint 约束名”语法来完成的, 但是Mysql并不使用这种方式,而是使用“drop index 约束名 ” 的方式来删除约束

外键

alter table 表名 drop foreign key 约束名;

唯一

alter table 表名 drop index 索引名;

主键

alter table 表名 drop PRIMARY KEY

列级约束(非空、默认)

alter table 表名 modify column 列名 数据类型

自增长列
特点

  • 不用手动插入值,可以自动提供序列值,默认从1开始,步长为1。如果更改起始值:手动插入值;如果更改步长:更改系统变量
set auto_increment_increment=值;
  • 一个表至多有一个自增长列
  • 自增长列只支持数值型
  • 自增长列必须为一个key(mysql中)

创建表时设置自增长列

create table 表(
	列名 数据类型 约束 auto_increment

修改表时设置自增长列

alter tablemodify column 列名 数据类型 约束 auto_increment

删除自增长列

alter tablemodify column 列名 数据类型 约束 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值