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. 当表被锁时,会导致失败。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章