欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

sql分为,sql分类有哪些

墨初 知识笔记 126阅读

注意DML只是进行增删改DQL才有查询

分类全称说明DDLData Definition Language数据定义语言用来定义数据库对象数据库表字段DMLData Manipulation Language数据操作语言用来对数据库表中的数据进行增删改DQLData Query Language数据查询语言用来查询数据库中表的记录DCLData Control Language数据控制语言用来创建数据库用户、控制数据库的访问权限 DDL 数据库操作 1. 查询所有数据库
SHOW DATABASES;
2. 查询所处数据库
SELECT DATABASE();
3. 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];--例CREATE DATABASE test01 DEFAULT CHARSET utf8mb4;
4. 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
5. 使用
USE 数据库名;
表操作 1. 查询当前数据库中所有表
SHOW TABLES;
2. 查询表结构
DESC 表名;
3. 查询指定表的建表语句
SHOW CREATE TABLE 表名;
4. 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
5. 修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
6. 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
7. 删除字段
ALTER TABLE 表名 DROP 字段名;
8. 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
9. 创建表
CREATE TABLE 表名(字段1 字段1类型 [COMMENT 字段1注释],    ...    字段1 字段1类型 [COMMENT 字段1注释])[COMMENT 表注释];
10. 删除表
DROP TABLE [IF EXISTS] 表名;
11. 删除表中所有数据删表后建表
TRUNCATE TABLE 表;
数据类型 分类类型大小有符号(SIGNED)范围无符号(UNSIGNED)范围描述数值类型TINYINT1 byte(-128,127)(0,255)小整数值SMALLINT2 bytes(-32768,32767)(0,65535)大整数值MEDIUMINT3 bytes(-8388608,8388607)(0,16777215)大整数值INT或INTEGER4 bytes(-2147483648,2147483647)(0,4294967295)大整数值BIGINT8 bytes(-263 ,263-1)(0,264-1)极大整数值FLOAT4bytes单精度浮点数值DOUBLE8 bytes双精度浮点数值DECIMAL依赖于M精度和D标度的值依赖于M精度和D标度的值小数值精确点数

日期类型注意timestamp 跟 datetime它们表示的年份范围不同其中timestamp会根据时区不同自动转换日期时间而datetime则会保持不变。

date_timetime_stamp2020-01-11 09:53:322020-01-11 09:53:32

现在我们运行

修改当前会话的时区:

set time_zone8:00;

再次查看数据

date_timetime_stamp2020-01-11 09:53:322020-01-11 17:53:32

性能

由于 TIMESTAMP 需要根据时区进行转换所以从毫秒数转换到 TIMESTAMP 时不仅要调用一个简单的函数还要调用操作系统底层的系统函数。这个系统函数为了保证操作系统时区的一致性需要进行加锁操作这就降低了效率。

DATETIME 不涉及时区转换所以不会有这个问题。

为了避免 TIMESTAMP 的时区转换问题建议使用指定的时区而不是依赖于操作系统时区。

# 查看当前会话时区SELECT session.time_zone;# 设置当前会话时区SET time_zone  Europe/Helsinki;SET time_zone  00:00;# 数据库全局时区设置SELECT global.time_zone;# 设置全局时区SET GLOBAL time_zone  8:00;SET GLOBAL time_zone  Europe/Helsinki;
DML

DMLData Manipulation Language数据操作语言用于对数据库表中表的数据记录进行增删改操作。

添加数据 指定字段添加数据
INSERT INTO 表名 (字段名1,字段名2,...) values (值1值2...); 
给全部字段添加数据
INSERT INTO 表名 VALUES (值1,值2,...);
批量添加数据
INSERT INTO 表名  (字段名1,字段名2,...) values (值1,值2,...),(值1,值2,...);

注意字符串和日期类型数据应该包含在括号中。

更新数据
UPDATE 表名 SET 字段名1  值1,字段名2  值2,...[WHERE 条件]; 

注意条件可以有也可以没有没有就是修改整张表的所有数据。

删除数据
DELETE FROM 表名 [WHERE 条件];

注意DELETE不设置条件删除整张表DELETE不能删除某个字段但可以使用UPDATE

DQL 基本查询 多字段查询
SELECT 字段1,字段2... FROM 表名;
全部字段查询
SELECT * FROM 表名;
设置别名
SELECT 字段1 [AS 别名1],字段2 [AS 别名1]... FROM 表名;
去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;

查询的字段列表数据完全一致为重复。

条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件

比较运算符功能>大于>大于等于<小于<小于等于等于<>或!不等于BETWEEN… AND…在某个范围之内含最大、最小值IN(…)在in之后的列表中的值多选一LIKE 占位符模糊匹配_匹配单个字符%匹配任意个字符IS NULL是NULLADN 或 &&并且多个条件同时成立或OR 或双竖线或者多个条件任意一个成立NOT 或非不是

查询姓名为两个字的员工信息

SELECT * FROM emp WHERE emp_name LIKE __;

查询身份证最后一位为X的员工信息

SELECT * FROM emp WHERE idcare LIKE %X;
聚合函数
SELECT 聚合函数(字段列表) FROM 表名;
函数功能count统计数量max最大值min最小值avg平均值sum求和
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名  [HAVING 分组后过滤条件];

where与having条件

执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤。判断条件不同where不能对聚合函数进行判断而having可以。

注意

执行顺序where > 聚合函数 > having。

分组之后查询的字段一般为聚合函数和分组字段查询其他字段无任何意义。

查询年龄小于45的员工并根据工作地址分组获取员工数量大于等于3的工作地址

SELECT workaddress FROM emp WHERE age < 45 GROUP BY workaddress HAVING COUNT(*) > 3;
排序查询
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式

排序方式

ASC升序默认值DESC降序

注意如果是多字段排序当第一个字段值相同时才会根据第二个字段排序。

分页查询
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数; 
执行顺序 DCL 管理用户 查询用户【用于查询有哪些用户对当前数据库管理系统有哪些权限】
USE mysql;SELECT * FROM user;
创建用户【表示创建的用户能访问数据库管理系统并没有权限访问数据库需要授权】
create user 用户名主机名 identified by 密码;

主机名使用localhost时表示只能在本机访问可以使用%表示任意主机都可访问例如可以进行远程连接。

修改用户密码
alter user 用户名主机名 identified with mysql_native_password by 新密码;
删除用户
drop user 用户名主机名;
权限管理 查询权限
SHOW GRANTS FOR 用户名主机名
授予权限
GRANT 权限列表 ON 数据库名.表名 TO 用户名主机名;
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名主机名;
权限列表

MySQL中定义了很多种权限但是常用的就以下几种

权限说明ALL,ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表

注意

多个权限之间使用逗号分隔授权时数据库名和表名可以使用*进行通配表示所有。

标签:
声明:无特别说明,转载请标明本文来源!