MySQL 備忘單

2022-08-04 17:39 更新

SQL 備忘單為您提供了最常用的 SQL 語(yǔ)句供您參考。

開(kāi)始

連接 MySQL

mysql -u <user> -p

mysql [db_name]

mysql -h <host> -P <port> -u <user> -p [db_name]

mysql -h <host> -u <user> -p [db_name]

公共部分

數(shù)據(jù)庫(kù)

create database db ; 創(chuàng)建數(shù)據(jù)庫(kù)
show databases; 列出數(shù)據(jù)庫(kù)
use db; 切換到數(shù)據(jù)庫(kù)
drop database db; 刪除數(shù)據(jù)庫(kù)

數(shù)據(jù)表

show tables; 列出當(dāng)前數(shù)據(jù)庫(kù)的表
show fields from t; 列出表的字段
desc t; 顯示表結(jié)構(gòu)
show create table t; 顯示創(chuàng)建表sql
truncate table t; 刪除表中的所有數(shù)據(jù)
drop table t; 刪除表

進(jìn)程

show processlist; 列出進(jìn)程
kill 進(jìn)程號(hào); 殺死進(jìn)程

其他

exit 或者 \q 退出 MySQL 會(huì)話

備份

創(chuàng)建備份

mysqldump -u user -p db_name > db.sql

導(dǎo)出沒(méi)有架構(gòu)的數(shù)據(jù)庫(kù)

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

恢復(fù)備份

mysql -u user -p db_name < db.sql

MySQL 示例

管理表

創(chuàng)建一個(gè)包含三列的新表

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

從數(shù)據(jù)庫(kù)中刪除表

DROP TABLE t ;

向表中添加一個(gè)新列

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 ;

刪除表中的所有數(shù)據(jù)

TRUNCATE TABLE t;

從表中查詢(xún)數(shù)據(jù)

從表中查詢(xún) c1、c2 列中的數(shù)據(jù)

SELECT c1, c2 FROM t

查詢(xún)表中的所有行和列

SELECT * FROM t

查詢(xún)數(shù)據(jù)并使用條件過(guò)濾行

SELECT c1, c2 FROM t
WHERE condition

從表中查詢(xún)不同的行

SELECT DISTINCT c1 FROM t
WHERE condition

按升序或降序?qū)Y(jié)果集進(jìn)行排序

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

跳過(guò)行的偏移量并返回接下來(lái)的 n 行

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

使用聚合函數(shù)對(duì)行進(jìn)行分組

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

使用 HAVING 子句過(guò)濾組

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

從多個(gè)表查詢(xún)

內(nèi)連接 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

執(zhí)行全外連接

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

生成表中行的笛卡爾積

SELECT c1, c2 
FROM t1
CROSS JOIN t2

另一種執(zhí)行交叉連接的方法

SELECT c1, c2 
FROM t1, t2

使用 INNER JOIN 子句將 t1 連接到自身

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

使用 SQL 運(yùn)算符組合來(lái)自?xún)蓚€(gè)查詢(xún)的行

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

返回兩個(gè)查詢(xún)的交集

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

從另一個(gè)結(jié)果集中減去一個(gè)結(jié)果集

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

使用模式匹配 %, _ 查詢(xún)行

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

查詢(xún)列表中的行

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

查詢(xún)兩個(gè)值之間的行

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 設(shè)置為主鍵

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

將 c2 列設(shè)置為外鍵

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 列中設(shè)置值不為 NULL

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

修改數(shù)據(jù)

在表格中插入一行

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;

刪除表中的所有數(shù)據(jù)

DELETE FROM t;

刪除表中的行子集

DELETE FROM t
WHERE condition;

管理視圖

創(chuàng)建一個(gè)包含 c1 和 c2 的新視圖

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

使用檢查選項(xiàng)創(chuàng)建新視圖

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

創(chuàng)建遞歸視圖

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

創(chuàng)建臨時(shí)視圖

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

刪除視圖

DROP VIEW view_name;

管理觸發(fā)器

創(chuàng)建或修改觸發(fā)器

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

什么時(shí)候調(diào)用

BEFORE 在事件發(fā)生之前調(diào)用
AFTER 事件發(fā)生后調(diào)用

事件

INSERT 調(diào)用 INSERT
UPDATE 調(diào)用更新
DELETE 調(diào)用刪除

觸發(fā)器類(lèi)型

FOR EACH ROW
FOR EACH STATEMENT

管理索引

在 t 表的 c1 和 c2 上創(chuàng)建索引

CREATE INDEX idx_name 
ON t(c1,c2);

在t表的c3、c4上創(chuàng)建唯一索引

CREATE UNIQUE INDEX idx_name
ON t(c3,c4)

刪除索引

DROP INDEX idx_name;

MySQL 數(shù)據(jù)類(lèi)型

字符串

CHAR 字符串 (0 - 255)
VARCHAR 字符串 (0 - 255)
TINYTEXT 字符串 (0 - 255)
TEXT 字符串 (0 - 65535)
BLOB 字符串 (0 - 65535)
MEDIUMTEXT 字符串 (0 - 16777215)
MEDIUMBLOB 字符串 (0 - 16777215)
LONGTEXT 字符串 (0 - 4294967295)
LONGBLOB 字符串 (0 - 4294967295)
ENUM 預(yù)設(shè)選項(xiàng)之一
SET 預(yù)設(shè)選項(xiàng)的選擇

日期時(shí)間

DATE yyyy-MM-dd
TIMEhh:mm:ss
DATETIME yyyy-MM-dd hh:mm:ss
TIMESTAMP yyyy-MM-dd hh:mm:ss
YEAR yyyy

數(shù)值

TINYINT x 整數(shù)(-128 到 127)
SMALLINT x 整數(shù)(-32768 到 32767)
MEDIUMINT x 整數(shù)(-8388608 到 8388607)
INT x 整數(shù)(-2147483648 到 2147483647)
BIGINT x 整數(shù)(-9223372036854775808 到 9223372036854775807)
FLOAT 十進(jìn)制(精確到 23 位)
DOUBLE 十進(jìn)制(24 到 53 位)
DECIMAL “DOUBLE”存儲(chǔ)為字符串

MySQL 函數(shù)和運(yùn)算符

少量

另見(jiàn)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)