MySQL的基础(一)
- SQL
-
- SQL的语法特点主要包括以下几点:
- 一、 SQL – DDL — 数据定义语言
-
- 1.1 数据库操作
-
- 1.1 显示现有的数据库
- 1.2 创建数据库
- 1.3 删除数据库
- 1.4 使用
- 1.2 数据表操作
-
- 1.2.1 表查询
- 1.2.2 表创建
- 1.2.3 修改表
- 1.2.4 小结
- 二、SQL – DML — 数据操作语言
-
- 2.1 添加数据 insert
- 2.2 修改数据 update
- 2.3 删除数据 delete
- 2.4 总结一下
- 三、SQL – DQL — 数据查询语言
-
- 3.1 语句顺序
-
- 3.1.1 书写顺序
- 3.1.2 执行顺序
- 3.2 基本查询(SELECT和FROM配合)
-
- 3.2.1.> 查询多个字段
- 3.2.2> 设置别名
- 3.2.3 去除重复记录
- 3.3 条件查询(where)
-
- 3.3.1` SELECT 字段列表 FROM 表名列表`
- 3.4.分组查询(GROUP BY)
-
- 3.4.1 学习一下聚合函数(一列的整体数据纵向的计算)
- 3.4.2 分组
- 3.4.3 WHERE,GROUP BY和HAVING
- 3.4.4 排序查询ORDER BY排序字段列表
- 3.4.5.分页查询LIMIT
- 四、SQL – DCL — 数据控制语言
-
- 4.1 管理用户
-
- 4.1.1,查询用户
- 4.1.2.创建用户
- 4.1.3.修改用户密码
- 4.1.4.删除用户
- 4.2权限控制
-
- 4.2.1.查询权限
- 4.2.2.授予权限
- 4.2.3.撤销权限
- 4.2.4.全部权限
SQL
SQL,全称为结构化查询语言(Structured Query Language),是一种用于管理关系数据库的标准计算机语言。它可以用于数据库的创建、查询、更新和修改等操作。
SQL语言包括数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)等部分。
-- 创建表
CREATE TABLE Students (
ID INT PRIMARY KEY,
Name VARCHAR(20),
Age INT
);
-- 插入数据
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 20);
-- 查询数据
SELECT * FROM Students;
-- 更新数据
UPDATE Students SET Age = 21 WHERE ID = 1;
-- 删除数据
DELETE FROM Students WHERE ID = 1;
SQL的语法特点主要包括以下几点:
SQL的关键字大小写不敏感,可以以单行或多行书写,空格/缩进–增强可读性,并以分号结束
。SQL的注释有两种方式:
- (1)单行注释:使用
--
或者#
注释开始,直到行尾。
(2) 多行注释:使用/*
开始,*/
结束。
注意:
虽然SQL的关键字大小写不敏感。但是,对于字符串和字符数据类型的值,是区分大小写的。
但是推荐使用小写,方便
- 反引号(`)用于包裹数据库名称,字段,数据表名称。是TAb键上方,数字1左边的英文状态的键。
- 以分号结束也可使用
g
或者G
(1)以分号结尾_show databases;
(2)以g
结尾_show databasesg
和分号效果是一样的。
(3)以G
结尾_show databasesG
以一给信息为“一段”后换行,纵向排列的
一、 SQL – DDL – 数据定义语言
DDL(Data Definition Language,数据定义语言)语句: 数据定义语言,主要是进行定义数据库、表的结构、数据类型、表之间的链接等操作。 例如:关键字有 CREATE用于创建数据表和数据表、ALTER用于修改表、DROP用于删除库和表 等。
1.1 数据库操作
1.1 显示现有的数据库
(1)查看MySQL服务器下的所以被创建出来的数据库
SHOW DATABASES
(2)查看当前数据库
SELECT DATABASE()
下方的NULL是因为,没有选择数据库
在DataGrip中
我们可以选择对应的数据库即可,或者切换数据库
(3)查看指定的数据库的创建信息
show create database 数据库名称
;
1.2 创建数据库
创建: CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]
(1)简单创建:
有无反引号都可以
都存在
(2)不可创建同名的数据库,存在即不创建
create database if not exists 数据库名称
(3)设置指定的字符集
utf8 -存储长度 3个字节【不建议】
utf8mb4 – 4字节
create database ss default utf8mb4
如果已经存在了该库,但没指定字符集,那就指定通过修改的方式来了。
alter database 库名 default character set 字符集
1.3 删除数据库
DROP DATABASE [IF EXISTS] 数据库名
[IF EXISTS] 是为了进一步确认存在。
1.4 使用
USE 数据库名
查看当前数据库名用前面,并切换数据库
1.2 数据表操作
对数据库中的表结构进行增删查改等操作,在这之前我们需要准备一张数据表。
1.2.1 表查询
先use指令找到数据库,
(1)查询当前所有表
show tables;
(2)查询表结构
DESC 表名;
(3)查询指定表的建表语句
SHOW CREATE table 表名;
1.2.2 表创建
创建库–使用库–创建表
CREATE [字段类型] TABLE [if not exists]表名(
字段1 字段1类型[COMMENT 字段1注释]
字段2 字段2类型[COMMENT 字段2注释]
字段3 字段3类型[COMMENT 字段3注释]
...
字段n 字段n类型[COMMENT 字段n注释])
[COMMENT 表注释];
验证 – 查询表结构
DESC 表名;
1.2.3 修改表
(1)添加字段
ALTER RABLE 表名 ADD 字段名 类型(长度) [comment 注释] [约束];
修改字段名和类型
ALTER RABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束]
删除字段
ALTER TABLE 表名 DROP 字段名
修改表名
ALTER table 表名 RENAME TO 新表名;
删除:
删除表
(1)TROP TABLE [IF EXISTS]表名;
删除指定表,并重新创建该表 –剩下表结构,数据被清除
(2)TRUNCATE TABLE 表名;
1.2.4 小结
(1)库操作
show databases;
create database 数据库名;
use 数据库名;
select database();
drop database 数据库名;
(2)表操作
show tables;
create table 表名(字段 字段类型 ,字段 字段类型);
desc 表名;
show create table 表名;
alter table 表名 add/modify/change/drop/rename to ..
drop table 表名;
二、SQL – DML – 数据操作语言
DML(Data Manipulation Language)语句: 主要是对数据进行增加、删除、修改操作。常用的语句关键字有 INSERT添加数据、UPDATE修改数据、DELETE删除数据 等。
2.1 添加数据 insert
( 1 )给指定的字段添加
`INSERT INTO 表名(字段1.,,字段2)VALUES(值1.值2....);`
( 2 )给全部的字段添加数据
`INSERT INTO 表名 values(值1.。值b);`
( 3 ) 批量添加数据
INSERT INTO 表名(字段1.,,字段2)VALUES(值1.值2....)(值1.值2....).(值1.值2....);
INSERT INTO 表名 values(值1.。值n),(值1.。值n),(值1.。值n);
注意:
- 插入时期,指定字段顺序,键值一一对应
- 字符串、日期应该在引号之中
- 大小、长度应该在规定的字段的范围之内
如果是插入多条数据,就多来点语句或者(3)的方
2.2 修改数据 update
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值 2 ,[where 条件];
修改语句的条件可以有,也可无。如果没有条件,则修改整张表的所有数据。
这项操作是不安全的,容易破坏元数据的—-但可以同意
成功完全替换掉
2.3 删除数据 delete
`DELETE FROM 表名 [WHERE 条件]`
注意: (1)条件可有可无,没有就是所有的数据
(2)DELETE 语句不能删除某个字段的值(可以用UPDATE)
2.4 总结一下
(1)添加数据:
INSERT INTO 表名 (字段1,字段2,)VALUES(值1,值2,)[,(值1,值2,..)..];
(2)修改数据
UPDATE 表名 SET 字段1=值1 ,字段2 =值2 [WHERE 条件]l
(3)删除数据
DELETE FROM 表名 [WHERE 条件];
三、SQL – DQL – 数据查询语言
3.1 语句顺序
3.1.1 书写顺序
SELECT
字段列表 字段名[AS]别名
FROM
表名列表
WHERE
条件列表 分组之前过滤
GROUP BY
分组字段列表
HAVING
分组后条件列表 分组之后过滤
ORDER BY
排序字段列表 升序ASC 降序DESC
LIMIT
分页参数 起始索引从0开始
3.1.2 执行顺序
FROM
表名列表
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后条件列表
SELECT
字段列表
ORDER BY
排序字段列表
LIMIT
分页参数
3.2 基本查询(SELECT和FROM配合)
3.2.1.> 查询多个字段
(1)SELECT 字段1 ,字段2,字段3..FROM 表名;
(2)SELECT *FROM 表名;
SELECT* 的*为通配符,效率低
3.2.2> 设置别名
as可以省略写
SELECT 字段1[AS 别名1] ,字段2[AS 别名2],..FROM 表名;
真名和替换名使用
select id,id as stu_id,name,name as stu_name from username;
3.2.3 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名
去除的时候,不能在distinct前面有其他的字段,要不然“长度”不对呀,会报错
3.3 条件查询(where)
注意事项:
对于selct语句执行顺序 FROM WHERE GROUP BY HAVING SELECT ORDER BY LIMIT
3.3.1 SELECT 字段列表 FROM 表名列表
‘>’ ‘>=’ ‘ 不等于 ‘ 或者 !=
BETWEEN…AND 介于某个范围之间
IN(…)介于in列表之间的某个值
LIKE 站位符 模糊查询【_匹配单个字符 ,%匹配多个字符】
IS NULL
AND 与 && 、 OR 与|| 、 NOT与 !,他们各自效果是一样的·
注意事项:
between ……and……语句 上下包含。
between…and不能写反
3.4.分组查询(GROUP BY)
3.4.1 学习一下聚合函数(一列的整体数据纵向的计算)
count 、max、 min、 avg、 sum
直接作用字段,且null值不参与聚合函数运算
SELECT 聚合函数(字段列表)FROM 表名
3.4.2 分组
SELECT 字段列表 FROM[WHERE 条件]GROUP BY 分组字段名[HAVING 分组后的过滤条件];
3.4.3 WHERE,GROUP BY和HAVING
在SQL中,WHERE,GROUP BY和HAVING都是用于筛选和分组数据的关键字,但它们的使用场景和方式有所不同。
-
WHERE子句用于筛选FROM子句中指定的操作所产生的行。它在数据分组之前进行筛选。WHERE不对聚合函数进行判断,但可以使用Having
-
GROUP BY子句用于对WHERE子句的输出进行分组。它可以将多行数据根据指定的列进行分组。
-
HAVING子句用于从分组的结果中筛选行。它在数据分组之后进行筛选,主要用于对分组后的数据进行条件筛选。
-
所以,如果你想在分组后对统计结果进行筛选,你必须使用HAVING,而不能使用WHERE
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 列名 运算符 值
GROUP BY 列名
HAVING 聚合函数(列名) 运算符 值;
注意事项
执行顺序:where > 聚合函数 > having
分组后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
3.4.4 排序查询ORDER BY排序字段列表
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2,排序方式2;
(1)排序方式:
ASC:升序 (默认)
DESC:降序
(2)排序先按第一个方式,再第二个方式
3.4.5.分页查询LIMIT
SELECT 字段列表 FROM LIMIT 起始索引,查询记录数;
如果你想要实现分页查询,你可以使用OFFSET关键字,语法如下:
SELECT 列名
FROM 表名
LIMIT 数量 OFFSET 数量;
LIMIT语句的简写形式也是对的。如果你只想限制返回的记录数,而不指定起始索引,你可以直接写LIMIT 数量。
四、SQL – DCL – 数据控制语言
DCL(Data Control Language)是数据控制语言的缩写,主要用于控制不同数据的权限和访问级别,这种语言包括两个部分:GRANT和REVOKE。GRANT用于授予用户权限,而REVOKE用于撤销用户的权限。
4.1 管理用户
4.1.1,查询用户
use mysql;
SELECT * FROM user;
4.1.2.创建用户
CREATE USER ‘用户名’@'主机名' IDENTIFIED BY '密码'
检测有没有权限访问其他数据库
在任意主机访问
CREATE user 'GG'@'%' identified by '123456';
4.1.3.修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'
ALTER USER 'HH'@'localhost' IDENTIFIED with mysql_native_password BY '10000';
4.1.4.删除用户
DROP USER '用户名'@‘主机名’;
注意事项:
主机名可以用%通配;
主要有DBA数据库管理员使用
4.2权限控制
4.2.1.查询权限
show grants for '用户名'@'主机名'
4.2.2.授予权限
grant 权限列表 on
数据库名.表名 to '用户名'@'主机名'
4.2.3.撤销权限
revoke 权限列表 on
数据库名.表名 from
'用户名'@'主机名'
4.2.4.全部权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';