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.