目錄
添加數據:
方式1:一條一條添加數據:
方式2:將查詢結果插入到表中:
更新數據:
刪除數據:
MySQL8的新特性:計算列:
本文介紹了MySQL數據庫操作語言(DML)的基本使用方法,包括數據添加、更新和刪除操作。重點講解了兩種數據添加方式:單條插入和多條批量插入,并比較了它們的效率差異。同時詳細說明了UPDATE和DELETE語句的使用方法及注意事項,特別強調了WHERE子句的重要性。文章還介紹了MySQL8.0的新特性計算列,該功能允許通過表達式自動生成列值。最后對比了DELETE和TRUNCATE TABLE的區別,指出后者雖然效率更高但不支持回滾,建議謹慎使用。這些操作在實際應用中可能因約束條件導致失敗,使用時需特別注意。
添加數據:
方式1:一條一條添加數據:
未指明添加數據,必須按照字段生命順序添加。
INSERT INTO 表名
VALUES (對應表中的字段名順序進行添加數據值1,數據值2,...
),
(對應表中的字段名順序進行添加數據值1,數據值2,...
),
...
(對應表中的字段名順序進行添加數據值1,數據值2,...
);
插入完整的行,所有的字段,每一個字段都必須提供一個值,如果某個字段沒有值,應該使用NULL,每一個字段必須以表中生命的順序給出。雖然這種語法簡單,但是不安全,應該避免使用。
推薦以下用法:
指明添加字段。
INSERT INTO 表名(字段名1,字段名2,...)
VALUES (對應上面的字段名順序進行添加數據值1,數據值2,...
),
(對應上面的字段名順序進行添加數據值1,數據值2,...
),
...
(對應上面的字段名順序進行添加數據值1,數據值2,...
);
不需要與表中的生命順序相同,沒有值的字段可以不提供數據。
使用INSERT同時插入多條記錄時,MySQL會返回一些在執行單行插入時沒有的額外信息,這些信息含義如下:
Records:表明插入的記錄條數。
Duplicates:表明插入時被忽略的記錄,原因可能是這些記錄包含了重復的主鍵值。
Warnings:表明有問題的數據值。
一個同時插入多行記錄的INSERT語句等于多個單行插入的INSERT語句,但是多行的INSERT語句在處理過程中效率更高。因為MySQL執行單條INSERT語句插入多行數據比使用多條INSERT語句快,所以在插入多條記錄時最好選擇使用單條INSERT語句的方式插入。
字符和日期類型數據應包含在單引號中。
添加數據時,可能會因為約束的原因導致添加數據失敗。
方式2:將查詢結果插入到表中:
SELECT INTO 表名(字段名1,字段名2,...)
SELECT 對應上面的字段數量和類型
FROM 表名
[WHERE 條件];
應該要注意要添加的字段的類型不能低于查詢表中的字段類型,否則可能會出現添加不成功的風險。
更新數據:
UPDATE 表明
SET 字段1 = 修改值,字段2 = 修改值,
...
WHERE 篩選出目標字段的行。
如果未使用HWERE進行篩選目標字段的行,那么該字段所有的值全都會被修改。
修改數據時,可能會存在不成功的情況,可能是因為約束的原因導致的。
刪除數據:
DELETE FROM 表名
WHERE 過濾條件;
由于約束的原因,刪除數據的操作也可能會失敗。
如果刪除數據不進行WHERE篩選,那么則會對進行操作的表進行刪除,但是會保留表的結構。這個功能和TRUNCATE TABLE的功能時相同的,但是區別在于,TRUNCATE TABLE一旦執行操作之后,不能進行回滾,而DELETE TABLE執行操作之后可以進行回滾。TRUNCATE TABLE比DELETE速度快,且使用的系統和事務日志資源少,但是TRUNCATE無事務且不觸發TRIGGER,有可能造成事故,故不建議在開發代碼中使用此語句。
MDL操作默認情況下,執行完之后都會自動提交數據,如果希望執行完成以后,不自動提交數據,則需要使用autocommit = FALSE。
MySQL8的新特性:計算列:
計算列簡單來說就是某一列的值是通過別的列的計算得來的。
例如:a列的值為1,b列的值為2,c列的值不需要手動插入,定義為a+b的結果為c的值,那么c就是計算列,通過別的列計算得來的。
CREATE TABLE 表名(字段名1 數據類型,字段名2 數據類型,字段名3 數據類型 GENERATED ALWAYS AS (字段名1+字段名2) VIRTUAL
);
在MySQL8.0中,CREATE TABLE和ALTER TABLE中都支持增加計算列。