MySQL-----约束

本文介绍了数据库中的各种约束类型,包括如何查看和操作主键约束,设置自增长列(标识列)作为主键或唯一约束,创建和删除唯一约束,设置默认和非空约束,以及建立和管理外键约束,以确保数据的完整性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.如何查看约束

 SHOW CREATE TABLE table_name

image-20230727140922534

下面是添加了主键的展示

image-20230727142212892

一、主键约束

  • 主键约束最显著的特征是主键列中的值是不允许重复(唯一)的,通过主键约束可强制表 的实体完整性。

  • 当创建或更改表时可通过定义 primary key约束来创建主键。一个表只 能有一个primary key约束,且primary key约束中的列不能接受NULL值。

alter table tab_name add constraint pk_name primary key (deptno);
1.如何设置主键
1.创建表时设置主键
CREATE TABLE `表名`(
    `id` int [NOT null] PRIMARY KEY,  --设置主键
    `name` varchar(20)
);

image-20230727143816134

CREATE TABLE `table_name` (
`id` int [NOT NULL],
`name` varchar(20) ,
PRIMARY KEY (`id`) -- 设置主键
);
CREATE TABLE `table_name` (
`id` int [NOT NULL],
`name` varchar(20) ,
constraint pk primary key(id) -- 设置主键
);

image-20230727155817988

2.通过ALTER TABLE修改列属性设置主键
ALTER TABLE emp MODIFY empno INT PRIMARY KEY; -- 修改列的属性来添加主键约束

image-20230727145110005

成功添加主键约束

ALTER TABLE dept ADD CONSTRAINT pk_name PRIMARY KEY(deptno);

image-20230727161415681

3.删除主键约束
-- 删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
-- 主键是唯一的,可以这样删除

image-20230727162234741

二、自增长列(标识列)

并不是所有表在设计完成后都能找到适合作为主键的列,为此数据库提供了自增长列,自 增长列是数值类型( INT , FLOAT , DOUBLE 等)的,其值是由数据库自动维护的,是永远都不 会重复的,因此自增长是最适合作为主键列的。在创建表时,通过 auto_increment 关键 字来标识自增长列,在MySQL数据库中自增长列可以是主键列,也可以是唯一列(有唯一 约束的列)。

特点:

  1. 标识列必须和一个key搭配(key指主键、唯一、外键)

  2. 一个表最多有一个标识列

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

  4. 标识列可以通过

    SET auto_increment_increment = 3;
    SET @@auto_increment_increme nt = 3; 

    设置步长(全局),可以通过插入行时手动插入标识列值设置起始值。

    (思 考:什么情况下此设置会失效)

如果设置步长会从 1 + 步长 依次递增。

** 如果表中已有数据,会按照 1 + 步长进行计算,如果这个 值 已有则再加直到没有**

自增长与主键

1.创建

CREATE TABLE 表名(
	id INT PRIMARY KEY AUTO_INCREMENT,
    name varchar(20),
   	age INT
     );

image-20230727194110128

2.设置初始值

-- 创建设置
CREATE TABLE temp(
    id INT PRIMARY KEY AUTO_INCREMENT,
    age INT
    )AUTO_INCREMENT=10;
    
-- 添加
ALTER TABLE emp AUTO_INCREMENT;
alter table 表名称 modify column id int auto_increment;

image-20230727195346797

3.删除自增长列

ALTER TABLE 表名 MODIFY COLUMN id INT;

image-20230727195551713

三、唯一约束

当非主键列要求唯一性时,就需要唯一性约束。

1.创建唯一约束
-- 创建表时 (第一种不建议)
CREATE TABLE `table_name` (
	`id` int NOT NULL,
	`name` varchar(20) UNIQUE, # 唯一约束
);
CREATE TABLE `table_name` (
    `id` int NOT NULL,
	`name` varchar(20),
	constraint uq_name unique(name), #唯一约束
);

image-20230727201606842

2.修改唯一约束
alter table 表名称 ADD unique(列名称);
ALTER TABLE dept ADD CONSTRAINT uq_name UNIQUE(deptname);

image-20230727205524173

3.删除唯一约束
-- 删除唯一约束
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
[alter table 表名称 drop index 设置唯一时的名称;] -- 删索引

image-20230727203428455

  • 唯一约束值不能重复

  • 可以存在多个空值(NULL) 的数据

  • 一张可以有多个唯一约束列

  • 约束默认的名称是其列名

  • 唯一约束创建后会自动创建一个唯一索引

四、默认约束

为列中的值设置默认值,default ....,如果已经定了值,默认值就无效了

1.创建默认约束
-- 创建表时
CREATE TABLE `table_name` (
    `id` int DEFAULT NULL,# 默认约束
    `name` varchar(20),
);
​

image-20230728171417220

在创建时默认约束一般跟在列后面直接设置

2.修改默认约束
alter table 表名称 modify column 列名 列类型 default 默认值;

image-20230728165153844

如图所示我们给id添加了默认约束让他的默认值为10

3.删除默认约束
alter table 表名称 modify column 列名 列类型; -- 将默认值改为 NULL
ALTER TABLE tb_name ALTER col_name DROP DEFAULT; -- 删除了默认值,新增时必须有值

image-20230728171611652

五、非空约束

NOT NULL :非空,用于保证该字段的值不能为空。

非空约束一般也跟在后面写

1.创建非空约束
-- 创建表时
CREATE TABLE `table_name` (
`id` int NOT NULL, # 非空约束
`name` varchar(20),
);
​

image-20230728171749196

2.修改非空约束
alter table 表名称 modify column 列名 列类型 not null;
​

image-20230728172314105

注意修改时,要看表内数据是否满足非空约束,不满足时会报错

3.删除非空约束
-- 删除
alter table 表名称 modify column 列名 列类型 [null];
​

image-20230728172435753

非空约束的效果

image-20230728171952913

六、外键约束

A表中列的值来自于另外一张表B的主键或唯一键的列称为 外键FK,将被引用值得表称为 主表或父表,将引用值得表称为从表或子表。 例如: emp 表中有 deptno 列,值来自于 de pt 表的 主键 deptno 。 dept 是主表, emp 是从表。

1.创建外键约束
-- 创建表时
CREATE TABLE `dept`(
dept_no INT PRIMARY KEY,
dept_name VARCHAR(20),
)
CREATE TABLE `emp` (
`id` int NOT NULL,
`name` varchar(20),
`deptno` int,
CONSTRAINT fk_dept_no FOREIGN KEY(deptno) REFERENCES dept(dept_no)
);

image-20230728183545208

2.修改外键约束
alter table userinfo add constraint foreign key fk_dept_no (dept_no) REFERENCES
dept(deptno);

3.删除外键约束
-- 删除
ALTER TABLE tb_name DROP CONSTRAINT constraint_name;
alter table 表名称 drop foreign key 设置外键时的名称;
​

image-20230728184017336

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值