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}

相关推荐
ApacheSeaTunnel6 小时前
实战演示 | 基于 Apache SeaTunnel 与 Apache DolphinScheduler 实现 MySQL 到 Doris 离线定时增量同步
大数据·mysql·开源·doris·数据集成·seatunnel·数据同步
shushangyun_6 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡6 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧7 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon7 小时前
SQL学习指南——视图
数据库·sql
活宝小娜7 小时前
mysql详细安装教程
数据库·mysql·adb
贤时间7 小时前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心8 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Database_Cool_8 小时前
什么是数据仓库物化视图?AnalyticDB MySQL 实时物化视图能力解析
人工智能·mysql·阿里云