MySql常用SQL命令詳解
一、E-R模型
實(shí)體-聯(lián)系模型(E-R模型)提供了一種不受特定數(shù)據(jù)庫管理系統(tǒng)(DBMS)約束的、面向用戶的表達(dá)方法,在數(shù)據(jù)庫設(shè)計(jì)中被廣泛用作數(shù)據(jù)建模工具。在項(xiàng)目開發(fā)中,需提前使用E-R模型繪制ER圖,以確保數(shù)據(jù)庫結(jié)構(gòu)清晰、合理。
DBMS 中的約束是用于強(qiáng)制限制可以插入、更新或刪除到表中的數(shù)據(jù)或數(shù)據(jù)類型的一組規(guī)則。約束的整個(gè)目的是在執(zhí)行更新、刪除或插入操作時(shí)保持?jǐn)?shù)據(jù)的完整性。
約束的類型
- 非空約束 (Not Null Constraint):確保列中的值不能為NULL,防止插入或更新空值。
- 唯一約束 (Unique Constraint):確保表中某一列或多列的值是唯一的,但允許空值存在。
- 默認(rèn)約束 (Default Constraint):為列指定默認(rèn)值,當(dāng)插入新行時(shí)如果沒有為該列提供值,則使用默認(rèn)值。
- 檢查約束 (Check Constraint):定義對(duì)列值的條件限制,確保數(shù)據(jù)滿足特定的條件或范圍。
- 主鍵約束 (Primary Key Constraint):唯一標(biāo)識(shí)表中的每一行數(shù)據(jù),要求值唯一且非空。
- 外鍵約束 (Foreign Key Constraint):確保表之間的引用完整性,要求一個(gè)表的列值必須在另一個(gè)表的主鍵列中存在。
知識(shí)庫中提到的"域約束"實(shí)際上是檢查約束的功能描述,而"映射約束"不是標(biāo)準(zhǔn)的數(shù)據(jù)庫約束類型。數(shù)據(jù)庫中標(biāo)準(zhǔn)的約束類型為上述六種。
二、數(shù)據(jù)類型

三、字段命名規(guī)范
- 命名組成:采用26個(gè)英文字母(區(qū)分大小寫)、0-9數(shù)字(通常不使用)和下劃線
_,確保命名簡(jiǎn)潔明確,多單詞用下劃線分隔(如user_id)。 - 大小寫規(guī)范:統(tǒng)一使用小寫字母(如
is_active,而非IsActive)。 - 禁用關(guān)鍵字:避免使用數(shù)據(jù)庫保留字(如
table、time、datetime、primary)。 - 命名邏輯:字段名應(yīng)為名詞或動(dòng)賓短語(如
user_id、is_valid)。 - 長(zhǎng)度限制:名稱需易讀易懂,通常不超過三個(gè)英文單詞(如
order_date,而非order_creation_timestamp)。
四、數(shù)據(jù)庫創(chuàng)建與管理
4.1 創(chuàng)建數(shù)據(jù)庫
語法:CREATE DATABASE db_name;
示例:CREATE DATABASE db_test;
4.2 刪除數(shù)據(jù)庫
語法:DROP DATABASE db_name;
示例:DROP DATABASE db_test;
4.3 列出數(shù)據(jù)庫
語法:SHOW DATABASES;
示例:SHOW DATABASES;
4.4 備份數(shù)據(jù)庫
語法:mysqldump -h 主機(jī)名 -u 用戶名 -p 密碼 數(shù)據(jù)庫名稱 > 腳本文件路徑;
示例:mysqldump -u root -p000000 test > test.sql;
說明:宿主機(jī)操作可省略
-h參數(shù)(如mysqldump -u root -p000000 test > test.sql;)。
4.5 還原數(shù)據(jù)庫
語法1(命令行):mysql -h 主機(jī)名 -u 用戶名 -p 密碼 數(shù)據(jù)庫名稱 < 腳本文件路徑;
示例1:mysql -u root -p000000 test < test.sql;
語法2(MySQL客戶端):SOURCE 腳本文件路徑;
示例2:SOURCE test.sql;
4.6 使用某個(gè)數(shù)據(jù)庫
語法:USE db_name;
示例:USE db_test;
五、數(shù)據(jù)表創(chuàng)建與管理
5.1 創(chuàng)建表
語法:CREATE TABLE table_name (col_name1 data_type1, col_name2 data_type2, ...);
說明:
data_type中的數(shù)字表示字段長(zhǎng)度(如CHAR(20)表示最多存儲(chǔ) 20 個(gè)字符)。
示例:
CREATE TABLE t_test (id CHAR(20), name CHAR(10));
5.2 查看表結(jié)構(gòu)
DESCRIBE table_name; -- 或簡(jiǎn)寫為 `DESC table_name;`
示例:
DESC t_test;
5.3 查看數(shù)據(jù)表
語法:SHOW TABLES;
示例:
SHOW TABLES;
5.4 復(fù)制表結(jié)構(gòu)
語法:CREATE TABLE new_table_name LIKE old_table_name;
說明:若復(fù)制其他數(shù)據(jù)庫的表,需在 old_table_name 前添加數(shù)據(jù)庫名(如 db_test.t_test)。
示例(復(fù)制 t_test 結(jié)構(gòu)到當(dāng)前庫,命名為 t_test2):
CREATE TABLE t_test2 LIKE t_test;
5.5 復(fù)制表數(shù)據(jù)
表結(jié)構(gòu)一致:
INSERT INTO table_name_new SELECT * FROM table_name_old;
表結(jié)構(gòu)不一致:
INSERT INTO table_name_new (col1, col2) SELECT col1, col2 FROM table_name_old;
5.6 修改表名
語法:ALTER TABLE old_table_name RENAME new_table_name;
示例:
ALTER TABLE t_test1 RENAME t_test2;
5.7 增加字段
語法:
ALTER TABLE table_name ADD col_name data_type;
插入首位:
ALTER TABLE table_name ADD col_name data_type FIRST;
插入指定字段后:
ALTER TABLE table_name ADD col_name data_type AFTER existing_col;
示例(在 t_test 表首位添加 test_address):
ALTER TABLE t_test ADD test_address VARCHAR(255) FIRST;
5.8 刪除字段
語法:ALTER TABLE table_name DROP col_name;
示例:
ALTER TABLE t_test DROP test1;
5.9 修改字段數(shù)據(jù)類型
語法:ALTER TABLE table_name MODIFY col_name new_data_type;
示例(將 test2 類型從 VARCHAR 改為 CHAR(100)):
ALTER TABLE t_test MODIFY test2 CHAR(100);
5.10 修改字段名稱
語法:ALTER TABLE table_name CHANGE old_col_name new_col_name data_type;
示例(將 test_address 改為 address,類型為 CHAR(100)):
ALTER TABLE t_test CHANGE test_address address CHAR(100);
5.11 設(shè)置主鍵
創(chuàng)建表時(shí)設(shè)置:
CREATE TABLE student ( xs_id CHAR(12), xs_name CHAR(10), PRIMARY KEY (xs_id) -- 單字段主鍵 );
CREATE TABLE student ( xs_id CHAR(12), xs_name CHAR(10), PRIMARY KEY (xs_id, xs_name) -- 組合主鍵 );
創(chuàng)建表后設(shè)置:
ALTER TABLE student ADD PRIMARY KEY (xs_id);
5.12 刪除主鍵
語法:ALTER TABLE table_name DROP PRIMARY KEY;
示例:
ALTER TABLE student DROP PRIMARY KEY;
5.13 設(shè)置外鍵
作用:確保引用完整性(如 t_test2.id 必須在 t_test1.id 中存在)。
語法:
ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (foreign_col) REFERENCES referenced_table (primary_col);
示例(將 t_test2.id 設(shè)為外鍵,引用 t_test1.id):
ALTER TABLE t_test2 ADD CONSTRAINT fk1 FOREIGN KEY (id) REFERENCES t_test1(id);
5.14 刪除外鍵
步驟:
- 查找外鍵名:
SHOW CREATE TABLE table_name; - 刪除外鍵:
ALTER TABLE table_name DROP FOREIGN KEY fk_name;
示例:
-- 查看外鍵名 SHOW CREATE TABLE t_test2; -- 刪除外鍵(假設(shè)外鍵名為 fk1) ALTER TABLE t_test2 DROP FOREIGN KEY fk1;
六、數(shù)據(jù)更新操作
6.1 插入記錄(INSERT)
6.1.1 插入單條記錄
語法:
INSERT INTO 表名 [(字段1, 字段2, ...)] VALUES (值1, 值2, ...);
說明:
- 字段列表可選(不指定則需按表結(jié)構(gòu)順序提供所有值)。
- 值類型需與字段數(shù)據(jù)類型匹配。
示例:
-- 插入完整字段 INSERT INTO test (id, name) VALUES (123, 'tt'); -- 插入指定字段(id) INSERT INTO test (id) VALUES (124);
6.1.2 插入多條記錄
語法:
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
示例:
INSERT INTO test VALUES (125, 'ttww'), (126, 'ttwwe'), (127, 'ttqqq');
6.1.3 子查詢插入多條記錄
語法:
INSERT INTO 表名1 [(字段1, 字段2, ...)] SELECT 字段1, 字段2, ... FROM 表名2 [WHERE 條件];
說明:
- 目標(biāo)表字段與查詢字段數(shù)量、類型需一致。
示例:
-- 插入所有字段 INSERT INTO test1 SELECT * FROM test2; -- 插入指定字段 INSERT INTO test1 (id, name) SELECT id, name FROM test2;
6.2 刪除記錄(DELETE)
語法:
DELETE FROM 表名 WHERE 條件;
說明:
- 必須指定
WHERE條件!否則會(huì)刪除整表數(shù)據(jù)。
示例:
-- 刪除所有記錄(危險(xiǎn)!慎用) DELETE FROM test; -- 刪除指定條件記錄 DELETE FROM test WHERE id = 123;
6.3 更新記錄(UPDATE)
語法:
UPDATE 表名 SET 字段1 = 值1, 字段2 = 值2, ... WHERE 條件;
說明:
- 必須指定
WHERE條件!否則會(huì)更新整表數(shù)據(jù)。
示例:
-- 更新指定條件的記錄 UPDATE test SET name = 'new_name' WHERE id = 123; -- 同時(shí)更新多字段 UPDATE test SET name = 'updated', status = 1 WHERE id = 124;
?? 重要提示
| 操作 | 未指定 WHERE 的后果 |
|---|---|
DELETE | 清空整表(不可逆?。?/td> |
UPDATE | 全表字段被覆蓋(數(shù)據(jù)丟失) |
建議:執(zhí)行前先用
SELECT驗(yàn)證條件,或在測(cè)試環(huán)境操作。
七、數(shù)據(jù)查詢操作
7.1 單表查詢
7.1.1 基礎(chǔ)語法
SELECT [列名1, 列名2, ... | *] [AS 別名] FROM 表名;
- 通配符
*:匹配所有列 - 別名
AS:為字段/結(jié)果指定臨時(shí)名稱(如name AS 姓名)
示例:
SELECT id, name AS 姓名 FROM test; -- 為name字段取別名 SELECT * FROM test; -- 查詢所有列
7 .1.2 條件過濾(WHERE)
| 關(guān)鍵字 | 作用 | 示例 |
|---|---|---|
AND/OR | 連接多個(gè)條件 | WHERE age > 20 AND salary > 5000 |
BETWEEN ... AND | 范圍查詢 | WHERE price BETWEEN 100 AND 200 |
IS NULL | 查詢空值 | WHERE email IS NULL |
IN | 查詢集合中值 | WHERE city IN ('北京', '上海') |
LIKE | 模糊查詢 | WHERE name LIKE '張%'(以張開頭) |
通配符:
%:匹配任意長(zhǎng)度字符(如name LIKE '%明%')_:匹配單個(gè)字符(如name LIKE '張_')
7.1.3 排序(ORDER BY)
SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC];
- 默認(rèn)升序(ASC),
DESC為降序
示例:
SELECT * FROM books ORDER BY price DESC; -- 按價(jià)格降序
7.1.4 聚集函數(shù)
| 函數(shù) | 作用 | 示例 |
|---|---|---|
COUNT() | 計(jì)數(shù) | SELECT COUNT(*) FROM books; |
MAX() | 最大值 | SELECT MAX(price) FROM books; |
MIN() | 最小值 | SELECT MIN(price) FROM books; |
SUM() | 求和 | SELECT SUM(salary) FROM employees; |
AVG() | 平均值 | SELECT AVG(age) FROM students; |
7.1.5 分組(GROUP BY)
SELECT 聚集函數(shù)(列), 分組列 FROM 表名 GROUP BY 分組列;
示例(統(tǒng)計(jì)出版社圖書數(shù)量):
SELECT COUNT(*), pressName FROM books GROUP BY pressName;
結(jié)果說明:
pressName為 “人民郵電出版社” 的記錄數(shù) = 1,“清華大學(xué)出版社” = 6。
7.2 連接查詢
7.2.1 簡(jiǎn)單連接(逗號(hào)分隔)
SELECT 表1.列, 表2.列 FROM 表1, 表2 WHERE 表1.關(guān)聯(lián)列 = 表2.關(guān)聯(lián)列;
示例:
SELECT b.reader_id, br.book_name FROM books b, borrow_record br WHERE b.ISBN = br.ISBN;
7.2.2 JOIN 連接
| 類型 | 語法 | 說明 |
|---|---|---|
| 內(nèi)連接 | SELECT * FROM 表1 INNER JOIN 表2 ON 條件; | 僅返回匹配的記錄 |
| 左連接 | SELECT * FROM 表1 LEFT JOIN 表2 ON 條件; | 保留左表所有記錄 |
| 右連接 | SELECT * FROM 表1 RIGHT JOIN 表2 ON 條件; | 保留右表所有記錄 |
示例(左連接):
SELECT * FROM books b LEFT JOIN borrow_record br ON b.ISBN = br.ISBN;
?? 注意:
ON用于指定連接條件,不可用WHERE替代(否則會(huì)丟失左表空值記錄)。
7.3 嵌套查詢(子查詢)
**7.3.1 IN 謂語
SELECT * FROM 表1 WHERE 列名 IN (SELECT 列名 FROM 表2 WHERE 條件);
示例:
SELECT * FROM books WHERE isbn IN (SELECT isbn FROM borrow_record WHERE reader_id = '201801');
7.3.2 比較運(yùn)算符
SELECT * FROM 表1 WHERE 列名 > (SELECT 列名 FROM 表2 WHERE 條件);
示例:
SELECT * FROM books WHERE isbn = (SELECT isbn FROM borrow_record WHERE reader_id = '201801');
7.3.3ANY/ALL謂語
SELECT * FROM 表1 WHERE 列名 > ANY (SELECT 列名 FROM 表2 WHERE 條件);
示例(查詢未借閱的圖書):
SELECT * FROM books WHERE isbn <> ALL (SELECT isbn FROM borrow_record WHERE reader_id = '201801');
7.3.4EXISTS謂語
SELECT * FROM 表1 WHERE NOT EXISTS (SELECT 1 FROM 表2 WHERE 表1.列 = 表2.列 AND 條件);
示例(查詢未借閱的圖書):
SELECT * FROM books WHERE NOT EXISTS ( SELECT 1 FROM borrow_record WHERE isbn = books.isbn AND reader_id = '201801' );
7.4 合并查詢(UNION)
作用:合并兩個(gè)查詢結(jié)果(去重)
SELECT 列 FROM 表1 UNION SELECT 列 FROM 表2;
示例:
SELECT * FROM t_major1 UNION SELECT * FROM t_major;
要求:
- 兩個(gè)查詢的列數(shù)和數(shù)據(jù)類型必須一致
- 默認(rèn)去重,用
UNION ALL保留重復(fù)項(xiàng)
?? 關(guān)鍵安全提示
| 操作 | 風(fēng)險(xiǎn) | 避免方法 |
|---|---|---|
SELECT * | 傳輸冗余數(shù)據(jù),影響性能 | 顯式指定所需字段 |
無條件 DELETE/UPDATE | 清空整表數(shù)據(jù) | 必須添加 WHERE 條件 |
| 嵌套查詢未優(yōu)化 | 慢查詢導(dǎo)致數(shù)據(jù)庫阻塞 | 確保子查詢返回結(jié)果集小 |
最佳實(shí)踐:
- 單表查詢避免
SELECT *,只選必要字段- 連接查詢優(yōu)先用
JOIN語法(清晰、性能高)- 嵌套查詢用
EXISTS替代IN(大數(shù)據(jù)集性能更好)
到此這篇關(guān)于MySql常用SQL命令的文章就介紹到這了,更多相關(guān)mysql sql命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于InnoDB索引的底層實(shí)現(xiàn)和實(shí)際效果
這篇文章主要介紹了關(guān)于InnoDB索引的底層實(shí)現(xiàn)和實(shí)際效果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
MySQL語句之刪除指令deleted和truncate在使用中的異同詳解
這篇文章主要介紹了MySQL語句之刪除指令deleted和truncate在使用中的異同,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問題解決
本文主要介紹了MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Mysql join聯(lián)表及id自增實(shí)例解析
這篇文章主要介紹了Mysql join聯(lián)表及id自增實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
weblogic服務(wù)建立數(shù)據(jù)源連接測(cè)試更新mysql驅(qū)動(dòng)包的問題及解決方法
WebLogic是用于開發(fā)、集成、部署和管理大型分布式Web應(yīng)用、網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用的Java應(yīng)用服務(wù)器,這篇文章主要介紹了weblogic服務(wù)建立數(shù)據(jù)源連接測(cè)試更新mysql驅(qū)動(dòng)包,需要的朋友可以參考下2022-01-01
Mysql 默認(rèn)字符集設(shè)置方法(免安裝版)
有些時(shí)候我們?cè)谑褂梅前惭b版的mysql是需要設(shè)置默認(rèn)字符集的時(shí)候,就需要這樣的修改了。安裝版的可以選擇的。2009-03-03
解決找回mysql數(shù)據(jù)庫密碼和密碼過期問題
這篇文章主要介紹了解決找回mysql數(shù)據(jù)庫密碼和密碼過期問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
mysql常用日期時(shí)間/數(shù)值函數(shù)詳解(必看)
下面小編就為大家?guī)硪黄猰ysql常用日期時(shí)間/數(shù)值函數(shù)詳解(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06

