sql分类
分类 | 全称 | 说明 |
---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表, 字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的 访问权限 |
DDL
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段) 。
数据库操作
- 查询所有数据库
show databases ;
- 查询当前数据库
select database() ;
- 创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序 规则 ] ;
- 删除数据库
drop database [ if exists ] 数据库名 ;
- 切换数据库
use 数据库名 ;
- 其他
可以通过if not exists 参数来解决这个问题,数据库不存在, 则创建该数据库,如果存在,则不 创建。
create database if not extists itcast;
表操作
表操作-查询创建
- 查询当前数据库所有表
show tables;
- 查看指定表结构
desc 表名 ;
- 查询指定表的建表语句
show create table 表名 ;
- 创建表结构
CREATE TABLE 表名(
字段1 字段1类型 [COMMENT 字段1注释 ],
字段2 字段2类型 [COMMENT 字段2注释 ],
字段3 字段3类型 [COMMENT 字段3注释 ],
字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释] ;
表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
- 数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2byte | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3byte | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4byte | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-263,263-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E- 38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157 E+308, 1.7976931348623157 E+308) | 0和 (2.2250738585072014 E-308, 1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 1byte | 依赖于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-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
表操作-修改
- 添加字段
ALTER TABLE 表名 ADD 字段名 类型 (长度) [COMMENT 注释 ] [ 约束 ];
- 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型 (长度);
- 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 (长度) [ COMMENT 注释 ] [ 约束 ];
- 删除字段
ALTER TABLE 表名 DROP 字段名;
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
表操作-删除
- 删除表
DROP TABLE [ IF EXISTS ] 表名;
- 删除指定表, 并重新创建表
TRUNCATE TABLE 表名;
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, ...) ;
修改数据
UPDATE 表名 SET 字段名1= 值1, 字段名2= 值2,....[WHERE 条件 ];
删除数据
DELETE FROM 表名 [WHERE 条件 ];
DQL
基本语法
SELECT
字段列表
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
基础查询
- 查询多个字段
SELECT 字段1, 字段2, 字段3 ... FROM 表名 ;
SELECT*FROM 表名;
- 字段设置别名
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;
SELECT 字段1 [ 别名1], 字段2 [ 别名2] ... FROM 表名;
- 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
条件查询
- 语法
SELECT 字段列表 FROM 表名 WHERE 条件列表 ;
- 条件
常用的比较运算符如下:
比较运算符 | 功能 |
---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围之内(含最小、最大值) |
IN(…) | 在in之后的列表中的值,多选一 |
LIKE 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
IS NULL | 是NULL |
常用的逻辑运算符如下:
逻辑运算符 | 功能 |
---|
AND 或 && | 并且 (多个条件同时成立) |
OR 或 || | 或者 (多个条件任意一个成立) |
NOT 或 ! | 非 , 不是 |
聚合函数
- 介绍
将一列数据作为一个整体,进行纵向计算 。 - 常见的聚合函数
函数 | 功能 |
---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
- 语法
SELECT 聚合函数(字段列表) FROM 表名 ;
分组查询
- 语法
SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];
- where与having区别
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组 之后对结果进行过滤。
判断条件不同:where不能对聚合函数进行判断,而having可以。
排序查询
- 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
- 排序方式
ASC : 升序(默认值)
DESC: 降序
分页查询
- 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
执行顺序
DQL语句的执行顺序为: from … where … group by … having … select … order by … limit …
DCL
管理用户
- 查询用户
select * from mysql.user;
- 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
- 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码' ;
- 删除用户
DROP USER '用户名'@'主机名' ;
权限控制
- 查询权限
SHOW GRANTS FOR '用户名'@'主机名' ;
- 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
- 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
- 常用权限
权限 | 说明 |
---|
ALL, ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |