MySQL的基础(一)
MySQL的基础(一)
- SQL
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 databases\g
和分号效果是一样的。
(3)以\G
结尾_show databases\G
以一给信息为“一段”后换行,纵向排列的
一、 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 降序DESCLIMIT分页参数 起始索引从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';
来源地址:https://blog.csdn.net/m0_74154295/article/details/133943563
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341