开始MySQL之路——MySQL约束概述详解

MySQL约束

复制代码
create table [if not exists] 表名(
 字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
 字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
 字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
)[表的一些设置];
  • 概念

    约束英文:constraint

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

  • 作用

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

  • 分类

    • 主键约束(primary key) PK

    • 自增长约束(auto_ increment)

    • 非空约束(not_null)

    • 唯一性约束(unique)

    • 默认约束(default)

    • 零填充约束(zerofill)

    • 外键约束(foreign key) FK

主键约束

  • 概念

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

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

    每个表最多只允许一个主键

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

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

    操作

    • 添加单列主键

    • 添加多列联合主键

    • 删除主键

①:添加单列主键

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

方式1-语法:

复制代码
在 create table 语句中,通过 primary key 关键字来指定主键。
在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名><数据类型> primary key
...
)

方式1-实现:

复制代码
在定义字段之后再指定主键,语法格式如下:
create table 表名(
...
[constraint<约束名>] primary key[字段名]
)

数据修改
格式
create  table if not exists emp(
    sid int primary key,
    sname varchar(20),
    deptid int,
    salary double
);

方式2-实现:

复制代码
create table emp2(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
constraint pk1 primary key(id)
)
复制代码
主键不能重复
insert into emp(sid, sname, deptid, salary) VALUES (1001,'tom',1,122.34);
insert into emp(sid, sname, deptid, salary) VALUES (1002,'jerry',1,122.34);
主键不能为空
insert into emp(sid, sname, deptid, salary) VALUES (null,'tom',1,122.34);

②:联合主键

所谓的联合主键,就是这个主键是由一张表中多个字段中有多个字段组成的。

注意:

1:当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。

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

语法:

复制代码
create table 表名(
...
primary key(字段1,字段2,...,字段n)
)

实现:

复制代码
create table emp3(
  name varchar(20),
  deptId int,
  salary double,
  primary key(name,deptId)
)

insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12);
insert into emp3(name, deptId, salary) VALUES ('tom',1,1200.12);
insert into emp3(name, deptId, salary) VALUES ('jerry',1,1200.12);
insert into emp3(name, deptId, salary) VALUES (null,1,1200.12);

③:添加主键

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

语法:

复制代码
create table 表名(
...
);
alter  table <表名> add primary key(字段列表);

实现:

复制代码
添加主列主键
​
create table emp5(
  eid int,
  name varchar(20),
  deptId int,
  salary double
);
​
alter table emp5 add primary key(name,deptId);

④:删除主键

一个表中不需要主键约束时,就需要从表中将其删除。删除主键约束的方法要比创建主键约束容易的多。

格式:

复制代码
alter table <数据表名> drop priamry key;

实现:

复制代码
删除单列主键
alter table emp1 drop primary key;
​
删除联合主键
alter table emp5 drop primary key;

自增长约束

  • 概念

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

通过给字段添加auto_increment属性来实现主键自增长

  • 语法

字段名 数据类型 auto_increment

  • 操作
复制代码
create table t_user1(
  id int primary key auto_increment,
  name varchar(20)
);

非空约束

唯一约束

默认约束

零填充约束

相关推荐
落落落sss6 分钟前
spring-data-mongoDB
java·服务器·数据库·后端·python·mongodb·spring
sighting_info12 分钟前
maven编译出错,javac: ��Ч��Ŀ�귢�а�: 17
java·数据库·maven
想做富婆23 分钟前
SQL: DDL,DML,DCL,DTL,TCL,
数据库·sql·oracle
代码代码快快显灵35 分钟前
Redis——用户签到BitMap,UV统计
数据库·redis·缓存
筑梦之路2 小时前
sysbench压测pgsql数据库 —— 筑梦之路
数据库·postgresql
xiaohiiii2 小时前
2022年上半年软件设计师下午题题目详解与知识点解析(附真题及答案)
java·数据库·职场和发展·uml
三书yjy3 小时前
MySQL 中的索引数量是否越多越好?
数据库·mysql
C66668883 小时前
C#最新语言特性
开发语言·数据库·c#
老朋友此林3 小时前
浅谈 Redis 主从集群原理(一)
java·数据库·redis
喜欢猪猪4 小时前
深入解析MySQL索引:本质、分类、选择及使用原则
数据库·oracle