编程手记!
MySQL查询语句的执行顺序
在MySQL中,查询语句的执行顺序如下:
- FROM:指定要检索的表或子查询。
- JOIN:根据指定的连接条件执行表之间的连接操作。
- ON:指定连接条件。
- WHERE:应用筛选条件,仅包括满足条件的行。
- GROUP BY:按照指定的列进行分组。
- WITH:使用WITH子句定义临时表,通常与递归查询一起使用。
- HAVING:对分组后的结果进行筛选。
- SELECT:指定要检索的列。
- DISTINCT:去除重复的行。
- ORDER BY:按照指定的列对结果进行排序。
SQL [Select] 语句完整的执行顺序:
1 | 1、from子句组装来自不同数据源的数据; (先join在on) |
[SQL语言]不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。但在SQL语句中,第一个被处理的子句式FROM,而不是第一出现的SELECT。SQL查询处理的步骤序号:
1 | (1) FROM <left_table> |
以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。
如何查询当前 MySQL 安装的版本号?
使用 SELECT VERSION();
可以查询当前连接的 MySQL 的版本号。
MySQL查看已知表的建表脚本
1 | show create table 表名; |
MySQL:常见命令
这些命令可以帮助您执行各种与MySQL数据库相关的任务,包括创建数据库、创建表、插入数据、修改数据和执行存储过程等操作。
操作类型 | 命令 | 示例 |
---|---|---|
安装 MySQL | sudo apt-get install mysql-server (Ubuntu/Debian 系统) sudo yum install mysql-server (RedHat/CentOS 系统) | sudo apt-get install mysql-server |
启动 MySQL 服务 | sudo systemctl start mysql | sudo systemctl start mysql |
停止 MySQL 服务 | sudo systemctl stop mysql | sudo systemctl stop mysql |
重启 MySQL 服务 | sudo systemctl restart mysql | sudo systemctl restart mysql |
查看 MySQL 服务状态 | sudo systemctl status mysql | sudo systemctl status mysql |
登录 MySQL | mysql -u root -p | mysql -u root -p |
显示所有数据库 | SHOW DATABASES; | SHOW DATABASES; |
创建新数据库 | CREATE DATABASE 数据库名; | CREATE DATABASE example_db; |
删除数据库 | DROP DATABASE 数据库名; | DROP DATABASE example_db; |
选择数据库 | USE 数据库名; | USE example_db; |
显示当前数据库中的所有表 | SHOW TABLES; | SHOW TABLES; |
查看表的结构 | DESCRIBE 表名; | DESCRIBE users; |
创建新表 | CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...); | CREATE TABLE users (id INT, name VARCHAR(100)); |
删除表 | DROP TABLE 表名; | DROP TABLE users; |
向表中插入数据 | INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); | INSERT INTO users (id, name) VALUES (1, 'Alice'); |
从表中查询数据 | SELECT * FROM 表名; | SELECT * FROM users; |
更新表中的数据 | UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件; | UPDATE users SET name = 'Bob' WHERE id = 1; |
从表中删除数据 | DELETE FROM 表名 WHERE 条件; | DELETE FROM users WHERE id = 1; |
备份数据库 | mysqldump -u 用户名 -p 数据库名 > 备份文件名.sql | mysqldump -u root -p example_db > backup.sql |
恢复数据库 | mysql -u 用户名 -p 数据库名 < 备份文件名.sql | mysql -u root -p example_db < backup.sql |
显示当前用户 | SELECT USER(); | SELECT USER(); |
创建新用户 | CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; | CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; |
删除用户 | DROP USER '用户名'@'主机名'; | DROP USER 'newuser'@'localhost'; |
授权用户 | GRANT 权限 ON 数据库.表 TO '用户名'@'主机名'; | GRANT ALL ON example_db.* TO 'newuser'@'localhost'; |
撤销权限 | REVOKE 权限 ON 数据库.表 FROM '用户名'@'主机名'; | REVOKE ALL ON example_db.* FROM 'newuser'@'localhost'; |
显示用户权限 | SHOW GRANTS FOR '用户名'@'主机名'; | SHOW GRANTS FOR 'newuser'@'localhost'; |
刷新权限 | FLUSH PRIVILEGES; | FLUSH PRIVILEGES; |
更改用户密码 | ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码'; | ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword'; |
查看当前活动的连接 | `SHOW PROCESS |
常用Vim命令
命令 | 作用 | 示例/说明 |
---|---|---|
k、j、h、l | 上、下、左、右 | |
n + k 或者 n + ↑ | 光标 向上移动一个字符 | |
n + j 或者 n + ↓ | 光标 向下移动一个字符 | |
n + h 或者 n + ← | 光标 向左移动一个字符 | |
n + l 或者 n + → | 光标 向右移动一个字符 | |
gg | 光标 跳转到文件头部 | |
G | 光标 跳转到文件尾部 | |
^ | 跳转到光标所在行 行首 | |
$ | 跳转到光标所在行 行尾 | |
行号 + G | 光标 跳转到某行开头 | 200G |
: + 行号 + 回车 | 光标 跳转到某行开头 | |
n + 回车 | 光标 向下移动 n 行 | |
n + w | 光标 向后移动 n 个单词 | w为word的缩写 |
n + e | 光标 向后移动第n 个单词,并且位于该单词末尾 | e为end的缩写 |
ctrl + o | 光标 跳转回之前的位置 | o为older的缩写 |
ctrl + i | 光标 返回跳转之前的位置 | |
H | 光标 移动到这个屏幕最上方一行的第一个字符处 | |
M | 光标 移动到这个屏幕中央一行的第一个字符处 | |
L | 光标 移动到这个屏幕最下方一行的第一个字符处 | |
x | 向后删除一个字符 | 相当于 [del] 按键 |
X | 向前删除一个字符 | 相当于 [backspace] 亦即是退格键 |
n + x | 连续向后删除 n 个字符 | |
dw | 从光标处往后删除一个单词 | 注意保证光标在单词最前面,不然只能删除光标后面的部分 |
d + n + w | 从光标处往后删除 n 个单词 | d为delete的缩写,表示删除 |
dd | 删除当前行(整行) | |
n + dd | 删除光标所在的向下 n 行(包括当前行) | |
d + gg | 删除当前行和前面的所有内容(包括当前行) | gg 和 1G 作用相同 |
d + 1 + G | 同上 | |
d + G | 删除当前行和后面的所有内容(包括当前行) | |
d + 0 | 删除当前行光标 前面部分直到行首 | |
d + $ | 删除当前行光标 处字符到行尾的数据 | |
yy | 复制当前行 | y为yank的缩写,表示复制 |
n + yy | 从当前位置起,往下复制3行(包括当前行) | |
v | 可视化复制,选择需要复制内容,按 y 即可复制 | 根据光标选择 |
V | 可视化复制多行 | 按行选择 |
y + 1 + G | 复制光标 所在行到第一行的所有数据 | |
y + G | 复制光标 所在行到最后一行的所有数据 | |
y + 0 | 复制光标 所在的那个字符到该行行首的所有数据 | |
y + $ | 复制光标 所在的那个字符到该行行尾的所有数据 | |
p | 将已复制的数据贴到光标位置的后面 | |
P | 将已复制的数据贴到光标位置的前面 | |
u | 撤销 | |
ctrl + r | 反撤销 | |
a | 从光标后面开始插入 | |
A | 会跳到行尾并从光标后面开始插入 | |
i | 从光标前面开始插入 | |
I | 会跳到行首并从光标前面开始插入 | |
o | 会在光标下一行新建空白行插入 | |
O | 会在光标上一行新建空白行插入 | |
f + 查找字符 | 查找当前行中下一个出现的字符 | fa ,查找当前行中下一个出现的字符 a ,如果上次使用 f 命令查找字符 a ,则按 ; 会再次查找下一个出现的字符 a ,按 , 会查找上一个出现的字符 a |
f 命令与操作符 d 、c 、y 可以结合使用比如 d + f + 查找字符,删除 光标到当前行下一个出现的查找字符处 的数据 |