• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別々のテーブルで共通のid使う)

別々のテーブルで共通のidを使う方法はないでしょうか?

このQ&Aのポイント
  • 一つのページから別々のテーブルにデータをINSERTする方法について説明します。
  • データのINSERT時に同じ値を持つ「id」と「number」をそれぞれのテーブルに挿入する方法について問題点を解説します。
  • データの不具合時に片方のテーブルにのみ登録される可能性がある問題を回避する方法を考えます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.4

共通id にauto_increment値は使わない意見に賛成。 その場合でも、トランザクションにしないと、片方のテーブルにのみ挿入できてもう一方は挿入されない事態は発生する。 mysql_(iが付かない)関数群はトランザクション機能の無かった時代の遺物なので(トランザクションもトリガーも未対応)、 mysqliクラスかPDOクラス群を使って下さい。 あと、mysql サーバーのversion が5.1 以降であることと、テーブル作成時に innodb エンジンを指定している必要があります。

soccerrlove
質問者

お礼

PDOクラスってものがあるんですね!知りませんでした! まだまだ知らないことが多そうなのでもっと勉強します! 回答ありがとうございました!

その他の回答 (3)

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.3

>調べてたら、Commitにあたる部分はあったのですが、autocommitの方が見つからなかったのです。 当方、Mysqlは知りませんので、お力になれません。すいません。

soccerrlove
質問者

お礼

いえいえ、とてもためになりました! 回答ありがとうございます!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

考え方が間違っています >id int(8) NOT NULL AUTO_INCREMENT オートインクリメントでつくるidを連携用のIDに利用するのは あまり頭のいいやり方ではありません。 オートインクリメントでつくったプライマリーキー(?)はあくまで レコードを特定するためのキーにしか(保障がないという意味で)利用できません 任意のルールできちんと生成したIDを元に処理するようにしてください もしくはなんらかのトリガーを利用して、別テーブルにデータを吐き出す ような仕組みにすればよいでしょう

soccerrlove
質問者

お礼

なるほど! そういう考え方もあるんですね! 回答ありがとうございます!

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

>一方は登録されて、一方は登録されないという事態が発生してしまい この事態を防ぐために「トランザクション」という考え方があります。 insert insert insert のあとにcommitすればテーブルが更新されます。 逆にrollbackすればテーブルの更新はありません。 commit,rollbackの処理でエラーが生じることはありません。 もしあるとすればデータベースのシステムが壊れています。

soccerrlove
質問者

お礼

回答ありがとうございます!

soccerrlove
質問者

補足

回答ありがとうございます! mysqli_autocommit($link, FALSE); mysqli_commit($link) を使ってみたのですが、普段使ってるのが mysql_select_db($database, $link); のようなmysqlのあとに"i"がない形なのですが、 調べてたら、Commitにあたる部分はあったのですが、autocommitの方が見つからなかったのです。 これに対する解決策があったら教えてくれるとありがたいです。 よろしくおねがいします!

関連するQ&A