【示例】MySQL-4类SQL语言-DDL-DML-DQL-DCL

前言

本文主要讲述MySQL中4中SQL语言的使用及各自特点。

SQL语言总共分四类:DDL、DML、DQL、DCL。

SQL-DDL | Data Definition Language

数据定义语言:用来定义/更改数据库对象(数据库、表、字段)

用途 | 操作数据库

# 查询所有数据库
show databases;

# 创建数据库:[]里面的内容为选写,增加创建数据库时候的补充条件
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
-- create schema [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];

# 查看创建当前数据库时候的建库SQL语句
show create table 表明;

# 进入【切换】到某个数据库
use 数据库名;

# 查看当前数据库名字
select database();

# 删除数据库
DROP DATABASE [ IF EXISTS ] 数据库名;
字符集utf8、utf8mb4等
引擎InnoDB(MySQL5.5之后的默认引擎)、Memory、MyISAM

用途 | 操作数据表

# 查询当前数据库的所有表
show tables;

# 创建数据表
CREATE TABLE 表名(
	字段1 字段1类型 [约束] [COMMENT 字段1注释],
	字段2 字段2类型 [约束] [COMMENT 字段2注释],
	字段3 字段3类型 [约束] [COMMENT 字段3注释],
	......
	字段n 字段n类型 [约束] [COMMENT 字段n注释]
) ENGINE=引擎 DEFAULT CHARSET=字符集;[COMMENT 表注释] ;

# 查看指定表
desc 表名;

# 查看创建当前数据表时候的建表SQL语句
show create table 表名;

# 修改数据表名字
ALTER TABLE 表名 RENAME TO 新表名;

# 数据表-添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

# 数据表-修改字段数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);

# 数据表-修改字段名+数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];

# 数据表-删除字段
ALTER TABLE 表名 DROP 字段名;

# 删除数据表
DROP TABLE [IF EXISTS] 表名;

# 删除数据表后会再重新创建该数据表
TRUNCATE TABLE 表名; 

用途 | 约束

约束,作用于数据表中字段上的规则,用于限制存储在表中每个字段下的数据。保证数据库中数据的正确、有效、完整。

约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

约束类别如下:

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后)保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

约束示例 | 常规约束

CREATE TABLE tb_user(
	id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一标识',
	name varchar(10) NOT NULL UNIQUE COMMENT '姓名' ,
	age int check (age > 0 && age <= 120) COMMENT '年龄' ,
	statues char(1) default '1' COMMENT '状态',
	gender char(1) COMMENT '性别'
);

上述建表语句解释:

idid设置为主键,并且自动增长
name不为空,并且唯一
age范围为(0, 120]
status默认为1
gender没有约束

【补充】

AUTO_INCREMENT是MySQL的一个属性,不是约束。自动递增的意思。

  • 假设id有该属性,当插入数据不带有id的时候,会默认在最新的id值基础上+1作为新插入数据的id值;当插入数据带有id的时候,只要id不重复,可以非连续插入数据。

约束示例 | 新建外键约束

外键约束的用法:

外键约束用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性

  • 有A和B两张表:A表示部门表;B表示员工表,里面有的部门id字段
  • 表A和表B可以建立外键关系:表A为主表;表B为从表,在从表中加入外键约束

外键约束的通用写法 | 建表时添加外键约束

CREATE TABLE 表名(
	字段名 数据类型,
	...
	[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);

-- []:表示可选项;():必须写

外键约束的通用写法 | 对已有表添加外键约束

# 已有数据表,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 自定义外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;

示例

  • 员工表:emp
字段含义
idID
name姓名
age年龄
dept_id所属部门id
  • 部门表:dept
字段含义
idID
name部门名称
  • 解释:

    • 为员工表的dept_id字段添加外键约束,关联部门表的主键id

    • dept_id就是外键

    • 带有外键的表emp,就是子表;另外一个表是父表

  • 添加约束

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

约束示例 | 删除外键约束

基本语法

ALTER TABLE 表名 DROP FOREIGN KEY 自定义外键名称;

【补充】如果定义外键的时候,没有指定外键名称,需要按照对应数据库的规则,查找到对应的外键名称,才能对外键进行删除。所以定义外键的时候,最好指定别名。

删除上述示例中的外键

# 删除外键约束
alter table emp drop foreign key fk_emp_dept_id;

表字段约束的行为

添加外键之后,删除父表数据时产生约束的行为,就称为删除/更新行为

行为类别如下:

行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 RESTRICT 一致) 默认行为
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 NO ACTION 一致) 默认行为
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值 (Innodb不支持)

SQL语法

