首先,您应该而不是试图通过调用MAX(dvd_price_id) + 1
来检索下一个插入ID。这对于竞争条件并不是免疫的,并且可能会导致问题,因为它不可靠。如果您的dvd_price_id
已经没有AUTO_INCREMENT
,建议您添加一个,然后让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
你们是不是要得到相同的'dvd_price_id'淡水河谷所有三个,或增加它为每一个? –
每增加一个。 –
并且'dvd_price_id'是表的主键? –