sql-基礎-修改語句

  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='孫劉';

  失敗場景:

  1. 插入值與列的數據類型不匹配,且無法轉換。
  2. 插入值超出列的最大長度
  3. 值的數量與列值不匹配。
  4. 在非null列中插入null值。
  5. 違背唯一性約束,主鍵約束,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選項。

  注意事項:

  1. truncate操作記錄少量的redo日誌,佔用較少的空間。因爲沒有日誌,所以無法回滾。
  2. 不會激活觸發器
  3. 當表被鎖時,會導致失敗。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章