MySQL基础语句学习

参考教程:https://www.runoob.com/mysql/mysql-create-database.html

参考博客:https://blog.csdn.net/2301_80913334/article/details/137414543?spm=1001.2014.3001.5501

一、SQL基础

(1)类型:

在SQL中有SQL语言,可以对数据库执行数据查询和数据操作,因此,SQL语言类型可分为:

  • 数据查询语言(DQL: Data Query Language)
  • 数据操纵语言(DML:Data Manipulation Language)

SQL语句对大小写不敏感!!

(2)结构:

SQL数据库
├── 表 (Table)
│   ├── 列/字段 (Column)
│   │   ├── 数据类型 (Data Type)
│   │   ├── 约束 (Constraints)
│   │   │   ├── 主键 (Primary Key)
│   │   │   ├── 外键 (Foreign Key)
│   │   │   ├── 唯一性 (Unique)
│   │   │   ├── 非空 (Not Null)
│   │   │   └── 检查 (Check)
│   │   └── 默认值 (Default Value)
│   └── 行 (Row)
├── 视图 (View)
├── 索引 (Index)
├── 存储过程 (Stored Procedure)
├── 触发器 (Trigger)
├── 用户 (User)
├── 角色 (Role)
└── 权限 (Permission)

表 (Table): 数据库中的基本存储单元,用于存储数据。

  • 列 (Column): 表中的字段,每个列都有一个特定的数据类型。
  • 数据类型 (Data Type): 定义列中数据的类型,如整数、字符串、日期等。
  • 约束 (Constraints): 用于限制列中的数据。
  • 主键 (Primary Key): 唯一标识表中的每一行。
  • 外键 (Foreign Key): 用于建立表与表之间的关系。
  • 唯一性 (Unique): 确保列中的所有值都是唯一的。
  • 非空 (Not Null): 确保列中不能有空值。
  • 检查 (Check): 确保列中的值满足特定条件。
  • 默认值 (Default Value): 如果插入数据时没有指定值,则使用默认值。
  • 行 (Row): 表中的记录,每一行代表一个数据项。

视图 (View): 虚拟表,基于SQL查询的结果集。
索引 (Index): 用于加速数据检索的数据结构。
存储过程 (Stored Procedure): 预编译的SQL代码块,可以在数据库中调用。
触发器 (Trigger): 在特定事件(如插入、更新、删除)发生时自动执行的SQL代码。
用户 (User): 数据库的访问者,每个用户都有特定的权限。
角色 (Role): 一组权限的集合,可以分配给用户。
权限 (Permission): 控制用户或角色对数据库对象的访问和操作权限。

(3)SQL固有表:

在MySQL数据库中,自带了一些数据表,他们是是MySQL数据库运行的基础

1. information_schema

存储了整个数据库的宽假结构,在攻击中最为常用,常用表:

TABLES:存储数据库中所有表的信息。
COLUMNS:存储表中所有列的信息。
STATISTICS:存储索引和统计信息。
ROUTINES:存储存储过程和函数的信息。
USER_PRIVILEGES:存储用户的权限信息。

2. performance_schema

performance_schema 主要用于性能监控,可以实时监控数据库的性能指标,如查询执行时间、锁等待、资源使用情况等,主要有以下表:

事件监控

events_waits_current:当前正在发生的事件(如锁等待)。

events_waits_history:最近发生的事件历史记录。

events_waits_history_long:更长时间范围内的事件历史记录。

events_statements_current:当前正在执行的 SQL 语句。

events_statements_history:最近执行的 SQL 语句历史记录。

events_statements_history_long:更长时间范围内的 SQL 语句历史记录。

线程和连接

threads:当前所有线程的信息,包括用户连接和后台线程。

socket_summary_by_instance:按实例统计的套接字连接信息

其他

setup_instruments:定义了哪些事件和指标可以被监控。

setup_consumers:定义了哪些性能数据会被收集和存储。

3. mysql:

mysql库主要用来存储数据库中的基础配置信息,下面是常用表:

用户和权限

  • user:存储 MySQL 用户账户及其全局权限。
  • db:存储用户对特定数据库的权限。
  • tables_priv:存储用户对特定表的权限。
  • columns_priv:存储用户对特定列的权限。
  • procs_priv:存储用户对存储过程和函数的权限。

插件

  • plugin:存储 MySQL 插件的加载状态和配置。

时区

  • time_zone:存储时区的基本信息。
  • time_zone_leap_second:存储时区的闰秒信息。
  • time_zone_name:存储时区名称。
  • time_zone_transition 和 time_zone_transition_type:存储时区转换规则。

日志

  • general_log:存储通用查询日志(如果启用)。
  • slow_log:存储慢查询日志(如果启用)。

其他

  • servers:存储远程服务器信息(用于 Federated 存储引擎)。
  • help_topic:存储 MySQL 帮助文档的内容。
  • func:存储用户自定义函数的信息。

二、DQL(数据查询)类语句

(1)对库的查询

对库的查询就只有一个操作,就是显示数据库名称

show databses

(2)对表的查询

对表的查询是SQL数据库中最常用的操作,下列是常用查询方法:

1. 有关表本身信息的查询

SHOW FULL COLUMNS FROM users;

这样可以查询出相应表的有关信息

2. 对字段/列(Columns)内容的查询

数据库中的有效信息基本存储在表中的字段中,所以我认为该查询很重要,在一个数据库中,数据库的名称是唯一的

SELECT [DISTINCT] column1, column2, ...
FROM 表名
[WHERE 条件]
[GROUP BY group_column1, group_column2, ...]
[HAVING 条件]
[ORDER BY order_column1 [ASC|DESC], order_column2 [ASC|DESC], ...]
[LIMIT 行数]
[OFFSET 跳过行数];

使用时去掉中括号,记得末尾的分号,例如

至于行的查询,也是使用对列的查询来实现,通过选取相应字段并限制行数即可实现

还可以使用UNION SELECT来进行联合查询,语法和SELECT相同,就不多说,主要注意

UNION SELECT查询的内容列数要和前面的SELECT查询内容的列数相同

三、DML(数据操作)语句

(1)对库的操作

1. 创建数据库

CREATE DATABASE 数据库名;

2. 删除数据库

DROP DATABASE <database_name>;        -- 直接删除数据库,不检查是否存在  
DROP DATABASE [IF EXISTS] <database_name>;
参数说明:
  • IF EXISTS 是一个可选的子句,表示如果数据库存在才执行删除操作,避免因为数据库不存在而引发错误。
  • database_name 是你要删除的数据库的名称。

(2)对表的操作

1. 创建数据表

首先要了解数据库内的数据类型:

https://www.runoob.com/mysql/mysql-data-types.html

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);

使用以下语法来实现:

参数说明:

  • table_name 是你要创建的表的名称。
  • column1, column2, … 是表中的列名。
  • datatype 是每个列的数据类型。

2. 删除数据表

按照以下方法

DROP TABLE table_name;     -- 直接删除表,不检查是否存在

DROP TABLE [IF EXISTS] table_name;  -- 会检查是否存在,如果存在则删除

参数说明:

  • table_name 是要删除的表的名称。
  • IF EXISTS 是一个可选的子句,表示如果表存在才执行删除操作,避免因为表不存在而引发错误。

3. 在表中插入数据

当对数据表进行数据写入时,即可使用 INSERT INTO 语句来插入数据

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

上方括号内的字段名和下方的值一一对应写入数据库

4. 更新表内数据

使用 UPDATE 语句可以直接更新表内数据,用法

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

注意在SQL语句中,字符串也要使用引号进行包裹

5. 删除表内数据

使用 DELETE 语句来删除表内内容

DELETE FROM table_name WHERE condition;

参数说明:

  • table_name 是你要删除数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定删除的行。如果省略 WHERE 子句,将删除表中的所有行。

6. ALTER 命令

SQL中的ALTER命令可以在不重新创建表的情况下直接更改表的结构


1. 修改表名
  • 语法

  ALTER TABLE 旧表名 RENAME TO 新表名;

