MySQL 基础篇

概述

MySQL是关系型数据库,建立在关系模型基础上的由多张相互连接的二维表组成的数据库

特点:

使用表结构存储数据,格式统一,便于维护

使用SQL语言操作,标准统一,使用方便

数据模型:

SQL

sql通用语法

SQL语句可以单行或多行书写,以分号结尾。

SQL语句可以使用空格/缩进来增强语句的可读性。

MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

注释:

单行注释:--注释内容或#注释内容(MySQL特有)

多行注释:/*注释内容*/

SQL分类

DDL

数据定义语言,用来定义和管理数据库对象的结构

DDL-数据库操作

查询

查询所有数据库

SHOW DATABASES;

查询当前数据库

SELECT DATABASE();

创建

CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET 字符集COLLATE 排序规则

删除

DROP DATABASES IF EXISTS 数据库名;

使用

USE 数据库名;

DDL-表操作-查询

查询当前数据库所有表

SHOW TABLES;

查询表结构

DESC 表名;

查询表的建表语句

SHOW CREATE TABLE 表名;

DDL-表操作-创建

CREATE TABLE 表名(

字段1 字段1类型 COMMENT 字段1注释

字段2 字段2类型 COMMENT 字段2注释

字段3 字段3类型 COMMENT 字段3注释

COMMENT 表注释

DDL-表操作-数据类型

主要包括数值类型、字符串类型、日期时间类型

DDL-表操作-修改

添加字段

ALTER TABLE 表名 ADD 字段名 类型(长度) COMMENT 注释约束

修改数据类型

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

修改字段名及数据类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)COMMENT 注释约束

删除字段

ALTER TABLE 表名 DROP 字段名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名

删除表

DROP TABLEIF EXISTS 表名;

删除指定表,并重新创表

TRUNCATE TABLE 表名;

DML

数据操作语言,用于对数据库中的表的数据进行增删改

增加数据(INSERT)

修改数据(UPDATE)

修改数据(DELETE)

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......)

DML-修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2......where 条件

DML-删除数据

DELETE FROM 表名WHERE 条件

DQL

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

查询关键字:SELECT

DQL-语法

SELECT

字段列表

FROM

表名列表

WHERE

条件列表

GROUP BY

分组字段列表

HAVING

分组后条件列表

ORDER BY

排序字段列表

LIMIT

分页参数

执行顺序:

DQL-基本查询

查询多个字段

SELECT 字段1,字段2,字段3...... FROM 表名;

SELECT * FROM 表名;

设置别名

SELECT 字段1AS 别名1,字段2别名2...... FROM 表名;

去除重复记录(整行数据重复才会去重)

SELECT DISTINCT 字段列表 FROM 表名;

DQL-条件查询

语法

SLELCT 字段列表 FROM 表名 WHERE 条件列表;

条件

DQL-聚合函数

聚合函数是指将一列数据作为一个主体进行纵向计算

常见聚合函数

语法

SELECT 聚合函数(字段) FROM 表名

DQL-分组查询

语法

SELECT 字段列表 FROM 表名 WHERE 条件 GROUP BY 分组字段名HAVING 分组后过滤条件

WHERE 和HAVING的区别

执行时机不同:where在分组前进行过滤,having在分组后进行过滤

判断条件不同:where不能对聚合函数进行判断,而having可以

DQL-排序查询

语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2;

排序方式:

ASC:升序(默认)

DESC:降序

如果是多字段排序,当第一个字段相同时才会根据第二个字段进行排序。

DQL-分页查询

语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数

起始索引从0开始,起始索引=(查询页面-1)*每页显示记录数

分页查询是数据库的方言,不同数据库有不同的实现,MySQL是LIMIT

如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10.

DCL

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

DCL-管理用户

查询用户

USE mysql;

SELECT * FROM user

创建用户

CREATE USER '用户名'@'主机名' IDENTIDIED BY '密码'

修改用户密码

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

删除用户

DROP USER '用户名'@'主机名'

DCL-权限控制

Mysql中有多种权限,常用的有以下几种:

查询权限

SHOW GRANTS FOR '用户名'@'主机名'

授予权限

GRANTS 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'

撤销权限

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

函数

函数是指一段可以直接背另一段程序调用的程序或代码

字符串函数

常用的如下

数值函数

常见的数值函数如下:

日期函数

常见日期函数:

流程函数

约束

概述

约束是作用于表中字段上的规则,用于限制存储在表中的数据

目的是保证数据库中数据的正确、有效性和完整性。

外键约束

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

语法

添加外键

CREATE TABLE 表名(

字段名 数据类型,

......

CONSTRAINT外键名称FOREIGN KEY(外键字段名)REFERENCES 主表(主表别名)

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称)REFERENCES 主表(主表别名)

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称。

