最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySql常用SQL命令詳解

 更新時(shí)間:2026年01月06日 09:18:12   作者:Anthony_hui  
本文詳細(xì)介紹了MySQL數(shù)據(jù)庫(kù)的基本概念和常用SQL命令,包括數(shù)據(jù)庫(kù)和表的創(chuàng)建與管理、數(shù)據(jù)更新操作、數(shù)據(jù)查詢操作等,重點(diǎn)涵蓋了E-R模型、數(shù)據(jù)類型、字段命名規(guī)范、約束類型、數(shù)據(jù)表的增刪改查、以及復(fù)雜的查詢?nèi)邕B接查詢和嵌套查詢,感興趣的朋友跟隨小編一起看看吧

一、E-R模型

實(shí)體-聯(lián)系模型(E-R模型)提供了一種不受特定數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)約束的、面向用戶的表達(dá)方法,在數(shù)據(jù)庫(kù)設(shè)計(jì)中被廣泛用作數(shù)據(jù)建模工具。在項(xiàng)目開發(fā)中,需提前使用E-R模型繪制ER圖,以確保數(shù)據(jù)庫(kù)結(jié)構(gòu)清晰、合理。
DBMS 中的約束是用于強(qiáng)制限制可以插入、更新或刪除到表中的數(shù)據(jù)或數(shù)據(jù)類型的一組規(guī)則。約束的整個(gè)目的是在執(zhí)行更新、刪除或插入操作時(shí)保持?jǐn)?shù)據(jù)的完整性。

約束的類型

  1. 非空約束 (Not Null Constraint):確保列中的值不能為NULL,防止插入或更新空值。
  2. 唯一約束 (Unique Constraint):確保表中某一列或多列的值是唯一的,但允許空值存在。
  3. 默認(rèn)約束 (Default Constraint):為列指定默認(rèn)值,當(dāng)插入新行時(shí)如果沒(méi)有為該列提供值,則使用默認(rèn)值。
  4. 檢查約束 (Check Constraint):定義對(duì)列值的條件限制,確保數(shù)據(jù)滿足特定的條件或范圍。
  5. 主鍵約束 (Primary Key Constraint):唯一標(biāo)識(shí)表中的每一行數(shù)據(jù),要求值唯一且非空。
  6. 外鍵約束 (Foreign Key Constraint):確保表之間的引用完整性,要求一個(gè)表的列值必須在另一個(gè)表的主鍵列中存在。

知識(shí)庫(kù)中提到的"域約束"實(shí)際上是檢查約束的功能描述,而"映射約束"不是標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)約束類型。數(shù)據(jù)庫(kù)中標(biāo)準(zhǔn)的約束類型為上述六種。

二、數(shù)據(jù)類型

三、字段命名規(guī)范

  1. 命名組成:采用26個(gè)英文字母(區(qū)分大小寫)、0-9數(shù)字(通常不使用)和下劃線_,確保命名簡(jiǎn)潔明確,多單詞用下劃線分隔(如user_id)。
  2. 大小寫規(guī)范:統(tǒng)一使用小寫字母(如is_active,而非IsActive)。
  3. 禁用關(guān)鍵字:避免使用數(shù)據(jù)庫(kù)保留字(如table、time、datetime、primary)。
  4. 命名邏輯:字段名應(yīng)為名詞或動(dòng)賓短語(yǔ)(如user_id、is_valid)。
  5. 長(zhǎng)度限制:名稱需易讀易懂,通常不超過(guò)三個(gè)英文單詞(如 order_date,而非 order_creation_timestamp)。

四、數(shù)據(jù)庫(kù)創(chuàng)建與管理

4.1 創(chuàng)建數(shù)據(jù)庫(kù)

語(yǔ)法CREATE DATABASE db_name;
示例CREATE DATABASE db_test;

4.2 刪除數(shù)據(jù)庫(kù)

語(yǔ)法DROP DATABASE db_name;
示例DROP DATABASE db_test;

4.3 列出數(shù)據(jù)庫(kù)

語(yǔ)法SHOW DATABASES;
示例SHOW DATABASES;

4.4 備份數(shù)據(jù)庫(kù)

語(yǔ)法mysqldump -h 主機(jī)名 -u 用戶名 -p 密碼 數(shù)據(jù)庫(kù)名稱 > 腳本文件路徑;
示例mysqldump -u root -p000000 test > test.sql;

說(shuō)明:宿主機(jī)操作可省略-h參數(shù)(如mysqldump -u root -p000000 test > test.sql;)。

4.5 還原數(shù)據(jù)庫(kù)

語(yǔ)法1(命令行)mysql -h 主機(jī)名 -u 用戶名 -p 密碼 數(shù)據(jù)庫(kù)名稱 < 腳本文件路徑;
示例1mysql -u root -p000000 test < test.sql;
語(yǔ)法2(MySQL客戶端)SOURCE 腳本文件路徑;
示例2SOURCE test.sql;

4.6 使用某個(gè)數(shù)據(jù)庫(kù)

語(yǔ)法USE db_name;
示例USE db_test;

五、數(shù)據(jù)表創(chuàng)建與管理

5.1 創(chuàng)建表

語(yǔ)法CREATE TABLE table_name (col_name1 data_type1, col_name2 data_type2, ...);
說(shuō)明

  • 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ù)表

語(yǔ)法SHOW TABLES;
示例

SHOW TABLES;

5.4 復(fù)制表結(jié)構(gòu)

語(yǔ)法CREATE TABLE new_table_name LIKE old_table_name;
說(shuō)明:若復(fù)制其他數(shù)據(jù)庫(kù)的表,需在 old_table_name 前添加數(shù)據(jù)庫(kù)名(如 db_test.t_test)。
示例(復(fù)制 t_test 結(jié)構(gòu)到當(dāng)前庫(kù),命名為 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 修改表名

語(yǔ)法ALTER TABLE old_table_name RENAME new_table_name;
示例

ALTER TABLE t_test1 RENAME t_test2;

5.7 增加字段

語(yǔ)法

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 刪除字段

語(yǔ)法ALTER TABLE table_name DROP col_name;
示例

ALTER TABLE t_test DROP test1;

5.9 修改字段數(shù)據(jù)類型

語(yǔ)法ALTER TABLE table_name MODIFY col_name new_data_type;
示例(將 test2 類型從 VARCHAR 改為 CHAR(100)):

ALTER TABLE t_test MODIFY test2 CHAR(100);

5.10 修改字段名稱

語(yǔ)法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 刪除主鍵

語(yǔ)法ALTER TABLE table_name DROP PRIMARY KEY;
示例

ALTER TABLE student DROP PRIMARY KEY;

5.13 設(shè)置外鍵

作用:確保引用完整性(如 t_test2.id 必須在 t_test1.id 中存在)。
語(yǔ)法

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 刪除外鍵

步驟

  1. 查找外鍵名:SHOW CREATE TABLE table_name;
  2. 刪除外鍵: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 插入單條記錄

語(yǔ)法

INSERT INTO 表名 [(字段1, 字段2, ...)] VALUES (值1, 值2, ...);

說(shuō)明

  • 字段列表可選(不指定則需按表結(jié)構(gòu)順序提供所有值)。
  • 值類型需與字段數(shù)據(jù)類型匹配。
    示例
-- 插入完整字段
INSERT INTO test (id, name) VALUES (123, 'tt');
-- 插入指定字段(id)
INSERT INTO test (id) VALUES (124);

6.1.2 插入多條記錄

語(yǔ)法

INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), ...;

示例

INSERT INTO test VALUES 
(125, 'ttww'), 
(126, 'ttwwe'), 
(127, 'ttqqq');

6.1.3 子查詢插入多條記錄

語(yǔ)法

INSERT INTO 表名1 [(字段1, 字段2, ...)] 
SELECT 字段1, 字段2, ... 
FROM 表名2 [WHERE 條件];

說(shuō)明

  • 目標(biāo)表字段與查詢字段數(shù)量、類型需一致。
    示例
-- 插入所有字段
INSERT INTO test1 SELECT * FROM test2;
-- 插入指定字段
INSERT INTO test1 (id, name) SELECT id, name FROM test2;

6.2 刪除記錄(DELETE)

語(yǔ)法

DELETE FROM 表名 WHERE 條件;

說(shuō)明

  • 必須指定 WHERE 條件!否則會(huì)刪除整表數(shù)據(jù)。
    示例
-- 刪除所有記錄(危險(xiǎn)!慎用)
DELETE FROM test;
-- 刪除指定條件記錄
DELETE FROM test WHERE id = 123;

6.3 更新記錄(UPDATE)

語(yǔ)法

UPDATE 表名 
SET 字段1 = 值1, 字段2 = 值2, ... 
WHERE 條件;

說(shuō)明

  • 必須指定 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清空整表(不可逆!)
UPDATE全表字段被覆蓋(數(shù)據(jù)丟失)

建議:執(zhí)行前先用 SELECT 驗(yàn)證條件,或在測(cè)試環(huán)境操作。

七、數(shù)據(jù)查詢操作

7.1 單表查詢

7.1.1 基礎(chǔ)語(yǔ)法

SELECT [列名1, 列名2, ... | *] [AS 別名] FROM 表名;
  • 通配符 *:匹配所有列
  • 別名 AS:為字段/結(jié)果指定臨時(shí)名稱(如 name AS 姓名

示例

SELECT id, name AS 姓名 FROM test;  -- 為name字段取別名
SELECT * FROM test;                 -- 查詢所有列

7 .1.2 條件過(guò)濾(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é)果說(shuō)明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 連接

類型語(yǔ)法說(shuō)明
內(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 謂語(yǔ)

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謂語(yǔ)

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謂語(yǔ)

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;

要求

  1. 兩個(gè)查詢的列數(shù)和數(shù)據(jù)類型必須一致
  2. 默認(rèn)去重,用 UNION ALL 保留重復(fù)項(xiàng)

?? 關(guān)鍵安全提示

操作風(fēng)險(xiǎn)避免方法
SELECT *傳輸冗余數(shù)據(jù),影響性能顯式指定所需字段
無(wú)條件 DELETE/UPDATE清空整表數(shù)據(jù)必須添加 WHERE 條件
嵌套查詢未優(yōu)化慢查詢導(dǎo)致數(shù)據(jù)庫(kù)阻塞確保子查詢返回結(jié)果集小

最佳實(shí)踐

  1. 單表查詢避免 SELECT *,只選必要字段
  2. 連接查詢優(yōu)先用 JOIN 語(yǔ)法(清晰、性能高)
  3. 嵌套查詢用 EXISTS 替代 IN(大數(shù)據(jù)集性能更好)

到此這篇關(guān)于MySql常用SQL命令的文章就介紹到這了,更多相關(guān)mysql sql命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

富蕴县| 青海省| 兖州市| 嘉鱼县| 淄博市| 玉环县| 潍坊市| 新晃| 崇明县| 尤溪县| 万载县| 香河县| 基隆市| 玛纳斯县| 浮山县| 遂宁市| 应用必备| 德钦县| 鄂伦春自治旗| 玉林市| 澄城县| 汉寿县| 鄂伦春自治旗| 纳雍县| 芦山县| 札达县| 临潭县| 永康市| 西峡县| 昌宁县| 株洲县| 扎赉特旗| 霍邱县| 辽宁省| 太保市| 明光市| 突泉县| 东丽区| 谢通门县| 钟山县| 安吉县|