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}

相关推荐
Moshow郑锴1 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
Elastic 中国社区官方博客9 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云9 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba9 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭10 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-10 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang10 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
海绵宝宝转agent10 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源
geovindu11 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠11 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql