Mysql之约束类型讲解以及标识列

什么是约束?一种限制,用于限制表中列的数据,确保数据的准确性和可靠性

Mysql中约束类型:

①not null(非空):限制列中的数据不能为null

②check(检查):检查列中的数据是否符合要求,mysql中并不支持

③default(默认):若没有插入值则使用默认值

④primary key(主键):限制此列不能为null并且唯一,一般将id设置为主键列

⑤unique(唯一):限制此列唯一但可以为null

⑥foreign key(外键):用于限制两个表的关系,用于保证该字段的值必须来自于主表关联列的值

添加约束的时机:

1.创建表时

2.修改表时

约束添加的类型:

1.列级约束

语法:在列名和数据类型之后添加约束即可

CREATE TABLE IF NOT EXISTS major(
	id INT PRIMARY KEY,
	mName VARCHAR(20) NOT NULL
);
CREATE TABLE IF NOT EXISTS stuinfo(
	id INT PRIMARY KEY,#添加主键约束
	stuName VARCHAR(20) NOT NULL,#添加非空约束
	gender CHAR(1) CHECK(gender='男' OR gender='女'),#添加检查约束,mysql并不支持,但语法上不报错
	age INT DEFAULT 18,#添加默认约束
	seat INT UNIQUE,#添加唯一约束
	majorId INT REFERENCES major(id)#外键约束,列级约束使用外键并不生效
);

 

2.表级约束(not null、default并不支持)

说明:在各个字段的最下面

[constraint 别名] 约束类型(字段) [外键的引用]

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
	id INT,
	stuName VARCHAR(20),
	gender CHAR(1),
	age INT ,
	seat INT ,
	majorId INT,
	CONSTRAINT pk PRIMARY KEY(id),
	CONSTRAINT uq UNIQUE(seat),
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)  
);

 说明:为主键约束起别名将不会生效

主键索引与唯一索引的对比:

                         唯一       为空     一个表中可以有多少个        是否允许组合

主键索引:        √             ×             表中只能有一个                允许,但不建议 

唯一索引:        √             √             表中可以有多个                允许,但不建议

外键约束的特点: 

1.要求在从表中设置外键

2.从表中的外键数据类型要与主表中的被引用的数据类型一致

3.只能有一个外键约束并且引用的是主表中的一个key

4.先添加主表数据,再添加从表数据。删除从表数据,再删除主表数据

DROP TABLE IF EXISTS major;
CREATE TABLE IF NOT EXISTS major(
	id INT,
	mName VARCHAR(20) NOT NULL,
	seat INT UNIQUE
);
DROP TABLE IF EXISTS t_test;
CREATE TABLE t_test(
	id INT,
	seatId INT,
	CONSTRAINT fk FOREIGN KEY(seatId) REFERENCES major(seat)
);

约束类型的通用写法: 

CREATE TABLE IF NOT EXISTS stuinfo(
	id INT PRIMARY KEY,
	stuName VARCHAR(20) NOT NULL,
	gender CHAR(1) CHECK(gender='男' OR gender='女'),
	age INT DEFAULT 18,
	seat INT UNIQUE,
	majorId INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id) 
);

添加约束类型:

1.添加列级约束类型:

语法:alter table tName modify column 列名 数据类型 约束类型;

2.添加表级约束类型:

语法:alter table tName add [constraint 别名] 约束类型(列名) [外键的引用];

①添加非空约束

ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NOT NULL;

②添加列级主键约束 

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

③添加表级主键约束 

ALTER TABLE stuinfo ADD PRIMARY KEY(id);

 ④添加列级唯一约束

ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

 ⑤添加表级唯一约束

ALTER TABLE stuinfo ADD UNIQUE(seat);

⑥添加表级外键约束

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major PRIMARY KEY(majorId) REFERENCES major(id);

删除约束类型:

1.删除列级约束:

语法:alter table tName modify column 列名 数据类型;


ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20);

 2.删除表级约束:

①删除表级主键约束:

ALTER TABLE stuinfo DROP PRIMARY KEY;

②删除表级唯一约束:

ALTER TABLE stuinfo DROP INDEX seat;

③删除表级外键约束:

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

标识列:不需要手动的插入值,使用系统默认提供的值

语法:在约束后面添加auto_increment

CREATE TABLE t_test(
	id INT PRIMARY KEY AUTO_INCREMENT,
	tName VARCHAR(20) NOT NULL
);
INSERT INTO t_test VALUES(NULL,'John');

特点:

1.标识列必须是主键列吗?不一定,只要是key就行

CREATE TABLE t_test(
	id INT PRIMARY KEY ,
	tName VARCHAR(20) NOT NULL,
	seat INT AUTO_INCREMENT
);

 2.一个表中可以有几个标识列?只能有一个

CREATE TABLE t_test(
	id INT PRIMARY KEY AUTO_INCREMENT,
	tName VARCHAR(20) NOT NULL,
	seat INT AUTO_INCREMENT
);

 3.标识列只能是数值类型的列

CREATE TABLE t_test(
	id INT PRIMARY KEY,
	tName VARCHAR(20) NOT NULL AUTO_INCREMENT,
);

 4.可以手动设置自增长的类型,设置自增长的初始值mysql并不支持

SHOW VARIABLES LIKE '%auto_increment%';

 

SET auto_increment_increment=5;#设置增长步长
INSERT INTO t_test VALUES(NULL,'Lily');

 

修改表时设置标识列:

ALTER TABLE tName modify column 列名 数据类型 约束 auto_increment;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值