ALTER TABLE 子表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 父表名 (父表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

SQL-DML | Data Manipulation Language

数据操作语言,用来对数据库中表的数据记录进行增、删、改操作

所有的DML语言,在没有条件的时候,默认操作全表数据。

用途 | 添加数据

# 添加表数据--单行--指定字段
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1,2, ...);

# 添加表数据--单行--全部字段
INSERT INTO 表名 VALUES (1,2, ...);

# 添加表数据--批量--指定字段
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1,2, ...), (1,2, ...), (1,2, ...);

# 添加表数据--批量--全部字段
INSERT INTO 表名 VALUES (1,2, ...), (1,2, ...), (1,2, ...);

用途 | 修改数据

# 修改表数据
UPDATE 表名 SET 字段名1 =1 , 字段名2 =2 , .... [ WHERE 条件 ];

用途 | 删除数据

# 删除表数据
DELETE FROM 表名 [ WHERE 条件 ] ;

SQL-DQL | Data Query Language

数据查询语言,用来查询数据库中表的记录

基础查询 | 不带查询条件

# 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名;

# 查询所有字段
SELECT * FROM 表名 ;

# 查询字段并设置别名(写不写as都一样)
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

# 去重查询
SELECT DISTINCT 字段列表 FROM 表名;

基础查询 | 带有查询条件

常用的比较运算符:

比较运算符写法示例功能
>、>=、<、<=、=WHERE id > 10大于、大于等于、小于、小于等于、等于
<> 或者 !=WHERE id <> 10不等于
BETWEEN ... AND ...WHERE id BETWEEN 10 AND 100在某个范围之内:[最小值、最大值],是个闭区间
IN(...)WHERE id in (10, 12, 14)在in之后的列表中的值,多选一
NOT IN(...)WHERE id NOT IN (1, 5, 9)返回值不在列表内的行
LIKE 占位符WHERE id LikE _ABC模糊匹配:_匹配单个字符, %匹配任意个字符)
IS NULLWHERE id IS NULL判断是否是NULL
IS NOT NULLWHERE id IS NOT NULL判断是否不是NULL

上述部分语句解析:

  • WHERE id LikE _ABC 返回以ABC为结尾,且整体长度为4的数据,例如:1ABC、AABC、ABABC(这个不是,长度不满足)

常用的逻辑运算符:

常用逻辑运算符功能
AND 或者 &&并且
OR 或者 ||或者
NOT 或者 !非,不是

示例

# 基础语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;

# 示例--占位符
select * from emp where name like '__';  		# 查询姓名为两个字的员工
select * from emp where idcard like '%X';		# 查询身份证结尾为X的员工
select * from emp where idcard like '_________________X';		# 查询身份证结尾为X的员工

聚合查询 | 聚合函数

聚合查询:以一列数据为整体,进行纵向查询。任何值为Null的字段数据,都不参与聚合查询

函数功能
count(id)统计id列的数量
max(salary)返回salary列的最大值
min(salary)返回salary列的最小值
avg(salary)返回salary列的平均值
sum(salary)返回salary列的总和
# 基础语法
SELECT 聚合函数(字段列表) FROM 表名;

聚合查询 | 分组查询GROUP BY

基础语法

