web-dev-qa-db-ja.com

PHP-MySQL-MySQL整数フィールドを安全にインクリメントするには?

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

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

  2. 使用する必要があるMySQLの最小バージョンはありますか?

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

41
John

どのタイプの「テーブル」とは、ストレージエンジンのことを意味します。突然変異をサポートするもの(つまり、「アーカイブ」または「ブラックホール」ではない)

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

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

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

74
Chris Tonkinson

主キーについて話している場合は、id列をprimaryおよびauto_increment

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

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

MySQLバージョンについて-できるだけ最新のものを使用してください。 ;)
> 5.0 よくなる。

7
hsz

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

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

2
Devner