MySQL(基础篇)——SQL

一.SQL分类

二.DDL(数据定义语言)

1.DDL------数据库操作

① 查询

查询所有数据库 SHOW DATABASES
查询当前所处数据库 SELECT DATABASE()

② 创建

CREATE DATABASE [IF NOT EXISTS] 数据库名(通常以db结尾) [DEFAULT CHARSET 字符集] [COLLATE 排序规则]

③ 删除

DROP DATABASE [IF EXISTS] 数据库名

④ 使用

USE 数据库名

2.DDL------表操作------查询

① 查询当前数据库所有表

SHOW TABLES

前提:通过USE指令,使用该数据库

② 查询表结构

DESC 表名

③ 查询指定表的建表语句

SHOW CREATE TABLE 表名

3.DDL------表操作------创建

CREATE TABLE 表名(

列名1 数据类型 [约束] [默认值] [注释] ...,

列名2 数据类型 [约束] [默认值] [注释] ...,

列名3 数据类型 [约束] [默认值] [注释] ...

...

) [COMMENT 表注释]

注:[...]为可选参数,最后一个字段后面没有逗号。

4.DDL------表操作------数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。

(1) 数值类型

① 整数

② 浮点

FLOAT、DOUBLE、DECIMAL(依赖于M(精度)和D(标度)的值)

DECIMAL(M,D)

M:精度,数据的总长度

D:标度,小数点后面的长度

(2) 字符串类型

CHAR(n) 长度为n的定长字符串,最大长度为255个字符

VARCHAR(n) 最大长度为n的可变字符串

(3) 日期时间类型

5.DDL------表操作------修改

(1) 添加字段

ALTER TABLE 表名 ADD 字段名 数据类型 [约束] [默认值] [注释]

(2) 修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型

(3) 修改字段名和数据类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束] [注释]

(4) 删除字段

ALTER TABLE 表名 DROP 字段名

(5) 修改表名

ALTER TABLE 表名 RENAME TO 新字段名

6.DDL------表操作------删除

① 删除表

DROP TABLE [IF EXISTS] 表名

② 删除指定表,并重新创建该表

TRUNCATE TABLE 表名

三.DML(数据操作语言)

用来对数据库中的数据记录进行增删改操作。

  • 添加数据(insert)
  • 修改数据(updata)
  • 删除数据(delete)
1.DML------添加数据

(1)给指定字段添加数据

INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...)

(2)给全部字段添加数据

INSERT INTO 表名 VALUES (值1,值2,...)

(3) 批量添加数据

INSERT INTO 表名 (字段名1,字段名2,...) VALUES (值1,值2,...)(值1,值2,...)
INSERT INTO 表名 VALUES (值1,值2,...)(值1,值2,...)

注:

  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
  • 若插入的数据是字符串或日期型数据应该包含在引号中。
  • 插入数据的大小,应该在字段的规定的范围内。
2.DML------修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件]

注:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

eg: update student set name = 'gty' where id = 2

3.DML------删除数据

DELETE FROM 表名 [WHERE 条件]

注:

  • DELETE的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据。
  • DELETE语句不能删除某一个字段的值(可以使用UPDATE(将该字段的值置为NULL))

补充:

TRUNCATE TABLE 表名 ------- 清空整张表

四.DQL(数据查询语言)

用来查询数据库中的数据。

查询关键字:SELECT

  • DQL------语法
  • 基本查询
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(GROUP BY)
  • 排序查询(ORDER BY)
  • 分页查询(LIMIT)
1.DQL------基本查询

(1) 查询多个字段

SELECT 字段1,字段2,字段3 ... FROM 表名
SELECT * FROM 表名

(2) 设置别名(增加可读性,不是必须的,设置别名时AS可以省略)

SELECT 字段1 AS 别名1,字段2 AS 别名2 ... FROM 表名

(3) 去除重复记录

SELECT DISTINCT 字段列表 FROM 表名
eg : select distinct subject from student

2.DQL------条件查询

(1) 语法

SELECT 字段列表 FROM 表名 WHERE 条件列表

(2) 条件

eg: select * from student where name like '_ _' 查询名字为两个字的学生

select * from student where phoneNum like '%6' 查询手机号最后一位为6的学生

3.DQL------聚合函数

(1) 介绍

将一列数据作为一个整体,进行纵向计算。

(2) 常见聚合函数

(3) 语法

SELECT 聚合函数(字段列表) FROM 表名

注:NULL值不参与所有聚合函数运算

eg:① select count(*) from student / select count(id) from student 统计学生人数

② select avg(age) from student 计算学生的平均年龄

③ select max(age) from student 计算学生的最大年龄

④ select min(age) from student 计算学生的最小年龄

4.DQL------分组查询

(1) 语法

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组过滤条件]

(2) where与having的区别

① 执行时机不同:where是分组前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤。

② 判断条件不同:where不能对聚合函数进行判断,而having可以。

注:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数,查询其他字段无意义

eg: select gebder, count(*) from student group by gender

根据性别分组,统计男同学和女同学的数量

select gender, avg(age) from student group by gender

根据性别分组,统计男同学和女同学的平均年龄

select homeAddress, count(*) from student where age < 20 group by homeAddress having count(*) >= 3

查询年龄小于20的学生,并根据家庭地址分类,获取学生数量大于等于3的家庭地址

5.DQL------排序查询

(1) 语法

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方法2

(支持多字段排序)

(2) 排序方式

  • ASC:升序(默认值)
  • DESC:降序

注:

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

eg: select * from student order by age asc

根据年龄升序排序

select * from student order by age asc, intime desc

根据年龄升序排序,年龄相同,根据入学时间进行降序排序

6.DQL------分页查询

(1) 语法

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数

注:

  • 起始索引从0开始,起始索引=(查询页码 - 1) * 每页显示记录数。
  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10 。

eg: select * from student linit 0,10 查询第一页学生数据,展示10条数据

select * from student linit 10 ------>上一行的简写形式

  • DQL------执行顺序

五.DCL(数据控制语言)

用来管理数据库用户,控制数据库的访问权限。

1.DCL------管理用户

(1) 查询用户

USE mysql

SELECT * FROM user

(2) 创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'

(3) 修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'

(4) 删除用户

DROP USER '用户名'@'主机名'

注:

  • 主机名可以用%通配。
  • 这类SQL开发人员操作的比较少,主要是DBA(DataBase ADministrator 数据库管理人员)使用。
2.DCL------权限控制

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

(1) 查询权限

SHOW GRANTS FOR '用户名'@'主机名'

(2) 授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'

(3) 撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名'

注:

  • 多个权限之间,使用逗号分隔。
  • 授权时,数据库名和表名可以使用 * 进行通配,代表所有。
相关推荐
瓜牛_gn23 分钟前
mysql特性
数据库·mysql
奶糖趣多多1 小时前
Redis知识点
数据库·redis·缓存
数新网络2 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
CoderIsArt2 小时前
Redis的三种模式:主从模式,哨兵与集群模式
数据库·redis·缓存
师太,答应老衲吧4 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
Channing Lewis5 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
追风林6 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil277 小时前
Redis - String 字符串
数据库·redis·缓存