diff --git a/docs/mysql.html b/docs/mysql.html new file mode 100644 index 00000000..4f28b61d --- /dev/null +++ b/docs/mysql.html @@ -0,0 +1,669 @@ + + + + +MySQL 备忘清单 + & mysql cheatsheet & Quick Reference + + + + + + +

+MySQL 备忘清单

+

本备忘单旨在快速理解 MySQL 所涉及的主要概念,提供了最常用的SQL语句,供您参考。

+

入门

+

介绍

+ +

MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成,如下所示的一个表格

+
+
    name ▼ 键            ▼ 列(col)
+┌┈┈┈┈┬┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┬┈┈┈┈┈┈┈┐
+id ┆ name   ┆ uid  ┆ level ┆  ◀ 表头header
+├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
+1 ┆ mysql  ┆ 03     ┆
+├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
+2 ┆ redis  ┆ 121     ┆  ◀ 行 row
+└┈┈┈┈┴┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┴┈┈┈┈┈┈┈┘
+    redis ▲ 值
+
+
+
    +
  • 表头(header) 每一列的名称
  • +
  • 列(col) 具有相同数据类型的数据的集合
  • +
  • 行(row) 每一行用来描述某个人/物的具体信息
  • +
  • 值(value) 行的具体信息,每个值与该列数据类型相同
  • +
  • 键(key) 用来识别某个特定的人/物的方法,有唯一性
  • +
+

登录MySQL

+
# 默认用户名<root>,-p 是密码,
+# ⚠️参数后面不需要空格
+mysql -h 127.0.0.1 -u <用户名> -p<密码>
+mysql -D 数据库名 -h 主机名 -u 用户名 -p
+mysql -h <host> -P <端口号> -u <user> -p [db_name]
+mysql -h <host> -u <user> -p [db_name]
+
+

常用的

+ +

数据库 Database

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:-:-
CREATE DATABASE db ;创建数据库
SHOW DATABASES;列出数据库
USE db;切换到数据库
CONNECT db ;切换到数据库
DROP DATABASE db;删除数据库
+

表 Table

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:-:-
SHOW TABLES;列出当前数据库的表
SHOW FIELDS FROM t;表的列表字段
DESC t;显示表格结构
SHOW CREATE TABLE t;显示创建表sql
TRUNCATE TABLE t;删除表中的所有数据
DROP TABLE t;删除表格
+

Proccess

+ + + + + + + + + + + + + + + + + +
:-:-
show processlist;列出进程
kill pid;杀死进程
+

查看 MySQL 信息

+
# 显示当前mysql的version的各种信息
+mysql> status;
+# 显示当前mysql的version信息
+mysql> select version(); 
+# 查看 MySQL 端口号
+mysql> show global variables like 'port';
+
+

退出MySQL会话

+
mysql> exit 
+
+

退出 quit;\q; 一样的效果

+

备份

+

创建备份

+
mysqldump -u user -p db_name > db.sql
+
+

导出不带架构的数据库

+
mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql
+
+ +

恢复备份

+
mysql -u user -p db_name < db.sql
+
+

MySQL 示例

+

管理表格

+

创建一个包含三列的新表

+
CREATE TABLE t (
+    id    INT,
+    name  VARCHAR DEFAULT NOT NULL,
+    price INT DEFAULT 0
+    PRIMARY KEY(id)
+);
+
+

从数据库中删除表

+
DROP TABLE t ;
+
+

向表中添加新列

+
ALTER TABLE t ADD column;
+
+

从表中删除列c

+
ALTER TABLE t DROP COLUMN c ;
+
+

添加约束

+
ALTER TABLE t ADD constraint;
+
+

删除约束

+
ALTER TABLE t DROP constraint;
+
+

将表从t1重命名为t2

+
ALTER TABLE t1 RENAME TO t2;
+
+

将列c1重命名为c2

+
ALTER TABLE t1 RENAME c1 TO c2 ;
+
+

删除表中的所有数据

