連接數據庫

使用客户端連接數據庫服務器

登錄MySQL:


mysql [-h 主機名或IP地址] [-P 端口號] -u 用户名 -p

參數説明:

-h : 指定客户端所要登錄的 MySQL 主機名, 登錄本機(localhost 或 127.0.0.1)該參數可以省略。

-P : 默認端口號3306。


退出登錄:

exit 或 quit


數據庫

創建數據庫


CREATE DATABASE [IF NOT EXISTS] database_name  
  [[DEFAULT] CHARACTER SET charset_name]
  [[DEFAULT] COLLATE collation_name];


示例:

CREATE DATABASE test_db;


CREATE DATABASE IF NOT EXISTS test_db_char DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_chinese_ci;


查看數據庫

查看所有數據庫

SHOW DATABASES;


查看數據庫創建命令

SHOW CREATE DATABASE database_name;


修改數據庫

ALTER DATABASE database_name CHARACTER SET charset_name;


使用數據庫

USE database_name;


刪除數據庫

DROP DATABASE [IF EXISTS] database_name;

數據表

創建數據表

CREATE TABLE table_name
(
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
)[ENGINE=InnoDB] [DEFAULT CHARSET=utf8] [COLLATE=utf8_general_ci] [AUTO_INCREMENT=n];


數據類型:

數值類型:BIT、TINYINT、SMALLINT、MEDIUMINT、INT或INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL

字符串類型:CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB、ENUM、SET

日期和時間類型:DATE、TIME、YEAR、DATETIME、TIMESTAMP

空間數據類型:GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION


約束:

NOT NULL

DEFAULT

UNIQUE

AUTO_INCREMENT

PRIMARY KEY

FOREIGN KEY  


創建索引

普通索引

CREATE INDEX index_name
ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);


唯一索引

CREATE UNIQUE INDEX index_name
ON table_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);


創建視圖

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;


查看數據表

查看當前數據庫的所有表

SHOW TABLES;


查看數據表創建命令

SHOW CREATE TABLE table_name;


查看數據表的結構

SHOW COLUMNS FROM 數據表:
DESCRIBE 數據表;
DESC 數據表;
EXPLAIN 數據表;


查看數據表的詳細索引信息

SHOW INDEX FROM 數據表:


查看錶信息

SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] \G:

説明: \G 表示查詢結果按列打印


修改數據表

修改表名

ALTER TABLE old_table_name
RENAME [TO] new_table_name;


修改表存儲引擎

ALTER TABLE table_name
ENGINE = 存儲引擎名稱;


添加列

ALTER TABLE table_name
ADD [COLUMN] new_column_name datatype [FIRST | AFTER column_name];


修改列的數據類型

ALTER TABLE TABLE_NAME
MODIFY [COLUMN] column_name new_datatype [FIRST | AFTER column_name];


修改列名

ALTER TABLE table_name
CHANGE [COLUMN] old_column_name new_column_name datatype [FIRST | AFTER column_name];


修改列默認值

ALTER TABLE table_name
ALTER [COLUMN] column_name SET DEFAULT 默認值;


刪除列默認值

ALTER TABLE table_name
ALTER [COLUMN] column_name DROP DEFAULT;


刪除列

ALTER TABLE table_name
DROP [COLUMN] column_name;


添加主鍵

ALTER TABLE table_name
ADD PRIMARY KEY (column_name, ...);


刪除主鍵

ALTER TABLE table_name
DROP PRIMARY KEY;


添加外鍵

ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (column_name)
REFERENCES parent_table (column_name);


刪除外鍵

ALTER TABLE table_name
DROP FOREIGN KEY fk_name;


添加索引

ALTER TABLE table_name
ADD INDEX index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);


添加唯一索引

ALTER table table_name  
ADD CONSTRAINT unique_constraint_name UNIQUE (column1 [ASC|DESC], column2 [ASC|DESC], ...);
ALTER TABLE table_name

ADD UNIQUE [INDEX] index_name (column1 [ASC|DESC], column2 [ASC|DESC], ...);


