Home >Backend Development >PHP Tutorial >怎么向有外键约束的字表中插入记录

怎么向有外键约束的字表中插入记录

WBOY
WBOYOriginal
2016-06-13 10:33:28961browse

如何向有外键约束的字表中插入记录?
我在mysql中建了两个表
mysql> describe room;
+--------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| name | char(20) | NO | PRI | NULL | |
| doctor | char(20) | NO | | NULL | |
+--------+----------+------+-----+---------+-------+
2 rows in set (0.07 sec)

字表是
mysql> describe guahao;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| name | char(20) | NO | PRI | NULL | |
| sex | char(10) | NO | | NULL | |
| age | char(10) | NO | | NULL | |
| room | char(20) | NO | MUL | NULL | |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
其中外键是room,on delete cascade on update cascade

我在命令行中向字表中插入数据没有问题,结果是
mysql> insert into guahao values
  -> ('小张','男','30','皮肤科');
Query OK, 1 row affected (0.04 sec)

mysql> select * from guahao;
+--------+-----+-----+-----------+
| name | sex | age | room |
+--------+-----+-----+-----------+
| 王八 | 女 | 60 | 内科 |
| 钱二 | 男 | 40 | 脑科 |
| 赵一 | 男 | 20 | 五官科 |
| 孙三 | 女 | 35 | 骨科 |
| 寂寞 | 男 | 22 | 骨科 |
| 小张 | 男 | 30 | 皮肤科 |
| 小明 | 男 | 25 | 脑科 |
| 李四 | 男 | 30 | 皮肤科 |
+--------+-----+-----+-----------+
9 rows in set (0.00 sec)
但是我用PHP的时候,同样的插入语句,却会报错,错误信息如下:
Cannot add or update a child row: a foreign key constraint fails (`clinic`., CONSTRAINT `#sql-9e_13_ibfk_1` FOREIGN KEY (`room`) REFERENCES `room` (`name`) ON DELETE CASCADE ON UPDATE CASCADE)
请大神帮我看看问题在哪!跪求!哭了,问过一次,没解决问题。

------解决方案--------------------
字符集问题!
1、你的表中没有给字符类型字段设置字符集(默认 latin1)
2、你在连接数据库后没有声明字符集(缺少 set names 指令)
3、你说你使用了 utf-8 字符集,而程序中有 charset=GB18030
实际是使用了gbk 字符集

GB18030 是正式的国家标准,目前尚未在计算机中实现。所以实际使用的是其子集--GBK

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn