mysql - 向mysql表中插入一条新记录,其中一个值加1

标签 mysql

我有下表:

productId     price
1             price_value1
2             price_value2
3             price_value3

我想将一个新产品插入表中并为其分配一个新的productId。在本例中,其值等于 4。 所以我希望我的新表看起来像这样:

productId    price
1            price_value1
2            price_value2
3            price_value3
4            price_value4

据我所知,为了做到这一点,我必须以某种方式检索productId的最大值并使用INSERT INTO mytable VALUES (productId + 1,price_value4)插入它。 但是如何找出productId的最大值呢? 我尝试 INSERT INTO mytable VALUES (SELECT MAX(productId) + 1 FROM mytable, Price_value4) 但没有成功。

最佳答案

这应该有效:

从 mytable 中选择 max(productID) 和 Price_value4 作为列并插入结果。

INSERT INTO mytable (SELECT MAX(productId) + 1, 'price_value4' FROM mytable);

但是,如果您不打算跳转某个数字,您可以在product_id中添加一个自动递增id键,然后您只需插入价格,产品ID就会自动递增。 这将做到这一点:

ALTER TABLE mytable 
MODIFY COLUMN `productId` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;

您可以将 INT(10) 更改为 INT(5),例如,根据您想要为 ProductId 列指定的大小

编辑:

返回评论中的OP问题,为什么他的解决方案不起作用 一些建议说你必须在插入中始终将 SELECT 语句放在括号之间

INSERT INTO mytable VALUES ( (SELECT MAX(ID)+1 FROM mytable) , price_value4)

..就我而言,它返回

(1093): You can't specify target table 'mytable' for update in FROM clause

AND HERE IS WHY (引用自文档)

When selecting from and inserting into the same table, MySQL creates an internal temporary table to hold the rows from the SELECT and then inserts those rows into the target table. However, you cannot use INSERT INTO t ... SELECT ... FROM t when t is a TEMPORARY table, because TEMPORARY tables cannot be referred to twice in the same statement

但是通过在 FROM 中使用查询而不是表本身,需要克服一些问题,这会产生复制请求的表值而不是引用您正在更新的表值的效果。

INSERT INTO mytable VALUES ( 
   (SELECT MAX(ID)+1 FROM (SELECT * FROM mytable ) as mytmp ), 
   'price_value4');

OR(引用文档)

To avoid ambiguous column reference problems when the SELECT and the INSERT refer to the same table, provide a unique alias for each table used in the SELECT part, and qualify column names in that part with the appropriate alias.

INSERT INTO mytable Values ( (SELECT MAX(ID)+1 FROM mytable as mytmp) , 'price_value4')

关于mysql - 向mysql表中插入一条新记录,其中一个值加1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141531/

相关文章:

MySQL 触发器与 UPDATE 上的 IF 语句

mysql - Matlab 2019a 数据库工具箱中没有 "sqlread"?

java - 在 mssql 的情况下,metadata.getTables 结果集为空

php - 透明 mysql_error 日志记录 : How can I read mysql_error() twice?

java - 从 hibernate select 查询获取结果计数(查询返回对象而不是 Select count(*))

mysql - 尽管我的系统完全在 64 位上运行,为什么 64 位 mysql odbc 连接器不能与 VBA 很好地配合?

mysql - 无法从本地 RStudio 连接到 MySQL 数据库

javascript - isset 函数不起作用

Mysql 和 C 集成

mysql - 为什么不能通过显式锁定查询语法获取谓词锁