+
TRUNCATE TABLE t;
+
+

从表中查询数据

+

从表中查询列c1、c2中的数据

+
SELECT c1, c2 FROM t
+
+

查询表中的所有行和列

+
SELECT * FROM t
+
+

查询数据并使用条件筛选行

+
SELECT c1, c2 FROM t
+WHERE condition
+
+

查询表中的不同行

+
SELECT DISTINCT c1 FROM t
+WHERE condition
+
+

按升序或降序对结果集排序

+
SELECT c1, c2 FROM t
+ORDER BY c1 ASC [DESC]
+
+

跳过行的偏移并返回下n行

+
SELECT c1, c2 FROM t
+ORDER BY c1 
+LIMIT n OFFSET offset
+
+

使用聚合函数对行进行分组

+
SELECT c1, aggregate(c2)
+FROM t
+GROUP BY c1
+
+

使用HAVING子句筛选组

+
SELECT c1, aggregate(c2)
+FROM t
+GROUP BY c1
+HAVING condition
+
+

从多个表查询

+ +

内部连接 t1 和 t2

+
SELECT c1, c2 
+FROM t1
+INNER JOIN t2 ON condition
+
+

左连接t1和t1

+
SELECT c1, c2 
+FROM t1
+LEFT JOIN t2 ON condition
+
+

右连接t1和t2

+
SELECT c1, c2 
+FROM t1
+RIGHT JOIN t2 ON condition
+
+

执行完全外部连接

+
SELECT c1, c2 
+FROM t1
+FULL OUTER JOIN t2 ON condition
+
+

生成表中行的笛卡尔积

+
SELECT c1, c2 
+FROM t1
+CROSS JOIN t2
+
+

执行交叉连接的另一种方法

+
SELECT c1, c2 
+FROM t1, t2
+
+

使用INNER Join子句将t1连接到自身

+
SELECT c1, c2
+FROM t1 A
+INNER JOIN t1 B ON condition
+
+

使用SQL运算符,合并两个查询中的行

+
SELECT c1, c2 FROM t1
+UNION [ALL]
+SELECT c1, c2 FROM t2
+
+

返回两个查询的交集

+
SELECT c1, c2 FROM t1
+INTERSECT
+SELECT c1, c2 FROM t2
+
+

从另一个结果集中减去一个结果集

+
SELECT c1, c2 FROM t1
+MINUS
+SELECT c1, c2 FROM t2
+
+

使用模式匹配%查询行_

+
SELECT c1, c2 FROM t1
+WHERE c1 [NOT] LIKE pattern
+
+

查询列表中的行

+
SELECT c1, c2 FROM t
+WHERE c1 [NOT] IN value_list
+
+

查询两个值之间的行

+
SELECT c1, c2 FROM t
+WHERE  c1 BETWEEN low AND high
+
+

检查表中的值是否为NULL

+
SELECT c1, c2 FROM t
+WHERE  c1 IS [NOT] NULL
+
+

使用 SQL 约束

+

将c1和c2设置为主键

+
CREATE TABLE t(
+    c1 INT, c2 INT, c3 VARCHAR,
+    PRIMARY KEY (c1,c2)
+);
+
+

将c2列设置为外键

+
CREATE TABLE t1(
+    c1 INT PRIMARY KEY,  
+    c2 INT,
+    FOREIGN KEY (c2) REFERENCES t2(c2)
+);
+
+

使c1和c2中的值唯一

+
CREATE TABLE t(
+    c1 INT, c1 INT,
+    UNIQUE(c2,c3)
+);
+
+

确保c1>0和c1>=c2中的值

+
CREATE TABLE t(
+  c1 INT, c2 INT,
+  CHECK(c1> 0 AND c1 >= c2)
+);
+
+

c2列中的设置值不为NULL

+
CREATE TABLE t(
+     c1 INT PRIMARY KEY,
+     c2 VARCHAR NOT NULL
+);
+
+

修改数据

+

在表格中插入一行

