MySQL约束条件介绍

  • 无符号、零填充
unsigned
	# 因为正负值符号会占用一个比特位,使用此约束条件可以去掉数字类型里面的正负值符号,之后相同数字类型会支持的正数范围会更大
	id int unsigned
zerofill
	# 整数型默认是int(11),也可以指定int(num),之后插入的数据如果不足指定的数据类型长度则会使用数字0进行填充
	id int(5) zerofill
  • 非空
not null
# 非空可以指定字符类型不可以为空。
# 创建语句如下:
create table t1(
	id int,
    name varchar(16) not null
)
# 例外,当插入内容指定为空字符串时是可以插入的。
insert into t1 values(1, '');
# 如上所示,是可以插入的,这只能在代码层面作限制。
  • 默认值
default xxx
# 此约束条件可以在插入时如果不插入数据,则会默认插入默认值
create table t1(
	phone bigint default 00000000000,
    name varchar(16)
);
# 插入null的话,则不会触发默认值
insert into t1 values(null, 'jason');
  • 唯一值
unique
# 使一列的数据为唯一,不可重复
create table t1(
	id int unique,
    name varchar(10)
);
# 注意:唯一并不可以限制为空,空值是可以重复的
mysql> insert into t1 values(null, 'jack');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t1 values(null, 'rose');
Query OK, 1 row affected (0.00 sec)

mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from t1;
+------+------+
| id   | name |
+------+------+
| NULL | jack |
| NULL | rose |
+------+------+
2 rows in set (0.00 sec)
  • 主键
primary key
# 使用方法
create table t1(
	id int primary key,
    name varchar(10)
);
'''
主键的特性:
	1.约束性为not null与unique的结合(也就是定义主键后,这一列的值为非空且唯一)
    2.在MySQL的Innodb存储引擎中,必须有一列为主键,并且也只能有一列为主键(不可以设置多个主键)
    	2.1 补充说明:当你在建一个表的时候,如果没有设置主键,会有两种情况出现:
    	2.1.1 所有的字段都没有unique+not null约束条件:
    			Innodb存储引擎会创建一个隐藏列作为主键(隐藏列无法使用)
    	2.1.2 一个字段或多个字段设置有unique+not null约束条件
    			Innodb存储引擎会将第一个有unique约束条件的列自动转换为主键
'''
  • 自增
auto_increment
# 使用方法:
create table t1(
	id int primary key auto_increment,
    name varchar(16)
);
'''
特性:
	1. 自增只能设置到主键字段中,且字段只能为整数型。
	1. 自增不会因为数据的删除而回退。
	2. 自增设置后也可以手工添加数据
		2.1 因为是主键列,所以插入的数据肯定不能重复
		2.2 如果插入的数据比当前自增的数字小,只要符合primary key的条件也可以插入
		2.3 如果插入的数据比当前自增的数字大,那么自增的数字会自动变为插入的数据值+1
	3. 自增如果想要回退只能通过truncate清空表进行重置。
'''
  • 外键
foreign key(本表的字段名) references table_name(字段名)
on update cascade
on delete cascade

create table book(
    id int primary key auto_increment,
    book_name varchar(32)
);

create table author(
	id int primary key auto_increment,
    name varchar(16),
    book_id int,   # 如果是一对一,需要加上unique约束条件,不加则是一对多
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade
);
'''
外键是强耦合,不符合解耦合的特性
	在实际项目中,大部分时候会使用代码进行约束,而不是使用外键
特性:
	一对多
		基础的用法,外键建立在多的一方(一个数据对应多个外键,那外键就建在多那那一方)
	多对多
		针对多对多的关系,适合建立维度表与事实表进行结合
	一对一
		建议将外键创建在使用频率高的表中
		创建的时候,需要对外键字段加unique约束条件,这样就形成了一对一
'''
posted @   树苗叶子  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示