首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL工作台和外键--不是幸福的婚姻

问MySQL工作台和外键--不是幸福的婚姻
EN

Stack Overflow用户
提问于 2011-12-03 09:52:15
回答 1查看 5.2K关注 0票数 0

MySQL工作台阻止我设置外键。我使用的是INNO-DB数据库引擎。

我有4个表,我想要链接到相同的用户id号。我将数据分解到这些表中,希望这样会更有效率,而不是打开整个数据库来处理不需要整个数据集的项目的不同部分。

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

有没有教程可以说明如何做到这一点?MySQL的信息非常黯淡,并假设一切都会正常工作。或者可能有人会对快速咨询工作感兴趣,以帮助我完成这项工作?

EN

回答 1

Stack Overflow用户

发布于 2011-12-03 10:04:16

我已经在MySQL 5.0中让它工作了。下面是操作步骤:

执行一些设置-创建数据库和用户;授予用户权限:

代码语言:javascript
复制
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 (子表):

代码语言:javascript
复制
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
);

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

代码语言:javascript
复制
INSERT INTO t1 values();
INSERT INTO t2(t1_id) SELECT last_insert_id();

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

代码语言:javascript
复制
select * from t1;
select * from t2;

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

现在删除父记录:

代码语言:javascript
复制
delete from t1 where t1_id = 1;

当您运行这些selects时,您应该在这两个表中都找不到任何行,因为删除父表会在子表中级联为delete:

代码语言:javascript
复制
select * from t1;
select * from t2;

好些了吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8364875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档