Mysql数据库详解

在cmd中进入数据库的操作时mysql -u root -p

选择数据库操作用USE test_db;

相关概念

Sql是操作关系型数据库的编程语言

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

语法

数据类型

整型

类型 字节 范围(有符号) 描述
TINYINT 1 -128 ~ 127 小整数
SMALLINT 2 -32,768 ~ 32,767 较小整数
INT / INTEGER 4 -2,147,483,648 ~ 2,147,483,647 常用整数
BIGINT 8 ±9.22×10¹⁸ 超大整数

浮点型

类型 描述
FLOAT(M, D) 单精度浮点数(约 7 位精度)
DOUBLE(M, D) 双精度浮点数(约 16 位精度)
DECIMAL(M, D) 精确小数(用于财务/货币)

字符串型

类型 描述 最大长度
CHAR(n) 固定长度字符串 最多 255 字节
VARCHAR(n) 可变长度字符串 最多 65,535 字节(受行限制)
TEXT 长文本(不支持默认值) 最多 65,535 字节

日期时间类型

类型 格式 描述
DATE YYYY-MM-DD 日期
DATETIME YYYY-MM-DD HH:MM:SS 日期 + 时间(无时区)
TIMESTAMP YYYY-MM-DD HH:MM:SS 日期 + 时间(自动时区转换)
TIME HH:MM:SS 时间
YEAR YYYY

sql语法分类

DDL-数据库操作

  • 创建:CREATE DATABASE db_name;
  • 创建完整的:CREATE
  • 删除:DROP DATABASE db_name;
  • 查询所有数据库:SHOW DATABASES ;
  • 查询一个:SELECT DATABASE db_name;

DDL-数据表操作

  • 查询所有表:SHOW TABLES;
  • 查询表结构:DESC table_name;
  • 修改表:ALTER TABLE table_name ADD column_name datatype;
  • 修改列类型或名称
    ALTER TABLE table_name MODIFY column_name new_datatype;
    ALTER TABLE table_name CHANGEold_column_name new_column_name datatype;
  • 删除列
    ALTER TABLE table_name DROP COLUMN column_name;
  • 重命名表
    RENAME TABLE old_table_name TO new_table_name;
  • 删除表:DROP TABLE table_name;

创建表:CREATE TABLE table_name (

column1 datatype [constraints],

column2 datatype [constraints],

);

DML-数据操作(增删改)

  • 给指定字段添加数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
  • 给字段插入多行数据:INSERT INTO table_name (col1, col2) VALUES (value1_1, value1_2),(value2_1, value2_2);
  • 省略字段名添加(字段顺序必须匹配):INSERT INTO table_name VALUES (value1, value2, ...);
  • 更新数据:UPDATE table_name SETcolumn1 = value1, column2 = value2 [WHERE condition];
  • 不加where限制条件就会修改全部行, 加了限制年龄为36的修改为赵康
  • 删除数据:DELETE FROM table_name WHERE condition;不加where是指删了整张表的数据

DQL-数据查询语言

SELECT [DISTINCT] column1, column2, ...

FROM table_name

WHERE condition

GROUP BY column

HAVING condition

ORDER BY column \[ASC\|DESC\]

