41

phpとmysqlを使用してフィールド値を安全にインクリメントしたい。

  1. どのタイプのテーブル/フィールドを使用する必要がありますか?

  2. 使用しなければならないMySQLの最小バージョンはありますか?

  3. MySQLのこの安全なトランザクションのSQLコードは何ですか?

4

3 に答える 3

73

どのタイプの「テーブル」とは、ストレージエンジンを意味すると思います。ミューテーションをサポートするもの(つまり、「アーカイブ」や「ブラックホール」ではない)

任意の数値フィールド(tinyint、int、floatなど)で問題ありません。とはいえ、特別なPHPコードはなく、目的のフィールドをインクリメントするためのSQLだけです。

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

トランザクションが必要な場合は、上記のクエリをトランザクションにパックします。MySQLのバージョンについては、@hszに同意します。可能な限り最新のバージョンを使用してください。

于 2010-01-09T14:04:00.333 に答える
7

主キーについて話している場合は、id列をprimaryとに設定しますauto_increment

増加するフィールドは次のようになります。

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

MySQLバージョンについて-可能な限り最新のものを使用してください。;)
> 5.0大丈夫です。

于 2010-01-09T13:54:17.537 に答える
2

1.どのタイプのテーブル/フィールドを使用する必要がありますか?

->テーブルのタイプは、アプリケーションで何を計画しているかによって異なります。InnodbまたはMyisamである可能性があります。インクリメント/デクリメントできるように、数値列を使用することをお勧めします。負の数を許可する場合は、符号なしにしないでください。

列の長さを宣言する際に役立つと思われる制限は次のとおりです。

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コードは何ですか?

->申し訳ありませんが、現時点ではこれに対する回答はありません。

于 2010-01-09T14:18:53.200 に答える