mysql约束类型

文章详细介绍了数据库中的各种约束类型,包括主键约束、唯一约束、默认约束、非空约束、检查约束和外键约束的创建、修改及删除方法。此外,还讲解了SQL中的聚合函数如SUM、MAX、MIN、AVG和COUNT的使用,以及GROUPBY和HAVING子句在数据分组和筛选中的应用。
摘要由CSDN通过智能技术生成

1、约束

设置主键

 create table student(
        id int primary key,
        name varchar(20));   

image-20230727100652502

 create table student(
    id int,
    name varchar(20),
    primary key(id));

image-20230727101337453

create table student(
    id int,
    name varchar(20),
    constraint pk primary key(id));

image-20230727101935768

修改某一列为主键

 alter table student add primary key(id);

image-20230727102231111

 alter table student modify id int primary key;
 
 #修改列类型

image-20230727102515183

 alter table student change id id int primary key;
 
 #修改列名称和类型

image-20230727102815059

删除主键约束

ALTER TABLE 表名称 DROP PRIMARY KEY; [mysql 8.0.22 之后的版本]
ALTER TABLE 表名称 DROP INDEX PRIMARY KEY; [mysql 8.0.22 之前的版本
alter table student drop primary key;

image-20230727103040034

自增长列

 create table goods(
     no int primary key auto_increment,
     name varchar(20));

image-20230727103725117

 insert into goods values('苹果'),('笔记本'),('白菜'),('车厘子'),('鼠标');

image-20230727113005206

标识列可以通过

SET auto_increment_increment = 3; 设置步长(全局)

image-20230727113424856

修改为自增长列

1、

alter table goods modify no int auto_increment;

image-20230727104139822

2、

alter table goods change no no int auto_increment ;

删除自增长列

alter table 表名 modify 字段名 字段名类型;

联合主键

create table text(
     student_id int,
     course_id int,
     enrollment varchar(20),
     primary key(student_id,course_id));

image-20230727153815593

image-20230727153846180

2、唯一约束

对于非主键列中的值也要求唯一性时,就需要唯一约束

CREATE TABLE `table_name` (
`id` int,
`name` varchar(20) UNIQUE # 唯一约束
);

CREATE TABLE `table_name` (
`id` int,
`name` varchar(20),
CONSTRAINT uq UNIQUE(name) #唯一约束
);

修改表

ALTER TABLE 表名 ADD UNIQUE(列名称);
ALTER TABLE 表名 ADD CONSTRAINT [constraint_name] UNIQUE(列名称);
ALTER TABLE 表名 CHANGE [COLUMN] 列名 列名 类型 UNIQUE;
ALTER TABLE 表名 MODIFY [COLUMN] 列名 列类型 UNIQUE;

删除唯一约束

ALTER TABLE 表名称 DROP INDEX 设置唯一时的名称;

##如果没有设置约束名称,名称默认是字段名

唯一约束允许有多个 NULL 值

3、默认约束

为列中的值设置默认值, DEFAULT value

alter table hy modify name varchar(20) default 'xxx';

image-20230727201732263

修改表

ALTER TABLE 表名 MODIFY [COLUMN] 列名 列类型 DEFAULT 默认值;
ALTER TABLE 表名 CHANGE 列名 列名 列类型 DEFAULT 默认值;

删除

ALTER TABLE 表名 MODIFY [COLUMN] 列名 列类型;

ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT; 

ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT NULL;

4、非空约束

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

CREATE TABLE `table_name` (
`id` int NOT NULL, # 非空约束
`name` varchar(20),
);
ALTER TABLE 表名 MODIFY [COLUMN] 列名 列类型 NOT NULL;
ALTER TABLE 表名 CHANGE 列名 列名 列类型 NOT NULL;
-- 删除
ALTER TABLE 表名 MODIFY [COLUMN] 列名 列类型 [null];

5、检查约束

检查约束

create table employees (
    -> id int auto_increment primary key,
    -> name varchar(50),
    -> age int,
    -> email varchar(100),
    -> check (age >=18));

image-20230727161349532

删除检查约束

alter table 表名 drop constraint 约束名;

image-20230727161802935

修改表的时候

alter table 表名 modify 列名 类型 check(约束条件);
alter table 表名 change 列名 列名 类型 check(约束条件);
alter tabler 表名 add constraint 列名 check(约束条件);

6、外键约束

alter table emp add constraint fk_emp_dept foreign key(dept_no) references dept(no);

image-20230727190745164

外键约束出现错误

image-20230727195146789

这个错误信息是由于在向emp表中插入或更新数据时,出现了外键约束错误。错误原因是正在插入或更新的数据中,dept_no列的值在dept表的no列中找不到匹配的主键值。

要解决这个错误,您可以采取以下几个步骤:

  1. 确保目标表中的主键值存在:检查dept表中的主键列no,确保要插入或更新的emp表中的dept_no列的值存在于dept表中。
  2. 检查数据类型和长度匹配:确保emp表的dept_no列和dept表的no列具有相同的数据类型和长度限制。
  3. 检查插入或更新的数据:检查要插入或更新的数据行中dept_no列的值是否正确,并且存在于dept表中。
  4. 检查插入或更新的顺序:如果存在多个表之间的外键关系,确保先插入或更新被引用的表,再插入或更新引用该表的表。

删除

ALTER TABLE 表名称 DROP FOREIGN KEY 索引名 ;# 设置外键时的名称

级联删除/更新

alter table emp add constraint fk_name foreign key(dept_no) references dept(no) on delete cascade;

image-20230727200920316

delete from dept where no=1;#将从表中dept_no也同时删除了

删之前:

删之后:

image-20230727201145111

7、聚合函数

sum : 求和

select sum(列) from table_name [其他子句];

max : 求最大值

select max(列) from table_name [其他子句];

min : 求最小值

select min(列) from table_name [其他子句];

avg : 求平均值

select avg(列) from table_name [其他子句];

count : 求数量

select count(列) from table_name [其他子句]; 1

group by

1、group by 是对数据进行分组,分组时,表中有相同值的分为一组。分组后可以进行

聚合查询。

2、group by 分组后的查询中, select 的列不能出现除了 group by 分组条件以及聚

合函数外的其他列。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2;

having

having 是对 group by 分组后的结果集进行筛选。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2 having

select count(列) from table_name [其他子句]; 1


### group by

1、group by 是对数据进行分组,分组时,表中有相同值的分为一组。分组后可以进行

聚合查询。

2、group by 分组后的查询中, select 的列不能出现除了 group by 分组条件以及聚

合函数外的其他列。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2;


###  **having**

having 是对 group by 分组后的结果集进行筛选。

select 列1, 列2, (聚合函数) from table_name group by 列1, 列2 having

分组后条件;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值