insert,update,delete,truncate語句。
1、insert
格式:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] [[database_name.]owner.]table_name
[(column1[, ...])]
[PARTITION (partition_name[, partition_name] ...)]
{VALUES | VALUE ( [ROW] {value1 | DEFAULT}[, ...] ) [, [ROW](,...)] |
(select_statement SET [ON DUPLICATE KEY UPDATE]
column1=value1, column2=value2[, ...]})
說明:
LOW_PRIORITY | DELAYED | HIGH PRIORITY: 低優先級, 當沒有任何客戶端讀取該表時,才選擇插入,可能會導致很長的延遲。DELAYED,相當於異步執行,允許客戶端繼續執行其他腳本無需等待insert結束。HIGH PRIORITY,取消低優先級帶來的影響,本身不會提高性能。
IGNORE: 忽略非致命性的錯誤,例如插入重複的行。
into [[database_name.]owner.]table_name: 數據庫的名稱,用戶的名稱,表的名稱,前兩者可以忽略。
VALUES | VALUE ( [ROW] {value1 | DEFAULT}[, ...] ) [, [ROW](,...)]: values插入多條, value插入一條, default設置默認值。
select_statement:查詢語句, 與values | value爲互斥關係。
set column1 = val1, column2= val2: 與select_statement, values互斥,直接設置字符串常量。
on duplicate key update (column1=value1): 當主鍵衝突時,執行更新操作。
示例:
insert into learn_alter set id=62, name='王五', log_date ='2023-01-01' on duplicate key update name='孫劉';
失敗場景:
- 插入值與列的數據類型不匹配,且無法轉換。
- 插入值超出列的最大長度
- 值的數量與列值不匹配。
- 在非null列中插入null值。
- 違背唯一性約束,主鍵約束,check約束等其他約束。
2、update
格式:
UPDATE [LOW PRIORITY] [IGNORE] table_references
SET [table_alias.]column_name = {scalar_expression} [, ...]
WHERE search_conditions
[ORDER BY column_name1 [{ASC | DESC}][, ...]]
[LIMIT int]
說明:
low priority與ignore與delete語句中的含義完全相同,略。在使用更新語句之前,最好先查詢一下所更新的數據。
3、delete
格式:
DELETE [LOW_PRIORITY] [QUICK][IGNORE] [table_name[.*][, ...]]
{FROM table_name[.*][, ...] | [USING table_name[.*][, ...]]}
[PARTITION (partition_name[, ...])]
[WHERE search_condition]
[ORDER BY clause]
[LIMIT nbr_of_rows]
說明:
low_priority: 延遲delete的操作,直到沒有任何客戶端讀取該表
quick: 快速刪除,在刪除過程中忽略索引中的相關操作。這會導致刪除之後,索引中的數據與表數據不一致,除非大量刪除,重新創建索引時使用此項。
ignore: 在刪除過程中,忽略非致命性的錯誤,例如外鍵關聯。
from table_name using table_names: from語句指定被刪除的表,using語句指定關聯的表, delete中的where語句也可以使用關聯.
table_name from table_names: table_name指定被刪除的表,table_names指定關聯的表。
order by clause: 指定排序,只有當存在limit語句時纔有意義。
limit number of rows:指定刪除的條數。
示例:
delete orders from customers, orders where customers.id = orders.customer_id and orders.date between ‘2020-01-01’ and ‘2020-12-31’;
delete from orders where statement order by statement limit N, 任意的where條件, 排序方式,條數。
4、truncate
格式:
TRUNCATE TABLE table_name [CONTINUE IDENTITY | RESTART IDENTITY]
continue或restart表示若表中有自增列時,重置爲起始值。Mysql中truncate table等價於truncate table restart identity,不支持continue選項。
注意事項:
- truncate操作記錄少量的redo日誌,佔用較少的空間。因爲沒有日誌,所以無法回滾。
- 不會激活觸發器
- 當表被鎖時,會導致失敗。