我目前正在尝试使用一条INSERT
语句将多行(三)数据插入数据库?
INSERT INTO dvd_price
( SELECT
, (SELECT max(dvd_price_id) + 1 FROM dvd_price) --dvd_price_id
, d.dvd_id --dvd_id
, 2 --rental amount
, '1-day' --time rented for
FROM dvd d);
上面会插入一次1-day
; 我希望有一条相同的语句也插入和的数据,2-day
并3-day
使用相应的值(2
对于随后的插入次数增加一次)。
首先,您不应该尝试通过调用检索下一个插入ID MAX(dvd_price_id) + 1
。这不免受到比赛条件的影响,并且由于不可靠而可能引起问题。如果尚未AUTO_INCREMENT
打开dvd_price_id
,建议您添加一个,然后让RDBMS为您处理增量。
ALTER TABLE dvd_price MODIFY dvd_price_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;
现在,您完全不必担心dvd_price_id
中的INSERT
。为了获得所有这三个值,1-day, 2-day, 3-day
可以通过结合这些静态值的列表来创建笛卡尔积。这将导致该表中当前每一行的每一天都有一天的值。
INSERT INTO dvd_price (dvd_id, rental_amount, time_rented_for)
SELECT
dvd_id,
2 AS rental_amount,
rental_period
FROM
dvd
/* join a subquery which creates a list of 'N-day' strings using
SELECT 'value' UNION SELECT 'value'.....
With no ON clause, it will do this for every row in `dvd`
*/
CROSS JOIN (
SELECT '1-day' AS rental_period
UNION SELECT '2-day' AS rental_period
UNION SELECT '3-day' AS rental_period
) rental_periods
首先仅使用SELECT
查询的一部分而不使用进行测试INSERT
。
这是其工作方式的演示:http : //sqlfiddle.com/#!2/a0862/1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句