我有两张桌子:
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
答案 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
。
希望以上有意义!