【问题标题】:PHP-MySQL-How to safely increment MySQL integer field?PHP-MySQL-如何安全地增加 MySQL 整数字段?
【发布时间】:2011-01-03 06:17:27
【问题描述】:

我想使用 php 和 mysql 安全地增加字段值。

  1. 我必须使用什么类型的表/字段?

  2. 我必须使用最低版本的 MySQL 吗?

  3. 这个 SQL 代码是什么,MySQL 的安全事务?

【问题讨论】:

  • 我如何关闭之前的问题?
  • 将其中一个答案标记为“已接受”(单击复选标记,它会变为绿色 - 请参阅 stackoverflow.com/faq

标签: php mysql transactions counter


【解决方案1】:

我假设您指的是存储引擎的“表”类型。任何支持突变的东西(即不是“存档”或“黑洞”)

任何数字字段都可以(tinyint、int、float 等)。也就是说,没有特殊的 PHP 代码,只有用于递增所需字段的 SQL:

UPDATE table SET field = field + 1 WHERE [...]

如果你想要一个事务,那么把上面的查询打包成一个事务。至于 MySQL 版本,我同意 @hsz - 尽可能使用最新版本。

【讨论】:

  • 如何将以上内容打包成一个交易?
【解决方案2】:

如果您在谈论主键,请将id 列设置为primaryauto_increment

增加场是这样的:

UPDATE table SET field = field + 1 WHERE id = 9

关于 MySQL 版本 - 尽可能使用最新版本。 ;)
> 5.0 会好的。

【讨论】:

    【解决方案3】:

    1.我必须使用什么类型的表/字段?

    --> 表的类型取决于您为应用程序计划的内容。它可能是 Innodb 或 Myisam。我建议您使用数字列,以便您可以增加/减少它们。如果您打算允许负数,请不要将其设为 UNSIGNED。

    以下是在声明列长度时可能有用的限制:

    TINYINT (length)  - 1 - Integer with unsigned range of 0-255 and a signed range from -128-127
    SMALLINT (length)  - 2 - Integer with unsigned range of 0-65535 and a signed range from -32768-32767
    MEDIUMINT(length)  - 3 -  Integer with unsigned range of 0-16777215 and a signed range from -8388608-8388607
    INT(length)   - 4 - Integer with unsigned range of 0-429467295 and a signed range from -2147483648-2147483647
    BIGINT(length)   - 8 -  Integer with unsigned range of 0-18446744 and a signed range from
    -9223372036854775808-9223372036854775807
    

    2.我必须使用最低版本的 MySQL 吗?

    --> 只是为了使用自增?您可以使用最新版本。如果可能的话,我建议 > 5.2.4。

    3.MySQL 安全事务的 sql 代码是什么?

    --> 抱歉,暂时没有这个问题的答案。

    【讨论】:

    • OP 从未提及 auto_increment - 只是想增加。
    • 是的,有时是增量,有时是减量。我正在为赞成/反对评分系统构建一个投票系统。
    • @Chris:感谢您指出这一点。 @John:我已经更新了我的答案。请参考。
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 2013-12-11
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多