2. 添加列
  • 语法
  ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束];

例如:添加年龄列

 ALTER TABLE users ADD COLUMN age INT NOT NULL DEFAULT 0;

3. 删除列
  • 语法
ALTER TABLE 表名 DROP COLUMN 列名;

例如:删除邮箱列

ALTER TABLE users DROP COLUMN email;

注意:若列有约束(如外键),会造成无法更改和删除,要先处理约束


4. 修改列定义
  • 修改数据类型
ALTER TABLE 表名 MODIFY COLUMN 列名 新数据类型;
  • 重命名列
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型;

5. 约束管理
  • 添加约束(主键、外键、唯一性等):
ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 (列);

例如:添加主键

ALTER TABLE users ADD CONSTRAINT pk_user_id PRIMARY KEY (id);
  • 删除约束
  ALTER TABLE 表名 DROP CONSTRAINT 约束名;

6. 默认值操作
  • 设置默认值
  ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;
  • 删除默认值
  ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT;

四、SQL高级语句

(1)LIKE 语句

这是LIKE与句的通常语法

SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;

参数说明:

  • column1, column2, … 是你要选择的列的名称,如果使用 * 表示选择所有列。
  • table_name 是你要从中查询数据的表的名称。
  • column_name 是你要应用 LIKE 子句的列的名称。
  • pattern 是用于匹配的模式,可以包含通配符。

具体的通配符种类和使用参考

https://blog.csdn.net/qq_36761831/article/details/82857800

(2)IN 操作符

在使用SELECT查询数据时,用于在WHERE语句中指定多个条件,用法:

SELECT column1, column2, ...
FROM table_name
WHERE column IN (value1, value2, ...);

(3)BETWEEN…AND… 语句

BETWEEN 可以选取介于两个值之间的数据范围内的值,这些值可以是数值、文本或者日期。

SELECT column1, column2, ...
FROM table_name
WHERE column BETWEEN value1 AND value2;

value1是范围的起始值,value2是范围的结束值,例如

(4)JOIN语句

类型描述
INNER JOIN返回两个表中满足连接条件的记录(交集)。
LEFT JOIN返回左表中的所有记录,即使右表中没有匹配的记录(保留左表)。
RIGHT JOIN返回右表中的所有记录,即使左表中没有匹配的记录(保留右表)。
FULL OUTER JOIN返回两个表的并集,包含匹配和不匹配的记录。
CROSS JOIN返回两个表的笛卡尔积,每条左表记录与每条右表记录进行组合。
SELF JOIN将一个表与自身连接。
NATURAL JOIN基于同名字段自动匹配连接的表。

用法

SELECT column1, column2, ...
FROM table1
JOIN table2 ON condition;
  • column1, column2, …:要选择的字段名称,可以为多个字段。如果不指定字段名称,则会选择所有字段。
  • table1:要连接的第一个表。
  • table2:要连接的第二个表。
  • condition:连接条件,用于指定连接方式。

五、常用的SQL函数

(1)concat()

将括号中的以逗号分隔的元素拼接起来,不需要有实际数据库也可执行

SELECT concat('hello','world');

(2)group_concat()

将多行内容拼接为一行并以逗号分隔,SQL注入中常用函数

SELECT GROUP_CONCAT(column1,column2, ...) FROM table_name;

例如

(3)ORDER BY

ORDER BY语句对查询结果关于一个或者多个字段进行降序或者升序排列

SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;

ASC:表示按升序排序, DESC:表示按降序排序。在SQL注入中用来检测一个表的字段数,需要注意的是SQL中计数是从0开始的

(4)GROUP BY

ORDER BY语句对查询结果关于一个或者多个字段进行分组

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

当发现ORDER BY可能被过滤时,可以尝试使用

(5)SELECT DATABASE();

不同于 SHOW DATABASES 的显示全部数据库,SELECT DATABASE(); 可以显示出当前数据库的名称

(6)SELECT VERSION();

跟上一个命令相似,可以回显当前数据库版本

(7)len()

该函数可以回显某个字段的值的长度

SELECT length(column) FROM table_name;
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