刪除索引

ALTER TABLE table_name
DROP INDEX index_name;


刪除視圖

DROP VIEW [IF EXISTS] view_name;


刪除索引

DROP INDEX index_name ON table_name;


刪除數據表

DROP TABLE [IF EXISTS] table_name;


數據

插入數據

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


INSERT IGNORE INTO:如果當前插入數據的主鍵(或唯一列)在數據表中已存在,則不插入當前數據;不存在,則插入當前數據。

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


REPLACE INTO:如果表中存在 primary key 或 unique 相同的記錄,則先刪除掉,再插入新記錄;如果不存在相同的記錄,直接插入新記錄。

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


查詢數據

通用查詢:

SELECT [DISTINCT] column_name1, column_name2, ...
FROM table_name
[ WHERE condition ]
[ ORDER BY column_name1 [ASC | DESC] [, column_name2 [ASC | DESC]] ]
[ LIMIT [start,] length]


分組查詢:

SELECT column_name1, aggregate_function(column_name2)
FROM table_name
[ WHERE condition ]
GROUP BY column_name1 [,column_name2]
[ HAVING condition ];

分組查詢説明:

在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函數一起使用。

HAVING 子句可以使用聚合函數篩選分組後的各組數據。


連接 兩個以上的 SELECT 語句的結果 組合到 一個結果集合:

SELECT column1, column2, ...
FROM table1
WHERE condition1

UNION [ALL]

SELECT column1, column2, ...
FROM table2
WHERE condition2

[ORDER BY column1, column2, ...];

説明:

UNION 操作符在合併結果集時會去除重複行,而 UNION ALL 不會去除重複行。

ORDER BY 子句是一個可選的子句,用於指定合併後的結果集的排序順序。


多表查詢-內連接:

SELECT column_name1, column_name2, ...
  FROM table1
  INNER JOIN table2 ON table1.column_name = table2.column_name
[ INNER JOIN table3 ON table1.column_name = table3.column_name ];


多表查詢-左外連接:

SELECT column_name1, column_name2, ...
  FROM table1
  LEFT [OUTER] JOIN table2 ON table1.column_name = table2.column_name
[ LEFT [OUTER] JOIN table3 ON table1.column_name = table3.column_name ];


多表查詢-右外連接:

SELECT column_name1, column_name2, ...
  FROM table1
  RIGHT [OUTER] JOIN table2 ON table1.column_name = table2.column_name
[ RIGHT [OUTER] JOIN table3 ON table1.column_name = table3.column_name ];


多表查詢-笛卡爾積:

SELECT column_name1, column_name2, ...  
  FROM table1  
  CROSS JOIN table2;


直接查詢多表,也會產生笛卡爾積

SELECT column_name1, column_name2, ...  
FROM table1, table2;


更新數據

基礎更新:

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


根據一張表或多張表的數據來更新另一張表的數據:

UPDATE table1 INNER JOIN table2 ON table1.column1 = table2.column2  
SET table1.column2 = table2.column2
[ WHERE condition ];


刪除數據

刪除數據:

DELETE FROM table_name
[ WHERE condition ];


清空表中的所有數據,但不會刪除表本身

TRUNCATE TABLE table_name;


事務

事務

開始一個事務:

BEGIN;  或者 START TRANSACTION;


提交事務:

COMMIT;


回滾事務:

ROLLBACK;


導出、導入數據

導出、導入數據(只包含表數據,不包含表結構)

導出方法:

SELECT column1, column2, ...
FROM table_name
[ WHERE conditions ]
INTO OUTFILE 'file_path'
[ FIELDS TERMINATED BY ','  [OPTIONALLY] ENCLOSED BY '"' ]  
[ LINES TERMINATED BY '\n' ];


導出方法-示例1:

SELECT *  
FROM users  
INTO OUTFILE 'd:/users.txt';


導出方法-示例2:

SELECT *  
FROM users  
INTO OUTFILE 'd:/users.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';


導入方法:

LOAD DATA [LOCAL] INFILE 'file_path' INTO TABLE table_name
[ FIELDS TERMINATED BY ','  [OPTIONALLY] ENCLOSED BY '"' ]  
[ LINES TERMINATED BY '\n' ];

導入説明:

如果指定LOCAL關鍵詞,則表明從客户主機上按路徑讀取文件。如果沒有指定,則在服務器上按路徑讀取文件。


導入方法-示例1:

LOAD DATA LOCAL INFILE 'd:/users.txt' INTO TABLE users;


導出、導入數據(可包含表數據和表結構)

導出方法:

mysqldump -u username -p password -h hostname database_name > output_file.sql


導出方法-示例(導出整個數據庫):

mysqldump -u root -p mydatabase > mydatabase_backup.sql
mysqldump -u root -p mydatabase > D:/mydatabase_backup.txt


導出方法-示例(導出特定表):

mysqldump -u root -p mydatabase mytable > mytable_backup.sql
mysqldump -u root -p mydatabase mytable > mytable_backup.txt


導出方法-示例(只導出結構,不包括數據):

mysqldump -u root -p --no-data mydatabase > output_file.sql
mysqldump -u root -p --no-data mydatabase > output_file.txt


導入方法1(直接在cmd命令行執行):

mysql -u root -p database_name < output_file.sql


導入方法2(通過"mysql -u username -p "進入mysql命令行後執行):

source output_file.sql


用户

修改用户密碼

mysqladmin -u用户名 -p舊密碼 password 新密碼

注意:“-u”和“用户名”直接沒有空格。

mysqladmin可直接在命令行執行,無需使用“mysql -u 用户名 -p ”連接到數據庫服務器後再執行。


用户設置

創建用户

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

説明:

host:指定用户可以從哪些主機連接。例如,localhost 僅允許本地連接,% 允許從任何主機連接。


授權權限

GRANT privileges ON database_name.* TO 'username'@'host';

説明:

privileges:所需的權限,如 ALL PRIVILEGES、SELECT、INSERT、UPDATE、DELETE 等。


刷新權限

FLUSH PRIVILEGES;


查看用户權限

SHOW GRANTS FOR 'username'@'host';


撤銷權限

REVOKE privileges ON database_name.* FROM 'username'@'host';


刪除用户

DROP USER 'username'@'host';


修改用户密碼

ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';


修改用户主機

可以先刪除用户,再重新創建一個新的用户。


觸發器

創建觸發器

DELIMITER &&

CREATE TRIGGER trigger_name

  [BEFORE|AFTER] [INSERT|UPDATE|DELETE]

  ON table_name FOR EACH ROW

BEGIN

  -- 觸發器主體邏輯

  -- 可使用 NEW 和 OLD 訪問新舊數據  
END&&

DELIMITER ;


查看觸發器

查看當前數據庫的所有觸發器:

SHOW TRIGGERS;


查看特定觸發器定義:

SHOW CREATE TRIGGER trigger_name\G;


刪除觸發器

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name;

説明:schema_name指數據庫名。


存儲過程

創建存儲過程

DELIMITER //  -- 臨時修改分隔符(命令行工具中需使用)

CREATE PROCEDURE procedure_name(

    [IN | OUT | INOUT] parameter1 datatype,  -- 輸入/輸出參數,默認值為 IN

    ...

)

BEGIN  
    -- SQL 邏輯(可包含變量聲明、條件判斷、循環等)

    DECLARE local_var INT;  -- 聲明局部變量  
    SET local_var = 10;     -- 變量賦值

    SELECT * FROM table WHERE column = local_var;

END //

DELIMITER ;  -- 恢復默認分隔符


查看存儲過程

查看所有存儲過程:

SHOW PROCEDURE STATUS [LIKE 'pattern'];


查詢指定的存儲過程在創建時的SQL語句:

SHOW CREATE PROCEDURE 存儲過程名稱;


調用存儲過程

CALL 存儲過程名稱([參數]);


刪除存儲過程

DROP PROCEDURE [IF EXISTS] 存儲過程名稱;