SQL之数据更新
文章目录数据插入INSERT语句从其他表中复制数据INSERT ... SELECT语句数据备份数据删除DELETE语句指定删除对象的DELETE语句搜索型DELETE数据更新UPDATE语句指定条件的UPDATE语句搜索型UPDATE多列更新事务数据插入INSERT语句使用INSERT语句可以向表中插入数据行。原则上INSERT语句每次执行一行数据的插入。● 将列名和值用逗号隔开分别括在内这种形式称为清单。● 对表中所有列进行INSERT操作时可以省略表名后的列清单。● 插入NULL时需要在VALUES子句的值清单中写入NULL。● 可以为表中的列设定默认值初始值默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定。● 插入默认值可以通过两种方式实现即在INSERT语句的VALUES子句中指定DEFAULT关键字显式方法或省略列清单隐式方法。● 使用INSERT…SELECT可以从其他表中复制数据。INSERTINTO表名(列1,列2,列3,……)VALUES(值1,值2,值3,……);-- 向表中插入一行数据INSERTINTOProductIns(product_id,product_name,product_type,sale_price,purchase_price,regist_date)VALUES(0001,T恤衫,衣服,1000,500,2009-09-20);表名后面的列清单和 VALUES 子句中的值清单的列数必须保持一致,但是使用默认值时列数无需完全一致-- 包含列清单INSERTINTOProductIns(product_id,product_name,product_type, sale_price,purchase_price,regist_date)VALUES(0005,高压锅,厨房用具,6800,5000,2009-01-15);-- 省略列清单INSERTINTOProductInsVALUES(0005,高压锅,厨房用具,6800,5000,2009-01-15);-- 通常的INSERTINSERTINTOProductInsVALUES(0002,打孔器,办公用品,500,320,2009-09-11);INSERTINTOProductInsVALUES(0003,运动T恤,衣服,4000,2800,NULL);INSERTINTOProductInsVALUES(0004,菜刀,厨房用具,3000,2800,2009-09-20);-- 多行INSERT Oracle以外INSERTINTOProductInsVALUES(0002,打孔器,办公用品,500,320,2009-09-11),(0003,运动T恤,衣服,4000,2800,NULL),(0004,菜刀,厨房用具,3000,2800,2009-09-20);-- Oracle中的多行INSERTINSERTALLINTOProductInsVALUES(0002,打孔器,办公用品,500,320,2009-09-11)INTOProductInsVALUES(0003,运动T恤,衣服,4000,2800,NULL)INTOProductInsVALUES(0004,菜刀,厨房用具,3000,2800,2009-09-20)SELECT*FROMDUAL;默认值的使用方法通常有显式和隐式两种。-- 通过显式方法插入默认值在 VALUES 子句中指定 DEFAULT 关键字建议使用INSERTINTOProductIns(product_id,product_name,product_type,sale_price,purchase_price,regist_date)VALUES(0007,擦菜板,厨房用具,DEFAULT,790,2009-04-28);-- 通过隐式方法设定默认值在列清单和VALUES 中省略设定了默认值的列INSERTINTOProductIns(product_id,product_name,product_type,purchase_price,regist_date)VALUES(0007,擦菜板,厨房用具,790,2009-04-28);省略INSERT语句中的列名就会自动设定为该列的默认值没有默认值时会设定为NULL。从其他表中复制数据INSERT … SELECT语句数据备份INSERT语句的SELECT语句中可以使用WHERE子句或者GROUP BY子句等任何 SQL语法但使用ORDER BY子句并不会产生任何效果。-- 将商品表中的数据复制到商品复制表中INSERTINTOProductCopy(product_id,product_name,product_type,sale_price,purchase_price,regist_date)SELECTproduct_id,product_name,product_type,sale_price,purchase_price,regist_dateFROMProduct;-- 插入其他表中数据合计值的INSERT ... SELECT语句INSERTINTOProductType(product_type,sum_sale_price,sum_purchase_price)SELECTproduct_type,SUM(sale_price),SUM(purchase_price)FROMProductGROUPBYproduct_type;数据删除DELETE语句DELETE语句的删除对象并不是表或者列而是记录行。-- 保留数据表仅删除全部数据行的DELETE语句DELETEFROM表名;-- 清空Product表DELETEFROMProduct;指定删除对象的DELETE语句搜索型DELETE可以通过WHERE子句指定对象条件来删除部分数据。DELETE 语句中不能使用 GROUP BY、HAVING 和 ORDER BY 三类子句而只能使用WHERE 子句-- 删除部分数据行的搜索型DELETEDELETEFROM表名WHERE条件;-- 删除销售单价sale_price大于等于4000元的数据DELETEFROMProductWHEREsale_price4000;数据更新UPDATE语句● 使用UPDATE语句可以更改更新表中的数据。● 更新部分数据行时可以使用WHERE来指定更新对象的条件。通过WHERE子句指定更新对象的UPDATE语句称为搜索型UPDATE语句。● UPDATE语句可以将列的值更新为NULL。● 同时更新多列时可以在UPDATE语句的SET子句中使用逗号分隔更新对象的多个列。-- 改变表中数据的UPDATE语句UPDATE表名SET列名表达式;-- 将登记日期全部更新为“2009-10-10”UPDATEProductSETregist_date2009-10-10;指定条件的UPDATE语句搜索型UPDATE-- 更新部分数据行的搜索型UPDATEUPDATE表名SET列名表达式WHERE条件;-- 将商品种类为厨房用具的记录的销售单价更新为原来的10倍UPDATEProductSETsale_pricesale_price*10WHEREproduct_type厨房用具;## NULL 清空sql-- 将商品编号为0008的数据圆珠笔的登记日期更新为NULLUPDATEProductSETregist_dateNULLWHEREproduct_id0008;使用UPDATE语句可以将值清空为NULL但只限于未设置NOT NULL约束的列。多列更新-- 使用逗号对列进行分隔排列在所有的 DBMS 中都可以使用实际应用中通常都会使用UPDATEProductSETsale_pricesale_price*10,purchase_pricepurchase_price/2WHEREproduct_type厨房用具;-- 将列用()括起来的清单形式UPDATEProductSET(sale_price,purchase_price)(sale_price*10,purchase_price/2)WHEREproduct_type厨房用具;事务事务是需要在同一个处理单元中执行的一系列更新处理的集合。通过使用事务可以对数据库中的数据更新处理的提交和取消进行管理。● 事务处理的终止指令包括COMMIT提交处理和ROLLBACK取消处理两种。● DBMS的事务具有原子性Atomicity、一致性Consistency、隔离性Isolation和持久性Durability四种特性。通常将这四种特性的首字母结合起来统称为ACID特性。