如何在同一事件中插入由外键连接的多个表

时间:2012-02-26 04:17:16

标签: php mysql

我有两张桌子:

candidate_register_table具有以下架构:

|----------------------------------------------------|
|   username  |  name   |  age   | sex   | password  |
|----------------------------------------------------|
带有以下架构的

candidate_social_table

|--------------------------------------------------------|
|   username  |  religion   | caste  | address   | city  |
|--------------------------------------------------------|

在这两个表中,username是相应表格中的主键。

我想在单击事件中在表中插入数据,其中表candidate_register_table中的用户名是candidate_social_table中的外键

这是我的reg_conn.php,其中插入了数据:

<?php
include('connection.php')'

$sql_register="INSERT INTO candidate_register_table (username, name, age, sex, password) )           VALUES('$_POST[username]','$_POST[name]','$_POST[age]', '$_POST[sex]','$_POST[password]')";
$sql_social_disable="ALTER TABLE candidate_social_table disable CONSTRAINT fk_candidate_register_table";
$sql_social="INSERT INTO candidate_social_table (username) VALUES('$_POST[username]')";
$sql_social_enable="ALTER TABLE candidate_social_table enable CONSTRAINT fk_candidate_register_table";

if(mysql_query($sql_register,$con) && mysql_query($sql_social_disable,$con) && mysql_query($sql_social,$con)  && mysql_query($sql_social_enable,$con))
   { echo "you have been registered";
   }
else
   {
       die('Error: ' . mysql_error());
       echo "Something went wrong. Might be a Fatal Error";
   }
?>

现在的问题是,我的连接和所有其他人都完美无缺,但查询:

ALTER TABLE candidate_social_table disable CONSTRAINT fk_candidate_register_table`

没有被执行,它抛出以下错误:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONSTRAINT fk_t1' at line 1

2 个答案:

答案 0 :(得分:0)

我不确定您是否可以禁用单个表的约束,或者为什么需要首先禁用外键,因为您按正确的顺序插入数据 - 但您可以尝试:

$sql_social_disable="SET FOREIGN_KEY_CHECKS=0";

重新启用,使用

$sql_social_disable="SET FOREIGN_KEY_CHECKS=1";

或者,您可以删除特定的外键约束,然后在完成后重新创建它。

答案 1 :(得分:0)

启用/禁用密钥不是正确的语法。尝试:

ALTER TABLE `candidate_social_table` DISABLE KEYS;

或者,您可以在运行查询之前SET FOREIGN_KEY_CHECKS = 0。并重置为1个运行后。

但是,我想知道为什么要在插入candidate_social_table时禁用外键。我的意思是外键有一个目的,并禁用它们击败它。如果您不需要,请删除外键。

如果效率与您有关,则在进行批量插入时通常会禁用外键。单个或几个插入物没有任何影响。

另一件事是,如果username是两个表中的主键,那么就有2个表没有意义。您可以将所有字段从candidate_social_table移至candidate_register_table

希望以上有意义!