-- 查詢所有列的所有數(shù)據(jù) SELECT * FROM 表名; -- 查詢特定列 SELECT 列1, 列2 FROM 表名; SELECT username, email FROM users; -- 示例 -- 帶條件的查詢 (WHERE) SELECT * FROM 表名 WHERE 條件; SELECT * FROM users WHERE age > 25; -- 示例:年齡大于25的用戶 SELECT * FROM users WHERE username = 'john_doe'; -- 示例:用戶名為 john_doe -- 排序 (ORDER BY) SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC]; -- ASC 升序 (默認(rèn)), DESC 降序 SELECT * FROM users ORDER BY created_at DESC; -- 示例:按創(chuàng)建時間降序(最新在前) -- 限制結(jié)果數(shù)量 (LIMIT) SELECT * FROM 表名 LIMIT 數(shù)量; SELECT * FROM users LIMIT 5; -- 示例:只取前5條 SELECT * FROM users LIMIT 5, 10; -- 示例:跳過前5條,取接下來的10條(常用于分頁) -- 模糊查詢 (LIKE) SELECT * FROM 表名 WHERE 列名 LIKE '模式'; SELECT * FROM users WHERE email LIKE '%@example.com'; -- 示例:查找 example.com 結(jié)尾的郵箱 -- % 代表任意多個字符,_ 代表一個任意字符
更新數(shù)據(jù) (UPDATE)
UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2 WHERE 條件; -- 示例:將用戶 john_doe 的年齡更新為 26 UPDATE users SET age = 26 WHERE username = 'john_doe'; -- **警告:如果不加 WHERE 條件,會更新表中所有記錄!**
刪除數(shù)據(jù) (DELETE)
DELETE FROM 表名 WHERE 條件; -- 示例:刪除用戶名為 bob 的用戶 DELETE FROM users WHERE username = 'bob'; -- **警告:如果不加 WHERE 條件,會刪除表中所有記錄!** -- 清空表(刪除所有數(shù)據(jù),但保留表結(jié)構(gòu))通常使用 TRUNCATE,更快 TRUNCATE TABLE 表名;
五、 用戶與權(quán)限管理**
創(chuàng)建用戶
CREATE USER '用戶名'@'主機(jī)' IDENTIFIED BY '密碼'; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; -- 示例:本地連接 CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; -- 示例:允許任何主機(jī)連接
授予權(quán)限
GRANT 權(quán)限類型 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機(jī)'; -- 示例 1:授予用戶對 mydb 數(shù)據(jù)庫所有表的所有權(quán)限 GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; -- 示例 2:授予用戶對特定表的 SELECT, INSERT, UPDATE 權(quán)限 GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'myuser'@'localhost'; -- 授予權(quán)限后必須刷新權(quán)限 FLUSH PRIVILEGES;
查看用戶權(quán)限
SHOW GRANTS FOR '用戶名'@'主機(jī)';
撤銷權(quán)限
REVOKE 權(quán)限類型 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機(jī)'; REVOKE ALL PRIVILEGES ON mydb.* FROM 'myuser'@'localhost'; -- 示例 FLUSH PRIVILEGES;
刪除用戶
DROP USER '用戶名'@'主機(jī)';
六、 其他實用命令**
查看 MySQL 版本
SELECT VERSION();
顯示當(dāng)前狀態(tài)信息
STATUS;
執(zhí)行 SQL 腳本文件
在 MySQL 命令行中:
SOURCE /path/to/your/file.sql;
在系統(tǒng) Shell 中:
mysql -u root -p 數(shù)據(jù)庫名 < /path/to/your/file.sql
將查詢結(jié)果導(dǎo)出到文件
在 MySQL 命令行中:
SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
(需要 FILE 權(quán)限,且輸出路徑 MySQL 要有寫入權(quán)限)
總結(jié)與注意事項
分號是必須的:絕大多數(shù) SQL 語句必須以分號 ; 結(jié)尾才能執(zhí)行。
大小寫:SQL 關(guān)鍵字(如 SELECT, FROM) 不區(qū)分大小寫。但數(shù)據(jù)庫名、表名、列名在 Linux/Unix 系統(tǒng)下是區(qū)分大小寫的,在 Windows 下不區(qū)分。建議始終保持一致,使用小寫和下劃線是一種好習(xí)慣(如 my_database)。
反引號 “:如果數(shù)據(jù)庫/表/列名是 MySQL 的保留字(如 order, user),必須用反引號括起來。 CREATE TABLE `order` (`id` INT, `user` VARCHAR(50)); -- 正確 CREATE TABLE order (id INT, user VARCHAR(50)); -- 會報錯
WHERE 子句:在執(zhí)行 UPDATE 和 DELETE 時,務(wù)必仔細(xì)檢查 WHERE 條件,否則可能誤修改或誤刪大量數(shù)據(jù)。
-- 查詢所有列的所有數(shù)據(jù) SELECT * FROM 表名; -- 查詢特定列 SELECT 列1, 列2 FROM 表名; SELECT username, email FROM users; -- 示例 -- 帶條件的查詢 (WHERE) SELECT * FROM 表名 WHERE 條件; SELECT * FROM users WHERE age > 25; -- 示例:年齡大于25的用戶 SELECT * FROM users WHERE username = 'john_doe'; -- 示例:用戶名為 john_doe -- 排序 (ORDER BY) SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC]; -- ASC 升序 (默認(rèn)), DESC 降序 SELECT * FROM users ORDER BY created_at DESC; -- 示例:按創(chuàng)建時間降序(最新在前) -- 限制結(jié)果數(shù)量 (LIMIT) SELECT * FROM 表名 LIMIT 數(shù)量; SELECT * FROM users LIMIT 5; -- 示例:只取前5條 SELECT * FROM users LIMIT 5, 10; -- 示例:跳過前5條,取接下來的10條(常用于分頁) -- 模糊查詢 (LIKE) SELECT * FROM 表名 WHERE 列名 LIKE '模式'; SELECT * FROM users WHERE email LIKE '%@example.com'; -- 示例:查找 example.com 結(jié)尾的郵箱 -- % 代表任意多個字符,_ 代表一個任意字符
更新數(shù)據(jù) (UPDATE)
UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2 WHERE 條件; -- 示例:將用戶 john_doe 的年齡更新為 26 UPDATE users SET age = 26 WHERE username = 'john_doe'; -- **警告:如果不加 WHERE 條件,會更新表中所有記錄!**
刪除數(shù)據(jù) (DELETE)
DELETE FROM 表名 WHERE 條件; -- 示例:刪除用戶名為 bob 的用戶 DELETE FROM users WHERE username = 'bob'; -- **警告:如果不加 WHERE 條件,會刪除表中所有記錄!** -- 清空表(刪除所有數(shù)據(jù),但保留表結(jié)構(gòu))通常使用 TRUNCATE,更快 TRUNCATE TABLE 表名;
五、 用戶與權(quán)限管理**
創(chuàng)建用戶
CREATE USER '用戶名'@'主機(jī)' IDENTIFIED BY '密碼'; CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; -- 示例:本地連接 CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword'; -- 示例:允許任何主機(jī)連接
授予權(quán)限
GRANT 權(quán)限類型 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機(jī)'; -- 示例 1:授予用戶對 mydb 數(shù)據(jù)庫所有表的所有權(quán)限 GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost'; -- 示例 2:授予用戶對特定表的 SELECT, INSERT, UPDATE 權(quán)限 GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'myuser'@'localhost'; -- 授予權(quán)限后必須刷新權(quán)限 FLUSH PRIVILEGES;
查看用戶權(quán)限
SHOW GRANTS FOR '用戶名'@'主機(jī)';
撤銷權(quán)限
REVOKE 權(quán)限類型 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機(jī)'; REVOKE ALL PRIVILEGES ON mydb.* FROM 'myuser'@'localhost'; -- 示例 FLUSH PRIVILEGES;
刪除用戶
DROP USER '用戶名'@'主機(jī)';
六、 其他實用命令**
查看 MySQL 版本
SELECT VERSION();
顯示當(dāng)前狀態(tài)信息
STATUS;
執(zhí)行 SQL 腳本文件
在 MySQL 命令行中:
SOURCE /path/to/your/file.sql;
在系統(tǒng) Shell 中:
mysql -u root -p 數(shù)據(jù)庫名 < /path/to/your/file.sql
將查詢結(jié)果導(dǎo)出到文件
在 MySQL 命令行中:
SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
(需要 FILE 權(quán)限,且輸出路徑 MySQL 要有寫入權(quán)限)
總結(jié)與注意事項
分號是必須的:絕大多數(shù) SQL 語句必須以分號 ; 結(jié)尾才能執(zhí)行。
大小寫:SQL 關(guān)鍵字(如 SELECT, FROM) 不區(qū)分大小寫。但數(shù)據(jù)庫名、表名、列名在 Linux/Unix 系統(tǒng)下是區(qū)分大小寫的,在 Windows 下不區(qū)分。建議始終保持一致,使用小寫和下劃線是一種好習(xí)慣(如 my_database)。
反引號 “:如果數(shù)據(jù)庫/表/列名是 MySQL 的保留字(如 order, user),必須用反引號括起來。 CREATE TABLE `order` (`id` INT, `user` VARCHAR(50)); -- 正確 CREATE TABLE order (id INT, user VARCHAR(50)); -- 會報錯
WHERE 子句:在執(zhí)行 UPDATE 和 DELETE 時,務(wù)必仔細(xì)檢查 WHERE 條件,否則可能誤修改或誤刪大量數(shù)據(jù)。