MySQL约束

一.约束(constraint)

1.概念:

约束实际上就是表中数据的限制条件。

2.作用:

表在设计的时候加入约束的目的就是为了保证表中记录的完整性和有效性,比如用户表有些列的值不能为空,有些列的值不能重复。

3.分类:

  1. 主键约束(primary key)PK
  2. 自增长约束(auto_increment)
  3. 非空约束(not null)
  4. 唯一性约束(unique)
  5. 默认约束(default)
  6. 零填充约束(zerofill)
  7. 外键约束(foreign key)FK

二.主键约束(primary key)

1.MySQL主键约束是一个列或者多个列的组合,其值能唯一的标识表中的每一行,方便尽快找到某一行。

2.主键约束相当于 唯一约束+非空约束 的组合,主键约束的列不允许空值,也不允许重复。

3.每个表最多只允许一个主键。

4.主键约束的关键字是:primary key

5.当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

操作:

  • 添加单列主键
  • 添加多列联合主键
  • 删除主键

1.添加单列主键

创建单列主键有两种方式,一种是在定义字段的同时指定主键,一种是定义完字段之后指定主键。

方式一:

create table 表名(

......

<字段名> <数据类型>primary key

......

);

方式二:

create table 表名(

......

[constraint <约束名>] primary key (字段名)

);

例如:

【constraint pk1 】primary key(id)

2.添加联合主键

联合主键:这个主键由一张表中多个字段组成

注意:

1)不能直接在字段后面声明主键约束

2)一张表只能有一个主键,联合主键也是一个主键

语法:

create table 表名(

......

primary key (字段1,字段2,......)

);

3.通过修改表结构添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加

语法:

create table 表名(

......

);

alter table <表名> add primary key(字段列表);

4.删除主键约束

一个表中不需要主键约束时,就需要从表中将其删除。

格式:

alter table <表名> drop primary key;

三.自增长约束(auto_increment)

在MySQL中,当主键定义为自增长后,这个主键的值就不需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。

语法:

字段名 数据类型 auto_increment

特点:

  • 默认情况下,auto_increment的初始值是1,每增加一条记录,字段值加一。
  • auto_increment约束的字段只能是整数类型,且必须具备not null属性。
  • auto_increment约束字段的最大值受到该字段的数据类型约束

指定自增长字段初始值:

方法1:创建表时指定

sql 复制代码
create table user(
    id int primary key auto_increment,
    name varchar(20)
)auto_increment=100;

方法2:创建表之后指定

sql 复制代码
create table user(
    id int primary key auto_increment,
    name varchar(20)
);
alter table user auto_increment=200;

delete和truncate在删除后自增列的变化:

delete数据之后自动增长从断点开始

truncate数据之后自动增长从默认起始值开始

四.非空约束(not null)

非空约束指定的字段值不为空。

语法:

方式1:<字段名><数据类型> not null

方式2:alter table 表名 modify 字段 类型 not null

sql 复制代码
alter table user modify name varchar(20) not null;

删除非空约束

sql 复制代码
alter table user modify name varchar(20);

五.唯一约束(unique)

指记录中字段的值不能重复出现。

语法:

方式1:<字段名><数据类型> unique

方式2:alter table 表名 add constraint 约束名 unique(列名)

在MySQL中,null与任何值都不相同,甚至与自己都不相同。

sql 复制代码
alter table user add constraint unique_nm unique(name);

删除唯一约束:

sql 复制代码
alter table user drop index unique_nm;

六.默认约束(default)

指定某列的默认值。

sql 复制代码
create table user(
    id int,
    name varchar(20),
    address varchar(20) default '北京'
);
sql 复制代码
alter table user modify address varchar(20) default '北京';

赋值为null,不使用默认值,为null,不指定值时才使用默认值。

删除默认值:

sql 复制代码
alter table user modify address varchar(20) default null;

七.零填充约束(zerofill)

插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0.

zerofill默认为int(10)

使用zerofill之后,默认会自动加unsigned属性。

sql 复制代码
create table user(
    id int zerofill,
    name varchar(20)
)

删除:

sql 复制代码
alter table user modify id int;

八.总结

相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql
敲敲敲-敲代码4 小时前
【SQL实验】触发器
数据库·笔记·sql