mysql表操作约束_MySQL数据库操作(4)表约束

MySQL数据库操作(4)表约束

在创建表或者插入列时,可以对列的值进行约束,当插入条目时如果不符合约束,将会报错,拒绝插入。

非空约束

`NOT NULL` 字段值不能为空

例:

#创建表时添加非空约束CREATE TABLE tb1( id INT, name VARCHAR(20) NOT NULL);INSERT INTO tb1(id) VALUE(1); # 报错,没有传入name

#注意:在mysql 里面,''不等于null

#修改表添加非空约束ALTER TABLE tb1 MODIFY id INT NOT NULL;

#取消非空约束ALTER TABLE tb1 MODIFY id INT;

唯一约束

`UNIQUE KEY` 确保字段中的值的唯一

例:

#创建表时添加唯一约束CREATE TABLE tb2(id INT NOT NULL UNIQUE KEY, name VARCHAR(20) NOT NULL);INSERT INTO tb2 VALUE(1,'张三');INSERT INTO tb2 VALUE(1,'李四'); # 报错,id字段的值有重复

#修改表添加唯一约束ALTER TABLE `tb2` ADD UNIQUE KEY(`name`);

#删除唯一约束ALTER TABLE tb2 DROP KEYname;

#联合唯一约束ALTER TABLE tb2 ADD aa INT, add bb INT;ALTER TABLE tb2 ADD UNIQUE KEY(aa,bb);INSERT INTO tb2 VALUE(4,'佳能',1,2);INSERT INTO tb2 VALUE(5,'哈哈',1,2); # 报错,(aa,bb)联合字段有重复

#删除联合唯一

SHOWCREATE TABLEtb2; #查看约束名ALTER TABLE tb2 DROP KEY aa; #通过约束名删除约束,联合约束默认名为联合列中的第一列

主键约束

`PRIMARY KEY ` == `NOT NULL + UNIQUE KEY`

主键保证记录的唯一性, 唯一标识每一条数据

主键自动为`NOT NULL`

每张数据表只能存在一个主键

当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。

例:

#创建表时添加主键约束CREATE TABLE tb3( id INT PRIMARY KEY,name VARCHAR(20) NOT NULL);

#删除主键约束ALTER TABLE tb3 DROP PRIMARY KEY;

#添加主键约束ALTER TABLE tb3 ADD PRIMARY KEY(id);

#联合主键CREATE TABLE tb4(id_a INT , id_b INT, content VARCHAR(20), PRIMARY KEY(id_a,id_b) );

#添加联合主键ALTER TABLE tb4 ADD PRIMARY KEY(id_a,id_b);

自增长

`AUTO_INCREMENT `自动编号,一般与主键组合使用。一个表里面只有一个自增

默认情况下,起始值为1,每次的增量为1。

当插入记录时,如果为`AUTO_INCREMENT`数据列明确指定了一个数值,则会出现两种情况,

情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。(可以调大,不可以缩小)

例:

#创建表时添加自增长CREATE TABLE tb5( id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20))AUTO_INCREMENT =100; # 如果不写,默认从1开始

#删除自动增长ALTER TABLE tb5 MODIFY id INT;

#修改表添加自动增长ALTER TABLE tb5 MODIFY id INT AUTO_INCREMENT;

默认约束

`DEFAULT `初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

例:

#创建表时添加默认约束CREATE TABLE tb6(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT NOT NULL DEFAULT18);

#删除默认约束ALTER TABLE tb6 MODIFY age INT NOT NULL;ALTER TABLE tb6 ALTER age DROP DEFAULT;

#添加默认约束ALTER TABLE tb6 MODIFY age INT DEFAULT20;ALTER TABLE tb6 ALTER age SET DEFAULT 21;

外键约束

外键约束`FOREIGN KEY`,保持数据一致性,完整性实现一对一或一对多关系。

外键约束的要求:

数据表的存储引擎只能为InnoDB

外键列和参照列数据类型一致

外键必须关联到键上面去,一般情况是关联到,另一张表的主键

例:

#创建表时添加外键约束CREATE TABLE `a`( a_id INT PRIMARY KEY,a_name VARCHAR(20) NOT NULL);CREATE TABLE `b`(b_id INT PRIMARY KEY,b_name VARCHAR(20) NOT NULL,fy_id INT NOT NULL,CONSTRAINT AB_id FOREIGN KEY(fy_id) REFERENCES`a`(a_id)); #AB_id是外键的别名,如果没有别名则无法删除该外键,fy_id是本表中要关联的列,`a`(a_id)是关联到a表的a_id列,fy_id的取值必须在a表中的a_id列中出现过才能用。

#删除外键ALTER TABLE `b` DROP FOREIGN KEYAB_id;

#增加外键ALTER TABLE `b` add CONSTRAINTAB_id FOREIGN KEY(fy_id) REFERENCES `a`(a_id);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值