01.MySQL(SQL分类及使用)

注意: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_stamp
2020-01-11 09:53:322020-01-11 09:53:32

现在我们运行

修改当前会话的时区:

set time_zone='+8:00';

再次查看数据:

date_timetime_stamp
2020-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

DML:Data 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是NULL
ADN 或 &&并且(多个条件同时成立)
或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创建数据库/表

注意:

  • 多个权限之间使用逗号分隔
  • 授权时,数据库名和表名可以使用*进行通配,表示所有。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值