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 TABLE[IF 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 字段1[AS 别名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 外键名称。 外键约束 删除/更新行为: ![](https://i-blog.csdnimg.cn/img_convert/5aa778a326c979768c5be12379ff4f40.png) 例如 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 表1\[INNER\]JOIN 表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}

相关推荐
古城小栈2 小时前
后端接入大模型实现“自然语言查数据库”
数据库·ai编程
IvorySQL2 小时前
拆解 PostgreSQL 连接机制:从进程模型到通信协议
数据库·postgresql
Dxy12393102162 小时前
MySQL连表更新讲解:从基础到高级应用
数据库·mysql
阿拉伯柠檬2 小时前
MySQL复合查询
linux·数据库·mysql·面试
YongCheng_Liang2 小时前
数据库核心概念深度解析:从基础原理到 SQL 分类
运维·数据库·sql
鲨莎分不晴2 小时前
HBase 基本使用详解
大数据·数据库·hbase
霖霖总总2 小时前
[小技巧28]MySQL 窗口函数详解:原理、用法与最佳实践
数据库·sql·mysql
e***98572 小时前
MySQL数据可视化全流程解析
数据库·mysql·信息可视化
2301_765715142 小时前
数据可视化:MySQL管理的视觉助手
数据库·mysql·信息可视化