MySQL智能默认值

时间:2011-08-01 16:14:59

标签: mysql database database-design

我正在向MySQL表中添加内容,并且每个项目都有一个position,它在我的系统中显示为问题编号。

我可以在添加新问题position之前找出最大的+1,然后添加它 - 但我想知道是否有更智能的方式不需要第二个问题。

类似于INSERT INTO questions (id, position) values (0, MAX(position))

此字段不是主键,auto_increment对此情况没用。

我无法使用position作为密钥,因为密钥与许多其他内容相关,position可以随时更改。

我是一个非常自信的MySQL查询编写者,所以请不要提出除问题之外的任何建议 - 我知道很多替代方案,这只是一个语法问题。

我相信你会得到我的漂移!

干杯。

4 个答案:

答案 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)

似乎没有办法将默认值设置为特定的计算。