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)越往下隔离级别越高,同时性能也越差

相关推荐
白鲸开源9 小时前
(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
大数据·数据库·数据分析
阿维的博客日记9 小时前
从夯到拉的Redis和MySQL双写一致性解决方案排名
redis·分布式·mysql
好玩的Matlab(NCEPU)9 小时前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
21号 19 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
我的offer在哪里9 小时前
MongoDB
数据库·mongodb
SamDeepThinking9 小时前
为超过10亿条记录的订单表新增字段
mysql
练习时长一年10 小时前
AI开发结构化输出
数据库
IvorySQL11 小时前
灾难恢复工具内核细节探究与分享
数据库·postgresql·开源
lypzcgf11 小时前
商城小程序数据库表结构文档
数据库·小程序·电商
jjw_zyfx11 小时前
Ubuntu上vue3 vite使用MBTiles搭建地图服务器
服务器·数据库·ubuntu