# 通用语法
# 分组查询经常和聚合函数一起使用
SELECT 字段列表 FROM 表名 [ WHERE 分组前筛选条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

where和having的区别?

  • 执行时机:where在分组前执行;having在分组后执行
  • 判断条件:where不能对聚合函数进行判断,having可以

执行顺序

  • where > 聚合函数 > having

示例

# 根据性别分组, 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender;

# 根据性别分组 , 统计男性员工 和 女性员工的平均年龄
select gender, avg(age) from emp group by gender;

# 查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) AS address_count from emp where age < 45 group by workaddress having address_count >= 3;  # AS可省略

# 示例:返回每个role角色下,所有人的薪水总和,然后根据role分组,筛选总和大于1500的结果
select role, sum(salary) as totle from emp group by role having totle > 1500;

排序查询

基础语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 [ASC|DESC] , 字段2 [ASC|DESC];
排序
ASC升序,默认的排序方式
DESC降序

多字段排序的规则:当第一个字段一样时候,才会根据第二个字段排序,后续字段排序同理

示例

# 根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from emp order by age, entrydate desc;

分页查询

基础语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
  • 分页查询算是数据库的方言,不同的数据库有不同的实现。MySQL中使用的是LIMIT
  • 起始索引、待查询页码、每页记录数之间的关系:
起始索引 = (待查询的页码-1)* 每页记录数

多表查询:联合查询、子查询【重要】

参考文章:https://blog.csdn.net/qq_45445505/article/details/137051199

DQL语句的约定编写顺序和执行顺序

编写顺序

SELECT  字段列表

FROM 表名列表

WHERE 条件列表

GROUP BY 分段字段列表

HAVING 分组后条件列表

ORDER BY 排序字段列表

LIMIT 分页参数

执行顺序

FROM 表名列表

WHERE 条件列表

GROUP BY 分段字段列表

HAVING 分组后条件列表

SELECT  字段列表

ORDER BY 排序字段列表

LIMIT 分页参数

SQL-DCL | Data Control Language

数据控制语言,用来管理数据库用户、控制数据库的访问权限

MySQL默认的数据库

mysql主要存储数据库用户、权限等信息
information_schema存放了MySQL服务器所维护的所有其他数据库的信息
performance_schema收集服务器的执行同级信息。通过该库,用户可以查看服务器的运行过程,帮助定位可能存在的性能瓶颈。
sysperformance_schema的简化存在

mysql.user表的增删改查

管理用户

# 查询用户
select * from mysql.user;

image-20231027164419497

  • Host代表当前用户访问的主机:localhost代表只能本机访问,不可以远程访问;若改为%,表示任意ip可访问该数据库
  • User代表访问该数据库的用户名:root是默认用户;可以新建自定义的用户
  • MySQL中通过Host、User来唯一标识一个用户
# 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

# 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

# 删除用户
DROP USER '用户名'@'主机名';

权限控制

限定用户对特定数据库中特定表的访问权限。

权限列表说明
ALL、ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库、表、视图
CREATE创建数据库、表

基本语法

# 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;

# 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

# 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

示例

# 查询 'heima'@'%' 用户的权限
show grants for 'heima'@'%';

# 授予 'heima'@'%' 用户itcast数据库所有表的所有操作权限
grant all on itcast.* to 'heima'@'%';

# 撤销 'heima'@'%' 用户的itcast数据库的所有权限
revoke all on itcast.* from 'heima'@'%';
  • 用*号表示通配符,表示对数据库的所有表格赋予权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/543631.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 计算点投影到平面上的坐标(59)

MATLAB 计算点投影到平面上的坐标(59) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 点投影到平面,计算投影点的坐标,下面提供MATLAB版本的计算程序,直接运行即可,内有验证数据,具体看代码即可。 二、算法实现 1.代码 代码如下(示例): % 平面上的三个点分…

力扣--图论/Prim1584.连接所有点的最小费用

思路分析&#xff1a; 初始化&#xff1a;获取点的数量&#xff0c;并创建两个辅助数组 adjvex 和 lowcost&#xff0c;分别用于记录最小生成树的边信息和每个顶点到最小生成树的距离。Prim算法循环&#xff1a;在每一次循环中&#xff0c;选择一个未加入最小生成树的顶点 k&a…

登陆qq,经常收到qq游戏中心的推送信息,关闭推送信息

手动关闭推送信息的步骤&#xff1a; 1.点开左侧游戏中心 2、在打开界面&#xff0c;点击左下角自己的头像 3、打开设置中心&#xff0c;关闭所有的推送 4、完成关闭&#xff0c;不会推送了

使用 Prometheus 在 KubeSphere 上监控 KubeEdge 边缘节点(Jetson) CPU、GPU 状态

作者&#xff1a;朱亚光&#xff0c;之江实验室工程师&#xff0c;云原生/开源爱好者。 KubeSphere 边缘节点的可观测性 在边缘计算场景下&#xff0c;KubeSphere 基于 KubeEdge 实现应用与工作负载在云端与边缘节点的统一分发与管理&#xff0c;解决在海量边、端设备上完成应…

基于SSM+Jsp+Mysql的旅游网站设计与实现

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

数据链路层(上):以太网、二层交换机和网络风暴

目录 数据链路层知识概览 数据链路层设备 1、二层交换机 2、拓展&#xff1a;二层交换机与三层交换机有啥区别&#xff1f; 3、广播风暴 4、交换机以太网接口的工作模式 数据链路层的功能 数据链路层--以太网 1、以太网是什么&#xff1f; 2、以太网地址 数据链路层知…

手把手教你安装深度学习框架PyTorch:一键式安装指南

随着人工智能和深度学习的飞速发展&#xff0c;PyTorch作为一个强大而灵活的深度学习框架&#xff0c;受到了越来越多研究者和开发者的青睐。PyTorch不仅易于上手&#xff0c;而且支持动态计算图&#xff0c;使得调试和实验变得非常方便。本文将手把手教你如何安装PyTorch&…

端口协议(爆破、未授权)

常见端口服务及攻击方向&#xff1a; 弱口令爆破 工具&#xff1a;https://github.com/vanhauser-thc/thc-hydra hydra是一个支持多协议的自动化的爆破工具。 支持的服务、协议&#xff1a; telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-…

Flutter第八弹 构建拥有不同项的列表

目标&#xff1a;1&#xff09;项目中&#xff0c;数据源可能涉及不同的模版&#xff0c;显示不同类型的子项&#xff0c;类似RecycleView的itemType, 有多种类型&#xff0c;列表怎么显示&#xff1f; 2&#xff09;不同的数据源构建列表 一、创建不同的数据源 采用类似Rec…

直播弹幕系统设计

本文仅提供思路参考&#xff0c;并非完备的详细设计。 特点 其实很类似IM即时通讯系统&#xff0c;是个变种&#xff0c;本质也是在一个空间内收发消息 消息及时性强&#xff0c;过期消息意义不大用户松散&#xff0c;随时来随时走可能有瞬时大批量弹幕&#xff08;比如比赛精…

漫途水产养殖水质智能监测方案,科技助力养殖业高效生产!

随着水产养殖业的蓬勃发展&#xff0c;水质和饲料等多重因素逐渐成为影响其持续健康发展的关键因素。由于传统养殖模式因监控和调节手段不足&#xff0c;往往造成养殖环境的恶化。需要通过智能化养殖&#xff0c;调控养殖环境&#xff0c;实现养殖的精细化管理模式&#xff0c;…

【Git教程】(九)版本标签 —— 创建、查看标签,标签的散列值,将标签添加到日志输出中,判断标签是否包含特定的提交 ~

Git教程 版本标签&#xff08;tag&#xff09; 1️⃣ 创建标签2️⃣ 查看存在的标签3️⃣ 标签的散列值4️⃣ 将标签添加到日志输出中5️⃣ 判断tag是否包含特定的提交&#x1f33e; 总结 大多数项目都是用 1.7.3.2和 “ gingerbread” 这样的数字或名称来标识软件版本的。在 …

《由浅入深学习SAP财务》:第2章 总账模块 - 2.6 定期处理 - 2.6.6 年初操作:科目余额结转

2.6.6 年初操作&#xff1a;科目余额结转 在使用事务代码 FAGLB03 查询科目余额时&#xff0c;可以看到按期间的发生额清单。其中&#xff0c;第一行称为“余额结转”&#xff0c;该行的累计余额代表上年度遗留下来的余额&#xff0c;也就是年初余额。对于资产负债表科目而言&a…

中华人民共和国密码行业标准-各类标准文档下载

国家密码管理局 中华人民共和国密码行业标准 GmSSL Project 密码行业标准化技术委员会公布了所有密码行业标准&#xff0c;并支持全文查看&#xff0c;参见密码行业标准列表 GM/T 0001-2012 祖冲之序列密码算法 GM/T 0002-2012 SM4分组密码算法(原SMS4分组密码算法) GM/…

深度剖析整型和浮点型数据在内存中的存储(C语言)

目录 整型在内存中的存储 为什么整型在内存中存储的是补码&#xff1f; 大小端字节序 为什么有大端小端&#xff1f; 浮点型家族 浮点数在内存中的存储 long long 整型在内存中的存储 整型在内存中有三种二进制表示形式&#xff1a;原码&#xff0c;反码&#xff0c;补码…

Tomcat源码解析——Tomcat的启动流程

一、启动脚本 当我们在服务启动Tomcat时&#xff0c;都是通过执行startup.sh脚本启动。 在Tomcat的启动脚本startup.sh中&#xff0c;最终会去执行catalina.sh脚本&#xff0c;传递的参数是start。 在catalina.sh脚本中&#xff0c;前面是环境判断和初始化参数&#xff0c;最终…

Linux三剑客-sed、awk、egrep(上)

一、知识梗概 二、正则表达式 定义&#xff1a;正则表达式是一种强大的文本处理工具&#xff0c;用于在文本中搜索符合特定模式的字符串。它由一系列特殊字符和普通字符组成&#xff0c;可以定义复杂的搜索模式。正则表达式被广泛应用于各种编程语言和文本处理工具中。 简单来…

(2024,自回归,下一尺度预测,VQGAN)视觉自回归建模:通过下一尺度预测的可扩展的图像生成

Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方法 3.1 基础&#xff1a;通过下…

OpenAI反超Claude3,GPT4.5-Turbo正式版发布,AI王座再次易主

没想到&#xff0c;仅仅过了两个月&#xff0c;全球最强AI的宝座又易主了&#xff01; 几个月前&#xff0c;Claude3 Opus全面超越GPT-4&#xff0c;全球的网友纷纷抛弃GPT&#xff0c;投向Claude3的怀抱&#xff0c;并纷纷分享Claude3带来的惊艳体验。 如今&#xff0c;Open…

Win10 使用Telnet

命令行 telnet 127.0.0.1 80 调试是否能连接服务 输入exit 回车即可退出 相比于ping的不同