MySQL には、挿入時に行の一意の値を自動的に生成する AUTO_INCREMENT 属性が用意されています。ただし、次の値を直接取得する Oracle の SEQUENCE.NEXTVAL のような明示的な関数はありません。
現在の Auto_Increment 値を見つけるには、次のクエリを使用できます。
SELECT Auto_increment FROM information_schema.tables WHERE table_name='table_name';
このクエリは現在の値のみを返し、その後の実行では値が増加しないことに注意してください。
MySQL ではネイティブに許可されていません。行を挿入せずに Auto_Increment 値をインクリメントします。ただし、ストアド プロシージャまたはトリガーを使用しても同様の効果を実現できます。
Auto_Increment 値をインクリメントするために使用できるストアド プロシージャを次に示します。
CREATE PROCEDURE get_next_value(OUT next_value INT) BEGIN DECLARE current_value INT; SELECT Auto_increment INTO current_value FROM information_schema.tables WHERE table_name='table_name'; SET next_value = current_value + 1; UPDATE information_schema.tables SET Auto_increment = next_value WHERE table_name='table_name'; END
このストアド プロシージャを使用するには、次のクエリを実行します。
CALL get_next_value(@next_value);
の値@next_value は、次の Auto-Increment 値に設定されます。
別のアプローチは、挿入操作のたびに起動して Auto_Increment 値をインクリメントするトリガーを使用することです。以下にトリガーの例を示します。
CREATE TRIGGER trg_increment_auto_increment AFTER INSERT ON table_name BEGIN UPDATE information_schema.tables SET Auto_increment = Auto_increment + 1 WHERE table_name='table_name'; END
このトリガーを設定すると、行が挿入されるたびに、自動インクリメント値が自動的にインクリメントされます。
Spring JDBCTemplate を使用したい場合は、次のコードを使用して自動インクリメントをインクリメントできます。 value:
@Autowired private JdbcTemplate jdbcTemplate; public Long getNextAutoIncrementValue(String tableName) { String sql = "CALL get_next_value(?)"; CallableStatementCallback<Long> callback = new CallableStatementCallback<Long>() { @Override public Long doInCallableStatement(CallableStatement cs) throws SQLException { cs.registerOutParameter(1, Types.BIGINT); cs.execute(); return cs.getLong(1); } }; return jdbcTemplate.execute(sql, callback); }
このコードは、前に示したように「get_next_value」というストアド プロシージャが定義されていることを前提としています。
getNextAutoIncrementValue メソッドを呼び出すことで、Auto の次の値をプログラムで取得できます。 -指定されたテーブルの列をインクリメントします。
以上がMySQL の AUTO_INCREMENT 値を取得してインクリメントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。