【问题标题】:ALTER TABLE problemsALTER TABLE 问题
【发布时间】:2012-06-19 09:24:13
【问题描述】:

我有一个问题,我想在表bericht中添加一个外键(电子邮件)。

电子邮件引用vrijwilliger中的电子邮件,电子邮件为varchar(80)

ALTER TABLE bericht
ADD(
FOREIGN KEY (email) REFERENCES vrijwilliger(email));

错误信息:

#1005 - 无法创建表 '.\c5g4westpopintranet#sql-1494_145.frm' (errno: 150)

我不明白,希望你能帮助我。

第一张桌子

CREATE TABLE bericht(
berichtID int(8),
onderwerp varchar(255),
datum date,
tijd time,
inhoudbericht,
email varchar(80),
PRIMARY KEY(berichtID),
FOREIGN KEY(email) REFERENCES vrijwilliger(email));

第二张桌子

 CREATE TABLE vrijwilliger(
 vrijwilligerID int(8),
 email varchar(80),
 Primary key(vrijwilligerID));

【问题讨论】:

  • vrijwilliger(email)PRIMARY KEY - 还是上面有 UNIQUE 索引?
  • 你能显示两个表的架构吗?
  • 只需检查两个表中电子邮件的数据类型和大小是否相同。
  • 运行 show create table berich 和其他表相同。用结果更新您的问题。
  • 只是为了确定.. 您是否使用上面的 SQL 创建了 bericht 表?如果你这样做了,它已经有一个名为 email 的外键。如果没有,那么问题可能是缺少索引(bericht.email 和 vrijwilliger.email 都需要 ond ..

标签: mysql sql create-table


【解决方案1】:

尝试以下查询来更改表

ALTER TABLE bericht ADD CONSTRAINT email FOREIGN KEY(email) REFERENCES vrijwilliger(email) ON DELETE SET NULL ON UPDATE SET NULL;

Alter 表的语法

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

参考

http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

【讨论】:

  • 它提供 SQL 查询:ALTER TABLE bericht ADD CONSTRAINT email FOREIGN KEY (email) REFERENCES vrijwilliger(email) ON DELETE SET NULL ON UPDATE SET NULL MySQL retourneerde: Documentatie #1005 - Can't create table '.\c5g4westpopintranet\#sql-1494_176.frm' (errno: 150)
  • 在 bericht table 之前,你有没有 crate the table vrijwilliger
  • 在创建表时尝试这样 CONSTRAINT email_FK1 FOREIGN KEY (email) REFERENCES vrijwilliger(email) ON DELETE CASCADE
  • w8 在 vrijwilliger 中,电子邮件 varchar(80) 不是主键...一定是对的?
【解决方案2】:

试试下面的查询,它会为你工作

CREATE TABLE `vrijwilliger` (  
vrijwilligerID INT(8),  
email VARCHAR(80),  
PRIMARY KEY(vrijwilligerID),
UNIQUE KEY (email)
);

CREATE TABLE bericht( 
berichtID INT(8), 
onderwerp VARCHAR(255), 
datum DATE, 
tijd TIME, 
inhoudbericht INT(8), 
email VARCHAR(80), 
PRIMARY KEY(berichtID), 
FOREIGN KEY(email) 
REFERENCES vrijwilliger(email));

【讨论】:

  • 我收到无法删除表 bericht 的错误。 #1217 - 无法删除或更新父行:外键约束失败
猜你喜欢
  • 2011-03-15
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多