目录
-
SQL的通用语法
- SQL语句可以单行或者多行,以分号作为结束符号;
- SQL语句的注释可以是--或者#(MYSQL特有的一种格式)
- SQL采用 /* 注释内容 */这样的形式来表示多行注释
- SQL语句中理论上是不区分大小写的,只是更建议关键字采用大写的格式
-
SQL的分类
- SQL分为DDL、DML、DQL、DCL四种类型
DDL解释
- 语文层面:数据库定义语言
- 专业层面:功能是用来定义数据库、表和字段
- 个人理解:类似于一个房子打地基的工程量
数据库操作
- 创建数据库:create database [if not exists] 数据库名 [default charset 字符集];
- 查询所有数据库:show databases;
- 删除数据库:drop database [if exists] 数据库名;
- 使用/切换数据库:use 数据库名;
- 查询当前正在使用的数据库:select database();
表操作
- 查询所有数据库的表:show tables;
- 查询表结构:desc 表名;
- 查询建表语句:show create table 表名;
- 创建表语句:create table tb_user(id int comment '编号', name varchar(1) comment '姓名') comment '用户表';
- 表操作的数据类型:数值类型(int,tinyint,float,double,decimal)、字符类型{char(定长字符串,每次都是固定的空间,缺少的会自动填充空格)、varchar(变长字符串,每次可自由填充)}、日期类型{date、datetime、time、year、timestamp(时间戳,自1970年开始,到2038年截止,需要注意,不能表示以后的某个时间)}
- 给建好的表添加字段:alter table 表名 add 字段名 字段数据类型;
- 修改建好表的某个字段的数据类型:alter table 表名 modify 字段名 新数据类型(长度);
- 修改建好表的某个字段的名称:alter table 表名 change 旧字段名 新字段名 类型(长度);
- 删除建好表的某个字段:alter table 表名 drop 字段名
- 修改建好表的表名:alter table 表名 rename to 新表名
- 删除表:drop table 表名; truncate table 表名;delete table 表名;
-
DROP
- 操作对象:数据库对象,如表、索引、视图、数据库等。
- 影响范围:不仅删除数据,还删除对象本身及其结构定义。例如,使用
DROP TABLE table_name;
会删除表及其所有数据,且操作不可逆。
-
TRUNCATE
- 操作对象:表。
- 影响范围:删除表中的所有数据,但保留表的结构定义。同时,会重置表的自增计数器(如果表中有自增列)。TRUNCATE操作不会激活触发器,也不会逐行记录删除操作到事务日志中,因此执行速度较快。
-
DELETE
- 操作对象:表或视图中的数据。
- 影响范围:根据指定的条件删除数据,可以删除单行、多行或所有行,但保留表的结构定义。DELETE操作会逐行删除数据,并记录每行的删除操作到事务日志中,因此执行速度相对较慢。同时,DELETE操作可以激活触发器。
-
DML解释
- 语文层面:数据操作语言
- 专业层面:用于操作数据库中的数据,对数据的增删查改
- 个人理解:对于一个房间的布置和设计,选择怎么合理的规划房间内的物品(数据)
数据库中对表的操作
- 新增指定字段的数据:insert into 表名 (字段1,字段2,...)values (值1,值2,...);
- 新增的时候需要注意:字段对应值需要对应;涉及到字符串或者日期类型的值需要加引号;同时新增的数值需要满足范围要求
- 新增所有字段的数据:insert into 表名 values (值1,值2,...);
- 修改某一个字段的值:update 表名 set 字段名 = 值; (加where就是在自定条件下修改值,不加则是全部修改)
- 删除数据:delete from 表名;(注意:不加where条件会删除一个表中的所有数据)
DQL解释
- 语文层面:数据查询语言
- 专业层面:用于查询表中的记录
- 个人理解:对于一套房中,想要找到某个物品
SQL语句中字段的执行顺序
- from->join->where->group by->having->select->distinct->order by->limit
一些常见的查询类型
- 基本查询
- as重命名查询到的指定字段
- distinct去重
- 条件查询
- 有一些常见的连接词,between...and,and,or,in,not等
- between...and其中包含了最大值和最小值,第一个是最小值,第二个是最大值,顺序不能反
- like关键字用于模糊查询,_表示匹配一个字符,%表示匹配多个字符
- 聚合函数
- count来统计数量,max、min、avg来统计最大最小和平均值,sum函数用于求和
- null值是不参与聚合函数的计算的
- 分组查询
- where在聚合函数执行之前执行,having则是在聚合函数之后执行
- 排序查询
- ASC升序,DESC降序,字段后加排序方式
- 多个排序方式的时候按照从左到右依次排序,相同按照下一个字段继续筛选
- 分页查询
- select 字段列表 from 表名 limit 起始索引,查询记录数
- 起始索引=(查询页码数 - 1)* 查询记录数
- 查询第一页的时候不需要起始索引,直接写查询记录数即可
DCL解释
- 语文层面:数据控制语言
- 专业层面:用于创建用户、控制数据库的访问权限
- 个人理解:作为房间的主人公,允许哪些人来做客,可以给客人展示房间内的哪些物品
管理用户
- 查询用户:use mysql; select * from user;
- 创建只能在当前主机访问的用户:create user 'han'@'localhost' identified by '123456';
- 创建任意主机可以访问的用户:create user 'han'@'%' identified by '123456';
- 修改用户的密码:alter user 'han'@'%' identify with mysql_native_password by '12345';
- 删除用户:drop user 'han'@'%'
权限控制
- 查看某个用户的权限:show grants for '用户'@'主机名';
- 授予用户权限:grant 权限列表 on 数据库名.表名 TO '用户'@'主机名';
- 撤销权限:revoke 权限列表 on 数据库名.表名 from '用户'@'主机名';