外键约束

删除/更新行为:

例如

emp表的emp添加外键指向emp的id字段。修改父表dept的id时,检查是否有外键 如果有就删除/更新在子表emp的记录

ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE;

多表查询

多表关系

由于业务之间的关联,各个表结构之间也可能存在各种联系包括:

一对多(多对一)

一对一

多对多

一对多:

例如员工和部门。

实现:在多的一方建立外键来关联另一方的主键。

多对多:

学生和课程之间的关系

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

一对一:

用户与用户详情的关系

多用于单表拆分,一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升效率。

多表查询概述

消除无效的笛卡尔积

多表查询分类:

连接查询

内连接:查询A,B交集部分数据

外连接:

左外连接:查询左表和交集的数据

右外连接:查询右表和交集的数据

自连接:当前表与自身的连接查询,必须使用表别名。

内连接

隐式内连接:

SELECT 字段列表 FROM 表1,表2 WHERE 条件......;

显示内连接

SELECT 字段列表 FROM 表1INNERJOIN 表2 ON 连接条件......;

外连接

左外连接:

SELECT 字段列表 FROM 表 LEFT OUTER JOIN 表2 ON 条件 ......;

查询表1的所有数据和交集的数据

右外连接

SELECT 字段列表 FROM 表 RIGHT OUTER JOIN 表2 ON 条件 ......;

查询表2的所有数据和交集的数据。

自连接

自连接语法

SELECT 字段列表 FROM 表A 别名A JOIN 表名A 别名B ON 条件......;

可以是内连接查询 也可以是外连接查询。

联合查询

对于union查询,就是将多次查询的结果合并起来,形成一个新的查询结果集。

SELECT 字段列表 FROM 表A......

UNION ALL(是否去重)

SELECT 字段列表 FROM 表B......;

多张表查询的列数和字段类型必须保持一致

子查询

SQL语句中嵌套select语句,称为嵌套查询,也叫子查询。

SELECT *FROM t1 WHERE column1=(SELECT column1 FROM t2)

子查询外部的语句可以是INSERT/UPDATE/DELETE/SELECT的任何一个

根据子查询的结果不同,分为:

标量子查询(查询结果为单个值)

列子查询(结果为一列)

行子查询(结果是一行)

表子查询(结果是多行多列)

根据子查询位置,分为:WHERE后,FROM后,SELECT后。

标量子查询

查用的操作符:= 、<> 、> 、>= 、< 、<=

列子查询

常用操作符:IN, NOT IN,ANY,SOME,ALL

行子查询

常用操作符是=、<>、IN、NOT IN

表子查询

常用操作符 IN

事务

事务简介

事务是一组操作的集合,是一个不可分割的工作单位,事务会把所有操作作为一个整体一起向系统提交或撤销请求,即这些请求要么同时成功,要么同时失败。

默认MySQL的事务是自动提交的,当执行一条DML语句,MySQL会立即隐式的提交事务。

事务操作

查看/设置事务提交方式

SELECT @@autocommit;

SET @@autocommit=0;

提交事务

COMMIT;

回滚事务

ROLLBACK;

开启事务

START TRANSACTION 或 BEGIN

事务四大特性(ACID)

原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败

一致性:事务成功时,必须使所有的数据都保持一致状态

隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作一下的独立环境下运行

持久性:事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务问题

事务隔离级别

查看隔离级别

select @@TRANSACTION_ISOLATION

设置隔离级别

set session\|GlOBAL TRANSACTION ISOLATION LEVEL {READ UNICOMMITED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}

相关推荐
努力努力再努力wz21 分钟前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
HackTwoHub34 分钟前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
宠友信息1 小时前
Redis 内容社区源码架构优化与即时通讯数据一致性处理
spring boot·后端·websocket·mysql·uni-app
Elastic 中国社区官方博客1 小时前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
杨婷1231 小时前
2026 企业微信会话存档服务商选型指南:一维助手方案深度解析
大数据·数据库·企业微信
霸道流氓气质1 小时前
Kiro 配置 MySQL MCP Server 通用教程
数据库·mysql·adb·mcp·kiro
2601_963771371 小时前
Optimizing Logistics and Transportation Sites on WordPress
前端·数据库·windows·php
AC赳赳老秦2 小时前
采购专员自动化:OpenClaw 自动比价、生成询价单、跟踪供应商报价进度实战指南
开发语言·数据库·人工智能·python·自动化·github·openclaw
蚁库2 小时前
Oracle 11g RAC 多路径配置总搞不定?iSCSI + Multipath + ASM 磁盘组,14节视频带你完整通关
数据库·oracle