修改数据 / 插入行 |
然而,在某些情况下,您可能想要从您必须向其内插入数据的同一个表进行选择。例如,假设您已了解 Nikolus 公司与 Anza 公司供应相同的产品,但仅以一半的价格供应。您想要向 stock 表添加一些行来反映两家公司之间的差异。理想情况下,您想要从所有 Anza 库存行选择数据,并使用 Nikolus 制造商代码重新插入它。然而,您不可从您正在向其内插入的同一个表进行选择。
SELECT stock_num, 'NIK' temp_manu, description, unit_price/2 half_price, unit, unit_descr FROM stock WHERE manu_code = 'ANZ' AND stock_num < 110 INTO TEMP anzrows; INSERT INTO stock SELECT * FROM anzrows; DROP TABLE anzrows;
此 SELECT 语句从 stock 得到现有的行,并替换制造商代码的文字值以及单价的计算得到的值。然后将这些行保存在临时表 anzrows 中,立即将该表插入到 stock 表内。
当您插入多个行时,存在一种风险:其中一行包含无效的数据,就可能导致数据库服务器报告一个错误。当发生这样一个错误时,该语句提早终止。即使未发生错误,也存在一个小风险:在执行该语句时可能发生硬件或软件故障(例如,磁盘可能写满)。
在任何一种事件中,您都不可轻易地知道插入了多少新行。如果全部重复该语句,则您可能创建重复的行,也可能不会。由于数据库处于未知状态,因此您无所适从。解决方案在于使用事务,如 中断了的修改 讨论的那样。