SQL

通用语法

  1. 可单行,可多行,分号结尾

  2. 可使用空格 缩进增强可读性

  3. 不区分大小写,关键字建议使用大写

  4. 注释:单行:--xxxx 或#xxxx

    ​ 多行:/* */

分类

DDL DML DQL DCL

定义 增删改 查 创建用户,控制访问权限

DDL--数据库操作

  1. 数据库创建与删除
#查询所有数据库
SHOW DATABASES;

#查询当前数据库
SELECT DATABASE();

#创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集];[COLLATE 排序规则]

#删除
DROP DATABASE [IF EXISTS] 数据库名;

#使用
USE 数据库名;

括号内表示可以省

DDL--表操作

  1. 查询
#查询当前数据库所有表
show tables;

#查询表结构
DESC 表名;

#查询指定表的建表语句
SHOW CREATE TABLE 表名;
  1. 表的创建

屏幕截图 2025-10-30 135550

最后一个字段后没有逗号


数据类型

  1. 数值类型
  2. 字符串类型
  3. 日期 时间类型

数值类型

屏幕截图 2025-10-30 145402

采用无符号数时,在类型后添加unsigned即可

当表示小数时,需要标明长度和小数位数

score double(4,1) //分数范围为0.0~100.0,最高为四位数字,因此左侧为4,右侧表示小数位数为1

字符串类型

屏幕截图 2025-10-30 150125

char型字符串的长度由括号内的数字确定

而varchar则是由括号内的数字确定最大长度,只要小于最大长度,就都可以存储。

日期,时间类型

屏幕截图 2025-10-30 150633

year和timestamp的范围较小,一般不使用。


  1. 修改
//添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT '注释'][约束];

//修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

//修改名字和类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型(长度);

//修改表名
ALTER TABLE 表名 RENAME TO 新表名;
  1. 删除
//删除字段
ALTER TABLE 表名 DROP 字段名;

//删除表
DROP TABLE [IF EXISTS] 表名;

//删除并重新创建某表
TRUNCATE TABLE 表名;

DML--数据操作

包括表内数据的增删改

​ INSERT UPDATE DELETE

添加数据

//添加数据
//1.给指定字段添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...);

//2.给全部字段添加数据
INSERT INTO 表名 VALUES (值1,值2,...);

//3.批量添加数据
INSERT INTO 表名(字段名1,字段名2,...) VALUES (..),(..),(..);
INSERT INTO 表名 VALUES (..),(..),(..);

注意点:

  1. 字段名和数据值应保持一一对应
  2. 字符串和日期型数据应包含在引号中
  3. 插入的数据大小须在字段规定范围内

修改数据

UPDATE tablename SET dataname = data,dataname2 = data2,...[WHERE 条件];

where关键字是为了确认修改的位置,如果省略则会修改整个表

删除数据

DELETE FROM 表名 [WHERE 条件];
  1. 同上,无条件写入时会删除整个表的所有数据,变为空表
  2. 不能单独删除某个字段的值,只能删除整个一条数据(像删除某个字段可以使用UPDATE)

DQL--查询数据

SELECT+XXX组合

屏幕截图 2025-11-01 205857

基本查询

//1.查询多个字段
SELECT    dataname1,2,3...   FROM   tablename1,2,3...;
SELECT * FROM tablename;//all

//2.设置别名
SELECT dataname1[AS nickname1] datname2[AS nickname2] ... FROM tablename;

//3.去除重复记录,就是重复的只显示一次
SELECT DISTINCT 列名 FROM 表名

条件查询

屏幕截图 2025-11-01 211958

聚合函数

将一列数据作为一个整体,进行纵向计算。(可以类比excel)

count max min avg sum

SELECT 聚合函数(列名) FROM 表名;

null值不参与聚合计算

分组查询

SELECT 要展示的的列的范围 FROM 表名 [WHERE 条件] GROUP BY 作为分组条件的列 [HAVING 分组后的过滤条件]; 
  1. 列的范围并不一定是表里存在的,也可以利用聚合函数对它进行统计。

  2. where时分组之前进行过滤,是对分组范围的限定,不满足这个条件的内容不会被分组。having是分组后进行过滤,是对已经分好组的结果进行再次筛选。

    比如where age<18,就是只对小于十八岁的人进行筛选,大于十八岁的不参与分组。

    having age>3,就是对已经分好组的结果继续筛选,只展示年龄大于3岁的组别。

  3. where不能用聚合函数作为条件,having可以。

  4. 会自动根据列的内容来分组,比如:

SELECT age,salary FROM user GROUP BY gender;

​ 就是从user表中,根据gender的不同,对age和salary进行分组,一种gender对应一组age和salary。

  1. 在选择展示的列的范围时,可以对展示的内容起别名,比如count(id)number,就是把id的数量起一个叫number的别名,后续在having中可以直接用别名代指

  2. 执行顺序:WHERE>聚合函数>HAVING

  3. 分组之后,查询的字段,也就是要展示的内容,一般只包括条件列的内容和和聚合函数统计的内容,查询其他内容没什么意义。

    比如说:按照男女分组查询,一般可以展示人数,年龄平均值等由聚合函数统计过的字段,而不展示姓名、生日等单独的其他字段信息。

排序查询

SELECT 要展示的列 FROM 表名 ORDER BY 作为排序条件的列1 排序规则1,作为排序条件的列2 排序规则2;

规则一般有两种

  1. ASC:升序(不提的时候默认为升 序)
  2. DESC:降序

有多个排序规则时,当前面的排序都相同时才会看下一个规则,即规则是有优先级的。

分页查询

SELECT 要展示的范围 FROM 表名 LIMIT 起始索引,查询记录数;
  1. 起始索引最小值为0.

  2. 不同数据库对分页查询有不同的实现,在MySQL里面就是LIMIT

  3. 查询的起始值如果是0,可省。

执行顺序

以上为编写顺序

屏幕截图 2025-11-02 104150

别名的使用要看执行顺序,只有在使用前已经执行过起别名的步骤才可以。

DCL--数据控制

所谓数据控制,就是管理数据库的用户,和控制数据库的访问权限。

管理用户

屏幕截图 2025-11-02 110338

任意主机:'%'

权限控制

屏幕截图 2025-11-02 111259

//查询权限
SHOW GRANTS FOR 'username'@'computername';

//授予权限
GRANT 权限列表 ON 数据库名.表名 TO 'username'@'computername';

//撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 'username'@'computername';

权限列表就是上面表格左侧的关键字。

  1. 多个权限间要用逗号分割
  2. 数据库名和表名可以用‘*’来通配,代表所有内容
Posted on 2025-11-02 12:15  miloandmicah  阅读(6)  评论(0)    收藏  举报