ID を max (id)+1* に設定して 2 つの新しいレコードを手動で挿入しました*
このアプローチは完全に間違っており、どのデータベースでも機能しません。これまでのところ、MySQL では運が良かっただけです。
2 つの接続が同時にこれを実行すると、同じ ID が取得されます。一度に 1 つの接続のみが ID を取得できるように、同時読み取りに対してテーブルをロックする場合にのみ、確実に機能します。
それもひどく非効率です。
これがシーケンスが存在する理由であり、同時挿入子が存在する場合でも ID を確実に取得できます。
使用するだけです:
INSERT INTO my_table(data1, data2) VALUES ('a','b') RETURNING id;
また:
INSERT INTO my_table(id, data1, data2) VALUES (DEFAULT, 'a','b') RETURNING id;
DEFAULTテーブル定義からその列のデフォルトを取得するようにデータベースに指示する特別なプレースホルダーです。デフォルトはnextval('my_table_id_seq')であるため、次のシーケンス値が挿入されます。
シーケンスに関する基本的な質問をしているため、シーケンスはギャップレスではないことも考慮することをお勧めします。シーケンスに「穴」があり、テーブルの値が 1、3、4、5、9、10、... になるのは正常です。