LIMIT offset, count\]; * 基本查询:查询相关列SELECT column1, column2, ...FROM table_name; 查询全部:SELECT \* FROM table_name; 设置别名查询:SELECT column1 AS 别名1, column2 AS 别名2...FROM table_name; 去掉重复记录查询:SELECT DISTINCT column1FROM table_name; ![](https://i-blog.csdnimg.cn/direct/5197956e233046fd9c1cf77e5b0aab1a.png)![](https://i-blog.csdnimg.cn/direct/1723289783d64ad7a100f033e46f11a7.png)![](https://i-blog.csdnimg.cn/direct/3c6d0d50ac1d4b33b1a3f1bef957e98c.png)![](https://i-blog.csdnimg.cn/direct/76285de571a34fd8ac94b1b032ae3fd7.png) * 条件查询(WHERE):条件包括 | 操作符 / 关键字 | 含义 | | |-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---| | `=` | 等于 | | | `!=` 或 `<>` | 不等于 | | | `>` / `<` | 大于 / 小于 | | | `>=` / `<=` | 大于等于 / 小于等于 | | | `BETWEEN a AND b` | 在区间内(含边界) | | | **`IN (a, b, ...)`** | **值在集合中,满足其一即可** | | | `NOT IN (...)` | 值不在集合中 | | | `LIKE` | 模糊匹配 | | | `NOT LIKE` | 不匹配 | | | `IS NULL` | 是空值 | | | `IS NOT NULL` | 不是空值 | | | `AND` / `OR` | 逻辑与 / 或 | | | `NOT` | 逻辑非 | | | `EXISTS` / `NOT EXISTS` | 子查询结果存在 / 不存在 | | | `REGEXP` | 正则匹配(大小写敏感) | | | **`LIKE BINARY`** | **严格区分大小写的模糊匹配** | 通配符 | 含义 | 示例说明 | |---------|-----------------------|---------------------------| | **`%`** | **匹配任意数量的任意字符(包括0个)** | **`'a%'`:以 a 开头的任意字符串** | | **`_`** | **匹配任意一个字符** | **`'a_'`:a 开头且后面跟一个任意字符** | | `[]` | 匹配指定范围内的任一字符(仅某些版本支持) | `'[a-c]%'`:以 a、b 或 c 开头的 | | `[^]` | 排除某些字符(仅某些版本支持) | `'[^a]%'`:不以 a 开头的 | ![](https://i-blog.csdnimg.cn/direct/4d64fe9960ca4ff6bd702ef3d273b222.png) ![](https://i-blog.csdnimg.cn/direct/15da21cb853f4673b2dc15d298daefd3.png) | | ![](https://i-blog.csdnimg.cn/direct/0d2b902f39bd4c36884c614dfe3adcbe.png) * 聚合参数(count,max,min,avg,sum):SELECT 函数(column1) FROM table_name;![](https://i-blog.csdnimg.cn/direct/0a1ed28591be4054bd4eddc865817d29.png)![](https://i-blog.csdnimg.cn/direct/64a61dd425d6441c9d796712aa8ff86c.png) * 分组查询(GROUP BY): SELECT column1, column2, ...FROM table_name \[WHERE condition\] GROUP BY 分组字段名 \[HAVING 过滤条件\];![](https://i-blog.csdnimg.cn/direct/559037f10a4d4c5aa308d578ed1332a2.png) 比如根据性别分组,统计男性和女性的数量,以及平均年龄![](https://i-blog.csdnimg.cn/direct/30515e43cac94aedb68ab955ac3d2ff0.png)![](https://i-blog.csdnimg.cn/direct/a3560a417d3248e2b3d1140e40bcc4da.png) !!一般的分组查询select后面跟的都是分组字段和聚合函数 * 排序查询(ORDER BY):SELECT 字段列表 FROM 表明 ORDER BY 字段1 排序方式1,字段2 排序方式2;**支持多字段排序,ASC升序(默认),DESC降序 !!如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序** eg. 根据年龄进行排序![](https://i-blog.csdnimg.cn/direct/fd090637be114eb698fdb386dd3da940.png) * **分页查询(LIMIT):SELECT 字段列表 FROM 表名 LIMIT 初始索引,查询记录数;** ![](https://i-blog.csdnimg.cn/direct/77c684de2cbc475a952394e8b0e61aa8.png) **查询第一页的10条记录** ![](https://i-blog.csdnimg.cn/direct/aeeaea8e5b424f089dce5d0918c83395.png) 查询第一页的5条记录![](https://i-blog.csdnimg.cn/direct/bda27a652a8b4887a9d12e15420372eb.png) #### 执行循序 #### ![](https://i-blog.csdnimg.cn/direct/3ee0d2b31e5241a7ac53217a407f0ba9.png)![](https://i-blog.csdnimg.cn/direct/192de4463e424a1691a6c6fa2b0a6ed8.png) ### DCL-数据控制语言 用来控制数据库的访问权限 ## 约束 约束是作用域表中字段上的规则,限制表中的数据 #### ![](https://i-blog.csdnimg.cn/direct/669ec44bc5dd491ba64081a5aaa16a4b.png) #### 外键约束:外键是建立两张表的数据之间联系的,保证数据的一致性和完整性 #### ![](https://i-blog.csdnimg.cn/direct/e91807d021de4125bc92226f8676046c.png) ## 多表查询 * 一对多(多对一):员工和部分的关系,需要建立外键联系 * 一对一:用户与用户详情的关系,多用于单表拆分,在任意一方加入外键,关联另外一方即可 * 多对多:学生和课程的关系,需要建立中间表,中间表至少两个外键,关联两方主键 语法:SELECT 表名1,表明2 WHERE 表名1.xx = 表名2.xx; 分类: * 内连接:查询两表**交集** 部分的数据![](https://i-blog.csdnimg.cn/direct/99cc4e2a9ee24b3f9d2ccc18e7f3925b.png) 查询每一个顾客的信息及关联的订单![](https://i-blog.csdnimg.cn/direct/93c2b7adc65142c5ba3869152f548b75.png)![](https://i-blog.csdnimg.cn/direct/8a6630defa10446eb64f7ff203668201.png) * 外连接: 左外连接:查询**左表** 的所有数据,及两表**交集** 部分![](https://i-blog.csdnimg.cn/direct/e3aa0d5942ba4d9497e6ad88be4e877d.png) 查询顾客的所有信息,及对应订单id信息![](https://i-blog.csdnimg.cn/direct/b663547fe5e944878db5a2b4858244d5.png) 右外连接:查询**右表** 的所有数据,及两表**交集** 部分![](https://i-blog.csdnimg.cn/direct/f322134628bf4f5abb026208d11c6b12.png) * 自连接:查询当前表与自身的连接查询 查询员工本身的名字及其直系领导的名字![](https://i-blog.csdnimg.cn/direct/88f9853a73f748b7ba0fa9500c81c361.png) ## 嵌套查询(子查询) SQL语句中嵌套SELECT语句 * 标量子查询:查到的数据是一个值 查询入职日期在房东白之后的员工信息![](https://i-blog.csdnimg.cn/direct/5341def3c8b74075980348cf2c8f58bb.png) * 列子查询:是一列 * 行子查询:子查询返回的结果是一行 * 表子查询:返回的结果是多行多列 ## 事务 事务是一组操作的**集合** ,是一个**不可分割** 的工作单位,这些操作**要么全部成功,要么全部失败** 比如,银行转账1000分三个步骤,当这个方法调用时,事务就自动开启了,中间出现任何问题都不会影响事务的自动提交。若李四金额+1000操作前出现了异常,就会导致前两个操作执行,第三个操作没执行,所以可以通过**手动设置开启和提交模式** ![](https://i-blog.csdnimg.cn/direct/c815826b22e848a4ba005f287ae22a70.png) > SET AUTOCOMMIT = 0; -- 关闭自动提交 > > SET AUTOCOMMIT = 1; -- 开启自动提交 > > 事务执行逻辑单元。。。。 > > 如果在事务执行过程中发生错误或需要撤销操作,可以使用`ROLLBACK`语句回滚事务,撤销所有未提交的更改。 > > COMMIT; --事务手动提交 ### 四大特性 ACID ![](https://i-blog.csdnimg.cn/direct/ccafafd46e0547e7a62f26cab195b42e.png) ### 并发事务问题 * 脏读:一个事务读到另外一个事务还**未提交的更新数据**。 * 不可重复读:一个事务前后读取同一条记录,两次数据不同 * 幻读:一个事务查询数据时,无该数据,但在插入数据时,又发现这行数据已经存在,出现了幻影 ### 事务隔离级别 :用于解决事务并发问题 ![](https://i-blog.csdnimg.cn/direct/01c211308102489f9b2699e992e5ce2b.png)越往下隔离级别越高,同时性能也越差

相关推荐
fie88891 小时前
MySQL:Prepared Statement 预处理语句
android·数据库·mysql
ErizJ1 小时前
Redis高级|Redis单线程VS多线程(基础)
数据库·redis
蜗牛编程之路1 小时前
RabbitMQ的使用--项目创建、五种工作模式、高级特性
数据库·分布式·rabbitmq
小鸡脚来咯1 小时前
redis穿透、击穿、雪崩
数据库·redis·缓存
厚衣服_31 小时前
第18篇:数据库中间件架构中的服务治理与限流熔断机制设计
数据库·中间件·架构
盖世英雄酱581361 小时前
🚀不改SQL,也能让SQL的执行效率提升100倍
java·数据库·后端
程序员岳焱2 小时前
Java 与 MySQL 性能优化:Linux服务器上MySQL性能指标解读与监控方法
linux·后端·mysql
Xy9102 小时前
从代码角度拆解Apptrace的一键拉起
javascript·数据库
袋鼠云数栈4 小时前
国产数据库StarRocks在数栈轻量化数据开发的全流程实践
数据库
Listennnn4 小时前
Text2SQL、Text2API基础
数据库·人工智能