【问题标题】:MySQL Workbench and foreign keys -- not a happy marriageMySQL Workbench 和外键——不幸福的婚姻
【发布时间】:2012-01-11 23:41:10
【问题描述】:

MySQL Workbench 阻止我设置外键。我正在使用 INNO-DB 数据库引擎。

我希望将 4 个表链接到同一个用户 ID 号。我已经将数据分解到这些表中,希望不打开整个数据库来处理不需要整个数据集的项目的不同部分会更有效。

但是,无论我尝试什么设置,我都无法让它接受外键。运行 SQL 时它总是给我错误。 我想知道这是否是 Workbench 过于热心,或者我错过了什么。

是否有说明如何执行此操作的教程? MySQL 信息非常暗淡,并假设一切正常。或者也许有人对快速咨询工作感兴趣来帮助我进行此设置?

【问题讨论】:

  • “它总是给我错误……”确切地知道这些错误是什么会很有帮助。如有必要,请发布屏幕截图。

标签: mysql foreign-key-relationship mysql-workbench


【解决方案1】:

我已经让它在 MySQL 5.0 中工作。方法如下:

做一些设置——创建一个数据库和一个用户;授予用户权限:

mysql -h localhost -u root -p
create database foreign_demo;
create user foreign_demo identified by 'foreign_demo';
grant all on foreign_demo.* to 'foreign_demo'@'%';
grant all on foreign_demo.* to 'foreign_demo'@'localhost';

现在创建两个简单的表:t1(父)和 t2(子):

CREATE TABLE IF NOT EXISTS t1
(
    t1_id integer not null auto_increment,
    primary key(t1_id)
);

CREATE TABLE IF NOT EXISTS t2
(
    t2_id integer not null auto_increment,
    t1_id integer,
    primary key(t1_id),
    constraint fk_t1 foreign key(t2_id) references t1(t1_id) on delete cascade on update cascade
);

现在让我们在每个中插入一行:

INSERT INTO t1 values();
INSERT INTO t2(t1_id) SELECT last_insert_id();

让我们选择刚刚插入的内容:

select * from t1;
select * from t2;

您应该在每个表格中看到一行; t2 表将引用 t1

现在删除父记录:

delete from t1 where t1_id = 1;

当您运行这些选择时,您应该在任一表中都找不到任何行,因为删除父级联会导致子表中的删除:

select * from t1;
select * from t2;

更好?

【讨论】:

  • 我还没有弄清楚如何让图表工作,但下面是 sql 的样子: ALTER TABLE bizzocalldev.buttonprefs ADD CONSTRAINT iduserid FOREIGN KEY ()参考bizzocalldev.userinfo () ON DELETE CASCADE ON UPDATE CASCADE , ADD INDEX iduserid () ;但它不运行。我收到错误这些错误:
  • 这些错误: 错误 1064:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 3 行 SQL 语句:ALTER TABLE bizzocalldev.@987654338 @ ... 错误:运行故障回复脚本时出错。详情如下。 ERROR 1046: No database selected SQL Statement: CREATE TABLE buttonprefs (bleft int(2) default NULL,... ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 啊哈!我创建了 2 个新表并将它们链接起来。没有错误。但它的行为不像我预期的那样。我在主表中添加了3条记录,我认为链接表中会自动创建3条空记录。但是什么也没发生!我确实打开了“级联”....
  • 我发布的输出来自 MySQL Workbench 本身;尝试修复它们,看看它是否最终有效。您的期望可能是错误的。
  • 这可能是真的。我是否将“级联”解释为从主数据库中添加或删除会导致链接数据库发生同样的事情?如果是这样,除了手动编写 sql 之外,我该如何实现呢?
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 2012-12-10
  • 2012-07-16
  • 2012-06-25
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多