SQL Mysql Sql通用语法
SQL语句可以单行或多行书写,以分号结尾。
SQL语句可以使用空格/缩进来增强语句的可读性
MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
注释:
单行注释: –注释内容 或 # 注释内容(MySQL特有)
多行注释: /*注释内容 */
Sql语句分类
DDL DDL主要用来操作数据库,表,字段。
DDL-数据库操作
查询所有数据库
1 2 3 4 5 -- 查询所有数据库 show databases; -- 查询当前数据库 select database();
1 2 3 CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则]; -- 创建案例 create database if not exists db default char set 'utf8mb4' COLLATE 'utf8mb4_general_ci'
1 drop database [if exists] 数据库名;
DDL-表操作
1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释], 字段3 字段3类型[COMMENT 字段3注释], 字段n 字段n类型[COMMENT 字段n注释] )[COMMENT 表注释]; create table user( name varchar(32) comment '姓名', age tinyint(32) comment '年龄' ) comment '用户表';
1 ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释][约束];
1 ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度)[COMMENT 注释][约束];
1 ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型(长度)[COMMENT 注释][约束];
1 ALTER TABLE 表名 RENAME TO 新表名
1 DROP TABLE [IF EXISTS] 表名
DML DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
后面的where条件可以有也可以没有,如果没有,则会修改整张表的数据
1 DELETE FROM 表名 [WHERE 条件]
后面的where条件可以有也可以没有,如果没有,则会删除整张表的数据
DQL DQL英文全称是Data QueryLanguage(数据查询语言),数据查询语言,用来查询数据库中表的记录。
基本查询
条件查询
聚合函数 将一列数据作为一个整体,进行纵向计算
分组查询 1 SELECT 字段列表 FROM 表名[WHERE 条件]GROUP BY 分组字段名[HAVING 分组后过滤条件];
排序查询 1 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2
分页查询 1 SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数
DCL 用户管理 DCL英文全称是Data ControlLanguage(数据控制语言),用来管理数据库用户、控制数据库的访问权限
权限控制
MySql数据类型 数值类型
** *分类**** *
** *类型**** *
** *大小**** *
** *有符号(SIGNED)范围**** *
** *无符号(UNSIGNED)范围**** *
** *描述**** *
数值类型
TINYINT
1 byte
(-128,127)
(0,255)
小整数值
SMALLINT
2 bytes
(-32768,32767)
(0,65535)
大整数值
MEDIUMINT
3 bytes
(-8388608,8388607)
(0,16777215)
大整数值
INT或INTEGER
4 bytes
(-2147483648,2147483647)
(0,4294967295)
大整数值
BIGINT
8 bytes
(-2^63,2^63-1)
(0,2^64-1)
极大整数值
FLOAT
4 bytes
(-3.402823466 E+38,3.402823466351 E+38)
0和(1.175494351 E-38,3.402823466 E+38)
单精度浮点数值
DOUBLE
8 bytes
(-1.7976931348623157 E+308,1.7976931348623157 E+308)
0和(2.2250738585072014 E-308,1.7976931348623157 E+308)
双精度浮点数值
DECIMAL
** *依赖于M(精度)和D(标度)的值**** *
** *依赖于M(精度)和D(标度)的值**** *
小数值(精确定点数)
字符串类型
** *分类**** *
** *类型**** *
** *大小**** *
** *描述**** *
字符串类型
CHAR
0-255 bytes
定长字符串
VARCHAR
0-65535 bytes
变长字符串
TINYBLOB
0-255 bytes
不超过255个字符的二进制数据
TINYTEXT
0-255 bytes
短文本字符串
BLOB
0-65535 bytes
二进制形式的长文本数据
TEXT
0-65535 bytes
长文本数据
MEDIUMBLOB
0-16777215 bytes
二进制形式的中等长度文本数据
MEDIUMTEXT
0-16777215 bytes
中等长度文本数据
LONGBLOB
0-4294967295 bytes
二进制形式的极大文本数据
LONGTEXT
0-4294967295 bytes
极大文本数据
日期类型
** *分类**** *
** *类型**** *
** *大小**** *
** *范围**** *
** *格式**** *
** *描述**** *
日期类型
DATE
3
1000-01-01至9999-12-31
YYYY-MM-DD
日期值
TIME
3
-838:59:59至838:59:59
HH:MM:SS
时间值或持续时间
YEAR
1
1901至2155
YYYY
年份值
DATETIME
8
1000-01-0100:00:00至9999-12-3123:59:59
YYYY-MM-DD HH:MM:SS
混合日期和时间值
TIMESTAMP
4
1970-01-0100:00:01至2038-01-1903:14:07
YYYY-MM-DD HH:MM:SS
混合日期和时间值,时间戳
函数 字符串函数
日期函数
数值函数
流程函数
约束
外键约束删除更新行为
多表查询 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:
内连接
外连接
自连接
联合查询
如果携带参数ALL,则不会去重。
子查询
标量子查询 例子:查询销售部的所有员工
1 select * from emp where emp.dept_id = (select id from dept where name = '销售部' )
列子查询 例子:查询有员工薪资大于5000的部门
1 select * from dept where id in (select salary from emp where salary > 5000)
行子查询
表子查询
事务 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务操作 1 2 -- 设置手动提交事务,每次更新操作都要commit才能生效 set @@autocommit = 0
手动开启事务,提交与回滚
事务的四大特性
原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务的隔离性是数据库事务的四大特性(ACID)之一,它确保了多个并发执行的事务之间不会相互干扰,每个事务的操作对其他事务是“透明”还是“可见”取决于数据库设置的隔离级别。隔离性旨在解决并发事务操作数据时可能导致的脏读、不可重复读、幻读等问题。
事务的并发问题
事务的隔离级别