本備忘單(dan)旨(zhi)在快速理解 所涉及(ji)的主要(yao)概念,提(ti)供(gong)了最常(chang)用(yong)的SQL語句(ju),供(gong)您參考(kao)。
MySQL 為關(guan)(guan)系(xi)(xi)型數據(ju)庫(ku)(ku)(Relational Database Management System),一個(ge)關(guan)(guan)系(xi)(xi)型數據(ju)庫(ku)(ku)由一個(ge)或數個(ge)表(biao)格組成(cheng),如下所(suo)示的一個(ge)表(biao)格
name ▼ 鍵 ▼ 列(col)
┌┈┈┈┈┬┈┈┈┈┈┈┈┈┬┈┈┈┈┈┈┬┈┈┈┈┈┈┈┐
┆ id ┆ name ┆ uid ┆ level ┆ ? 表頭header
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆ 1 ┆ mysql ┆ 0 ┆ 3 ┆
├┈┈┈┈┼┈┈┈┈┈┈┈┈┤┈┈┈┈┈┈┤┈┈┈┈┈┈┈┤
┆ 2 ┆ redis ┆ 12 ┆ 1 ┆ ? 行 row
└┈┈┈┈┴┈┈┈┈┈┈┈┈┴┈┈┈┈┈┈┴┈┈┈┈┈┈┈┘
redis ▲ 值
表頭(header)
每一列的名稱列(col)
具有相同數據類型的數據的集合行(row)
每一行用來描述某個人/物的具體信息值(value)
行的具體信息,每個值與該列數據類型相同鍵(key)
用來識別某個特定的人/物的方法,有唯一性# 默(mo)認用戶名<root>,-p 是密碼(ma),
# ??參(can)數后面不(bu)需要空格
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]
:- | :- |
---|---|
CREATE DATABASE db ; | 創建 數據庫 |
SHOW DATABASES; | 列出 數據庫 |
USE db; | 切換 到數據庫 |
CONNECT db ; | 切換 到數據庫 |
DROP DATABASE db; | 刪除 數據庫 |
:- | :- |
---|---|
SHOW TABLES; | 列出當前數據庫的表 |
SHOW FIELDS FROM t; | 表的列表字段 |
DESC t; | 顯示表格結構 |
SHOW CREATE TABLE t; | 顯示創建表sql |
TRUNCATE TABLE t; | 刪除表中的所有數據 |
DROP TABLE t; | 刪除表格 |
:- | :- |
---|---|
show processlist; | 列出進程 |
kill pid; | 殺死進程 |
# 顯示(shi)當前(qian)mysql的version的各種(zhong)信息
mysql> status;
# 顯示當(dang)前(qian)mysql的version信息
mysql> select version();
# 查看(kan) MySQL 端口號
mysql> show global variables like 'port';
mysql> exit
退出 quit;
或 \q;
一樣的效果
創建備份
mysqldump -u user -p db_name > db.sql
導出不帶架(jia)構的數據庫(ku)
mysqldump -u user -p db_name --no-data=true --add-drop-table=false > db.sql
恢復備份
mysql -u user -p db_name < db.sql
創建一個包含三列的新表
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重(zhong)命名為t2
ALTER TABLE t1 RENAME TO t2;
將列c1重命名為c2
ALTER TABLE t1 RENAME c1 TO c2 ;
將列c1的數(shu)據類型改(gai)為(wei)datatype
ALTER TABLE t1 MODIFY c1 datatype;
刪除表中的所有數據
TRUNCATE TABLE t;
從(cong)表中查詢列(lie)c1、c2中的數據
SELECT c1, c2 FROM t
查詢表中的所有行和列
SELECT * FROM t
查(cha)詢(xun)數據并使(shi)用條件篩選行
SELECT c1, c2 FROM t
WHERE condition
查詢表中的不同行
SELECT DISTINCT c1 FROM t
WHERE condition
按升序或降序對結果(guo)集排序
SELECT c1, c2 FROM t
ORDER BY c1 ASC [DESC]
跳過行(xing)的偏移并返回下n行(xing)
SELECT c1, c2 FROM t
ORDER BY c1
LIMIT n OFFSET offset
使用(yong)聚合函數對行進行分組
SELECT c1, aggregate(c2)
FROM t
GROUP BY c1
使用HAVING子句篩(shai)選組
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
生成表(biao)中行(xing)的笛卡爾積
SELECT c1, c2
FROM t1
CROSS JOIN t2
執行交叉連接的另一(yi)種方法
SELECT c1, c2
FROM t1, t2
使用INNER Join子句將t1連接到(dao)自身(shen)
SELECT c1, c2
FROM t1 A
INNER JOIN t1 B ON condition
使用SQL運算符,合并兩個(ge)查(cha)詢中的行(xing)
SELECT c1, c2 FROM t1
UNION [ALL]
SELECT c1, c2 FROM t2
返回兩個查詢的交集
SELECT c1, c2 FROM t1
INTERSECT
SELECT c1, c2 FROM t2
從另一(yi)個(ge)結果集中減去一(yi)個(ge)結果集
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
檢查表中的值(zhi)是否(fou)為(wei)NULL
SELECT c1, c2 FROM t
WHERE c1 IS [NOT] NULL
將c1和c2設置為主(zhu)鍵(jian)
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中的(de)值唯一(yi)
CREATE TABLE t(
c1 INT, c1 INT,
UNIQUE(c2,c3)
);
確保c1>0和c1>=c2中(zhong)的值
CREATE TABLE t(
c1 INT, c2 INT,
CHECK(c1> 0 AND c1 >= c2)
);
c2列中的設(she)置(zhi)值(zhi)不為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;
更(geng)新列c1中所有行的新值
UPDATE t
SET c1 = new_value;
更新(xin)列c1、c2中與(yu)條件匹配的(de)值
UPDATE t
SET c1 = new_value,
c2 = new_value
WHERE condition;
刪除表中的所有數據
DELETE FROM t;
刪除表中的行子集
DELETE FROM t
WHERE condition;
創建由(you)c1和c2組成的新(xin)視圖
CREATE VIEW v(c1,c2)
AS
SELECT c1, c2
FROM t;
使(shi)用(yong)選中選項創建(jian)新視(shi)圖
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;
:- | :- |
---|---|
BEFORE | 在事件發生前調用 |
AFTER | 事件發生后調用 |
:- | :- |
---|---|
INSERT | 為INSERT調用 |
UPDATE | 調用UPDATE |
DELETE | 調用DELETE |
:- | :- |
---|---|
FOR EACH ROW | - |
FOR EACH STATEMENT | - |
在t表(biao)的c1和c2上創(chuang)建索引
CREATE INDEX idx_name
ON t(c1,c2);
在t表的c3、c4上創建唯一索(suo)引(yin)
CREATE UNIQUE INDEX idx_name
ON t(c3,c4)
刪除索引
DROP INDEX idx_name;
- | - |
---|---|
CHAR | String (0 - 255) |
VARCHAR | String (0 - 255) |
TINYTEXT | String (0 - 255) |
TEXT | String (0 - 65535) |
BLOB | String (0 - 65535) |
MEDIUMTEXT | String (0 - 16777215) |
MEDIUMBLOB | String (0 - 16777215) |
LONGTEXT | String (0 - 429496-7295) |
LONGBLOB | String (0 - 429496-7295) |
ENUM | One of preset options |
SET | Selection of preset options |
Data Type | Format |
---|---|
DATE | yyyy-MM-dd |
TIME | hh:mm:ss |
DATETIME | yyyy-MM-dd hh:mm:ss |
TIMESTAMP | yyyy-MM-dd hh:mm:ss |
YEAR | yyyy |
- | - |
---|---|
TINYINT x | Integer (-128 to 127) |
SMALLINT x | Integer (-32768 to 32767) |
MEDIUMINT x | Integer (-8388608 to 8388607) |
INT x | Integer (-2147-483648 to 214748-3647) |
BIGINT x | Integer (-9223-372-036-854-775808 to 922337-203-685-477-5807) |
FLOAT | Decimal (precise to 23 digits) |
DOUBLE | Decimal (24 to 53 digits) |
DECIMAL | "-DOU-BLE-" stored as string |