+
INSERT INTO t(column_list)
+VALUES(value_list);
+
+

在表格中插入多行

+
INSERT INTO t(column_list)
+VALUES (value_list), 
+       (value_list),;
+
+

将行从t2插入t1

+
INSERT INTO t1(column_list)
+SELECT column_list
+FROM t2;
+
+

更新列c1中所有行的新值

+
UPDATE t
+SET c1 = new_value;
+
+

更新列c1、c2中与条件匹配的值

+
UPDATE t
+SET c1 = new_value, 
+        c2 = new_value
+WHERE condition;
+
+

删除表中的所有数据

+
DELETE FROM t;
+
+

删除表中的行子集

+
DELETE FROM t
+WHERE condition;
+
+

管理视图

+ +

创建由c1和c2组成的新视图

+
CREATE VIEW v(c1,c2) 
+AS
+SELECT c1, c2
+FROM t;
+
+

使用选中选项创建新视图

+
CREATE VIEW v(c1,c2) 
+AS
+SELECT c1, c2
+FROM t;
+WITH [CASCADED | LOCAL] CHECK OPTION;
+
+

创建递归视图

+
CREATE RECURSIVE VIEW v 
+AS
+select-statement -- anchor part
+UNION [ALL]
+select-statement; -- recursive part
+
+

创建临时视图

+
CREATE TEMPORARY VIEW v 
+AS
+SELECT c1, c2
+FROM t;
+
+

删除视图

+
DROP VIEW view_name;
+
+

管理触发器

+

创建或修改触发器

+
CREATE OR MODIFY TRIGGER trigger_name
+WHEN EVENT
+ON table_name TRIGGER_TYPE
+EXECUTE stored_procedure;
+
+

WHEN

+ + + + + + + + + + + + + + + + + +
:-:-
BEFORE在事件发生前调用
AFTER事件发生后调用
+

EVENT

+ + + + + + + + + + + + + + + + + + + + + +
:-:-
INSERT为INSERT调用
UPDATE调用UPDATE
DELETE调用DELETE
+

TRIGGER_TYPE

+ + + + + + + + + + + + + + + + + +
:-:-
FOR EACH ROW-
FOR EACH STATEMENT-
+

管理索引

+

在t表的c1和c2上创建索引

+
CREATE INDEX idx_name 
+ON t(c1,c2);
+
+

在t表的c3、c4上创建唯一索引

+
CREATE UNIQUE INDEX idx_name
+ON t(c3,c4)
+
+

删除索引

+
DROP INDEX idx_name;
+
+

MySQL 数据类型

+

Strings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--
CHARString (0 - 255)
VARCHARString (0 - 255)
TINYTEXTString (0 - 255)
TEXTString (0 - 65535)
BLOBString (0 - 65535)
MEDIUMTEXTString (0 - 16777215)
MEDIUMBLOBString (0 - 16777215)
LONGTEXTString (0 - 429496­7295)
LONGBLOBString (0 - 429496­7295)
ENUMOne of preset options
SETSelection of preset options
+

Date & time

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Data TypeFormat
DATE yyyy-MM-dd
TIME hh:mm:ss
DATETIME yyyy-MM-dd hh:mm:ss
TIMESTAMPyyyy-MM-dd hh:mm:ss
YEAR yyyy
+

Numeric

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
--
TINYINT xInteger (-128 to 127)
SMALLINT xInteger (-32768 to 32767)
MEDIUMINT xInteger (-8388608 to 8388607)
INT xInteger (-2147­483648 to 214748­3647)
BIGINT xInteger (-9223­372­036­854­775808 to 922337­203­685­477­5807)
FLOATDecimal (precise to 23 digits)
DOUBLEDecimal (24 to 53 digits)
DECIMAL"­DOU­BLE­" stored as string
+

另见

+ +
+ diff --git a/index.html b/index.html index abdcbc8b..4a06517a 100644 --- a/index.html +++ b/index.html @@ -65,6 +65,8 @@ Markdown + +MySQL Swift