0011《SQL必知必会》笔记07 数据的插入、更新和删除

1、插入完整的行或一部分:INSERT INTO 表名(列名1~n) VALUES (对应的值1~n)

INSERT INTO products(prod_id,
                    vend_id,
                    prod_name,
                    prod_price,
                    prod_desc)
VALUES('RYL03',
       'FNG01',
       'monkey doll',
       9.45,
       null);

  注意:1. 省略列名,也可以插入,但在将来表结构发生变化后,可能导致错误,因此一般不用;

       2. 如果只对部分列插入数据,省略的那些列要么可以为NULL,要么有默认值,否则会发生错误;

     3. 字符型数据要用''括起来。

2、插入SELECT检索出的数据。比如新建表dll01_products,将products中vend_id=DLL01的数据(除开prod_desc)插入新表

INSERT INTO dll01_products(new_prod_id,
                           new_vend_id,
                           new_prod_name,
                           new_prod_price)
SELECT prod_id,
       vend_id,
       prod_name,
       prod_price
FROM products
WHERE vend_id='DLL01';

  注意:1. 两个表的列名没有关系,只是把SELECT的第n列插入到INSERT的第n列,当然数据类型肯定要兼容

     2. 插入的数据和原有数据在有唯一性约束的列不能有重复数据

3、复制一个表(部分或全部列)

CREATE TABLE custcopy AS 
SELECT prod_id,vend_id,prod_name,prod_price,prod_desc FROM products;

  注意:用在测试SQL语句,先将数据复制出来,测试SQL语句,成功后再到实际的数据运行,确保安全

4、修改数据:将custcopy表的prod_id=RGAN01的vend_id改为FNG01,prod_name改为‘bean bag toy’.特别注意:要有WHERE字句,否则会更新整个列

UPDATE custcopy
SET vend_id='FNG01',
    prod_name='bean bag toy'
WHERE prod_id='RGAN01';

5、删除数据:删除custcopy表中prod_id为‘RYL01’,‘RYL02’,‘RYL03’的行。特别注意:不能缺少WHERE字句,否则会删除所有行。

DELETE FROM custcopy
WHERE prod_id IN ('RYL01','RYL02','RYL03');

  注意:1. 被删除的数据如果被定义了外键,比如这里的prod_id在orderitems表中定义了外键,那么不能被删除

     2. 如果要删除所有行,TRUNCATE TABLE 比DELETE效率高。

6、UPDATE与DELETE的使用原则:

  6.1 千万要有WHERE字句;

  6.2 保证每个表都有主键,UPDATE和DELETE的时候用WHERE字句和主键进行过滤;

  6.3 实施引用完整性,确保不删除与其他表有关联的行;

  6.4 在UPDATE和DELETE之前,先用SELECT进行测试,确保数据正确;

  6.5 DBA应尽量确保系统不能执行不带WHERE的UPDATE和DELETE.

posted @ 2016-04-26 11:06  sonng  阅读(370)  评论(0编辑  收藏  举报