我正在向MySQL表中添加内容,并且每个项目都有一个position
,它在我的系统中显示为问题编号。
我可以在添加新问题position
之前找出最大的+1
,然后添加它 - 但我想知道是否有更智能的方式不需要第二个问题。
类似于INSERT INTO questions (id, position) values (0, MAX(position))
。
此字段不是主键,auto_increment对此情况没用。
我无法使用position
作为密钥,因为密钥与许多其他内容相关,position
可以随时更改。
我是一个非常自信的MySQL查询编写者,所以请不要提出除问题之外的任何建议 - 我知道很多替代方案,这只是一个语法问题。
我相信你会得到我的漂移!
干杯。
答案 0 :(得分:0)
像其他大多数人一样使用auto_increment吗?
这是一种智能方式,因为它的并发安全。
答案 1 :(得分:0)
最好的方法是更改MySQL中的字段属性,这意味着让MySql在不提供输入的情况下完成工作。
TABLE
TableName
CHANGE position
position
INT( 11 ) NOT NULL AUTO_INCREMENT
现在插入时,请勿为此字段提供任何值。
TableName
MySQL会自动增加位置值。如果需要,您可以设置当前计数器以及重置。通过这种方式,您根本不会运行任何采石场。
答案 2 :(得分:0)
这样的事情应该起作用
INSERT INTO questions (id, position) SELECT 0, MAX(position)+1 FROM questions;
显然,你需要处理0值,就像设置适当的值一样,我只是从你的例子中复制了这个值。
您还可以创建要在查询中使用的存储过程,或者甚至有一个确定MAX(位置)的触发器,添加一个并将其存储在新创建的行中。
那里有很多选项,我会选择上面的解决方案(有位置索引)
答案 3 :(得分:0)
似乎没有办法将默认值设置为特定的计算。