ホームページ  >  記事  >  バックエンド開発  >  外部キー制約のあるテーブルにレコードを挿入するにはどうすればよいですか?

外部キー制約のあるテーブルにレコードを挿入するにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 14:03:10903ブラウズ

mysql で 2 つのテーブルを作成しました
mysql>
+----------+----------+------+----- +-- -------+------+
フィールド | デフォルト | -+------+-----+--------+------+ 文字 (20) | | -+ ---------+-------+
セット内の 2 行 (0.07 秒)

単語テーブルは、
mysql>
+-------+ - --------+------+-----+--------+
キー | | デフォルト |
+------+----------+-----+-----+----------+ -------+ 文字 (20) | 文字 (10) | | 文字 (20) |
+------+----------+-- ---+-- -------+------+
4 行セット (0.00 秒)
外部キーは room、削除カスケード、更新カスケード

コマンドライン上です 問題ありません単語テーブルにデータを挿入すると、結果は
mysql> insert into guahao
-> ('Xiao Zhang', ' Male', ' Dermatology');
クエリ OK、 1 行が影響を受けます ( 0.04 秒)

mysql> select * from guahao; | 性別 | 部屋 |
+-----+-----+----------+ 女 |
| 整形外科 |
|張 | 男性 |
| 脳科 | 30 | ---+-----------+
セットに 9 行 (0.00 秒)
しかし、PHP を使用すると、同じ挿入ステートメントでエラー メッセージが次のように報告されます。
できません。子行の追加または更新: 外部キー制約が失敗します (`clinic`., CONSTRAINT `#sql-9e_13_ibfk_1` FOREIGN KEY (`room`) REFERENCES `room` (`name`) ON DELETE CASCADE ON UPDATE CASCADE)
お願いします神様、どこに問題があるのか​​を見つけられるように助けてください。ひざまずいて懇願してください!一度泣きながら聞いてみましたが解決しませんでした。




ディスカッション (解決策) への返信

この質問に誰も返信しないのはなぜですか?難しい質問ではありません

1. オペレーティング システムは何ですか?
2. プログラムはどの文字セットを使用しますか?
3. 手伝ってくれる人の利便性を高めるために、
a. テーブルを作成するための SQL 手順
b. テスト用の PHP コード


ほほ、誰かが答えてくれるでしょう ~~

1. オペレーティング システムは何ですか?
2. プログラムはどの文字セットを使用しますか?
3. サポートしてくれる人に便利なようにするには、
a. テーブルを作成するための SQL 命令
b. テスト用の PHP コード
1. オペレーティング システムは MAC OS X です
2. 文字セットは
mysql> ; 'character%' のような変数を表示します
+---------------+---------; --- --------------------------------------------------- ---+
値 | ---------------------------------------------------- - + latin1 | -------------------+---------------------------- ------------------------+
8 行セット (0.08 秒)
データベースへの挿入に使用されるデータは HTML から転送されますUTF-8 でエンコードされたページを、post メソッドを使用して同じく UTF-8 でエンコードされた PHP ファイルに変換します。


3.

テーブルを作成する SQL コマンドは次のようにターミナルに入力します
mysql> create table room(name char(20) not null プライマリキー、doctor char(20) not null) type=innodb;
クエリ OK 、影響を受ける行 0 件、警告 1 件 (0.05 秒)

mysql> create table guahao -> (name char(20) not null 主キー、 -> sex char(10) not null、
- > age char(10) は null ではありません、
-> room char(20) は null ではありません、
-> 更新カスケードで room(name) を参照します-> type=innodb;
クエリ OK、影響を受ける行は 0、警告は 1 件 (0.41 秒)

PHP コードは
エラーです

文字セットに問題があります!
1. テーブルの文字タイプフィールドに文字セットセットがありません (デフォルトは latin1)
2. データベースに接続した後に文字セットを宣言しませんでした (set names コマンドが不足しています)
3. を使用したと言いますutf-8 文字セット、プログラムには charset=GB18030 が含まれています
これは実際には gbk 文字セットを使用します

GB18030 は公式の国家標準であり、まだコンピュータには実装されていません。したがって、実際に使用されるのはそのサブセット GBK です

外部キーを無視します: SET FOREIGN_KEY_CHECKS = 0

文字セットの問題!
1. テーブルの文字タイプフィールドに文字セットセットがありません (デフォルトは latin1)
2. データベースに接続した後に文字セットを宣言しませんでした (set names コマンドが不足しています)
3. を使用したと言いますutf-8 文字セット、プログラムには charset=GB18030 が含まれています
これは実際には gbk 文字セットを使用します

GB18030 は公式の国家標準であり、まだコンピュータには実装されていません。したがって、実際に使用するのはそのサブセットである GBK です
私はその問題を解決しました、それは文字セットの問題です、マスター Buzhu に感謝します!とても多くの天才が投稿しに来ます

キャラクターセットの問題!
1. テーブルの文字タイプフィールドに文字セットセットがありません (デフォルトは latin1)
2. データベースに接続した後に文字セットを宣言しませんでした (set names コマンドが不足しています)
3. を使用したと言いますutf-8 文字セット、プログラムには charset=GB18030 が含まれています
これは実際には gbk 文字セットを使用します

GB18030 は公式の国家標準であり、まだコンピュータには実装されていません。したがって、実際に使用されるのはそのサブセットである GBK です


モデレーターさん、こんにちは。元の投稿者と同じテーブル作成コマンドを使用してテーブルを作成しましたが、元の投稿者と同じデータを挿入できず、「外部」というプロンプトが表示されます。制約が失敗します」というメッセージが表示されました。どうすればよいですか? 解決策は何ですか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。