添加外键约束关系没有生成? 我在MySQL数据库的从表里面添加(alter)外键,语句执行了,可是约束关系却没有生成。请问是什么原因?我的MySQL版本是5.5,GUI为SQLyog Enterprise。MySQLGUI外键 约束关系 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提示什么,SHOW CREATE TABLE XX 没有提示,语句是执行了,因为SHOW CREATE TABLE XX 时,有生成KEY。不过在点击查看关系按钮时,出现附件的提示。 SHOW CREATE TABLE 表名\G; 必须是INNODB的表才能建立外键关系 生成了key,就是实际在insert的时候,约束关系没有生效。 "必须是INNODB的表才能建立外键关系 " 就是说我的表的引擎必须是INNODB?目前貌似我的数据库的引擎为MYISAM,我需要怎么修改呢? alter table tbname engine=innodb 关键表的引擎是innodb才能支持外键约束的。 MYISAM还不支持事务呢,幸好这次没造成数据丢失万一你想让他rollback,结果……哈哈 为什么我使用了该句后在查看表的relationships/Foreign Keys时,还是会出现截图中的提示?约束关系似乎也还是不行? 示例:CREATE TABLE B ( rtuid VARCHAR(10) NOT NULL , ctuip VARCHAR(20) NULL , tuid VARCHAR(10) NULL , slotid VARCHAR(10) NULL , `NAME` VARCHAR(100) , description VARCHAR(255) , PRIMARY KEY(rtuid), KEY ( ctuip, tuid, slotid)) ;CREATE TABLE A ( rtuid VARCHAR(10) NOT NULL , ctuip VARCHAR(20) , tuid VARCHAR(10) , slotid VARCHAR(10) , portid VARCHAR(10) , Bctuip VARCHAR(20) NULL, Btuid VARCHAR(10) NULL, Bslotid VARCHAR(10) NULL, `NAME` VARCHAR(100) , description VARCHAR(255) , PRIMARY KEY (rtuid), KEY (Bctuip, Btuid, Bslotid), CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid) REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT); 新手上路,不太明白版主的示例的意思?示例里面两个主键相同,索引关联,我试了之后还是不行,我插入的值如截图。请问版主这是什么原因?另外我在插入主键为4的值时有使用alter table tbname engine=innodb。 上面附截图的表格的建表语句就是你发的示例:CREATE TABLE B ( rtuid VARCHAR(10) NOT NULL , ctuip VARCHAR(20) NULL , tuid VARCHAR(10) NULL , slotid VARCHAR(10) NULL , `NAME` VARCHAR(100) , description VARCHAR(255) , PRIMARY KEY(rtuid), KEY ( ctuip, tuid, slotid)) ;CREATE TABLE A ( rtuid VARCHAR(10) NOT NULL , ctuip VARCHAR(20) , tuid VARCHAR(10) , slotid VARCHAR(10) , portid VARCHAR(10) , Bctuip VARCHAR(20) NULL, Btuid VARCHAR(10) NULL, Bslotid VARCHAR(10) NULL, `NAME` VARCHAR(100) , description VARCHAR(255) , PRIMARY KEY (rtuid), KEY (Bctuip, Btuid, Bslotid), CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid) REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT); 我最初提问题的建表语句是仿照:create table z_laopo (id int(5) primary key, name char(20), age int(3), zhiye char(20)); ----创建老婆表create table z_nanren(id int(5) primary key, name char(20), age int(3), laopo_id int(5), foreign key(laopo_id) references z_laopo(id)); -------创建男士表 用你的代码,在5。.5下测试没有问题CREATE TABLE `z_laopo` ( `id` int(5) NOT NULL, `name` char(20) DEFAULT NULL, `age` int(3) DEFAULT NULL, `zhiye` char(20) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `z_nanren` ( `id` int(5) NOT NULL, `name` char(20) DEFAULT NULL, `age` int(3) DEFAULT NULL, `laopo_id` int(5) DEFAULT NULL, PRIMARY KEY (`id`), KEY `laopo_id` (`laopo_id`), CONSTRAINT `z_nanren_ibfk_1` FOREIGN KEY (`laopo_id`) REFERENCES `z_laopo` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 目前我这边建表也是没有问题,就是我在插入数据的时候发现我插入下面的语句:insert into z_laopo values (1,'fengjie',18,'accontant');insert into z_laopo values (2,'cangjingkong',25,'teacher');----向老婆表插入记录insert into z_nanren values (1,'nanren_1',24,1)insert into z_nanren values (2,'nanren_2',24,2)insert into z_nanren values (3,'nanren_3',24,3) ----向男士表插入记录insert into z_nanren values (3,'nanren_3',24,3)这据应该插不进去,可是我这边却可以插进去?另外你那边没有问题,很有可能是你数据库引擎默认为InnoDB.请指教! 从开始就说过,外键只能用在INNODB引擎的,否则没有作用 是啊 所以我现在两个表分别用了alter table tbname engine=innodb,然后插入insert into z_nanren values (4,'nanren_3',24,4)还是还可以插进去,然后说相当于alter table tbname engine=innodb没起作用啊? alter 完表后,你需要添加外键! navicat下设置mysql中varchar最大值 mysql查询 救急!!断电把数据库给毁坏了,那位有办法帮着给恢复了!!! 这样的语句为啥不对呢? 请教关于null的问题? 请问mysql里建表是当数据类型是int时,它的默认length/set是3。这个3是指字节数还是字符数阿? 问一个关于Group查询后的问题 SQL 语句优化 order by 里面进行排序问题? mysql 误导入数据把原来的数据覆盖掉了,有办法恢复么? mysql存储过程 mysql C API 中的函数问题
SHOW CREATE TABLE XX
没有提示,语句是执行了,因为SHOW CREATE TABLE XX 时,有生成KEY。不过在点击查看关系按钮时,出现附件的提示。
万一你想让他rollback,结果……哈哈
CREATE TABLE B
(
rtuid VARCHAR(10) NOT NULL ,
ctuip VARCHAR(20) NULL ,
tuid VARCHAR(10) NULL ,
slotid VARCHAR(10) NULL ,
`NAME` VARCHAR(100) ,
description VARCHAR(255) ,
PRIMARY KEY(rtuid),
KEY ( ctuip, tuid, slotid)) ;CREATE TABLE A
( rtuid VARCHAR(10) NOT NULL ,
ctuip VARCHAR(20) ,
tuid VARCHAR(10) ,
slotid VARCHAR(10) ,
portid VARCHAR(10) ,
Bctuip VARCHAR(20) NULL,
Btuid VARCHAR(10) NULL,
Bslotid VARCHAR(10) NULL,
`NAME` VARCHAR(100) ,
description VARCHAR(255) ,
PRIMARY KEY (rtuid),
KEY (Bctuip, Btuid, Bslotid),
CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid)
REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT);
上面附截图的表格的建表语句就是你发的示例:
CREATE TABLE B
(
rtuid VARCHAR(10) NOT NULL ,
ctuip VARCHAR(20) NULL ,
tuid VARCHAR(10) NULL ,
slotid VARCHAR(10) NULL ,
`NAME` VARCHAR(100) ,
description VARCHAR(255) ,
PRIMARY KEY(rtuid),
KEY ( ctuip, tuid, slotid)) ;
CREATE TABLE A
( rtuid VARCHAR(10) NOT NULL ,
ctuip VARCHAR(20) ,
tuid VARCHAR(10) ,
slotid VARCHAR(10) ,
portid VARCHAR(10) ,
Bctuip VARCHAR(20) NULL,
Btuid VARCHAR(10) NULL,
Bslotid VARCHAR(10) NULL,
`NAME` VARCHAR(100) ,
description VARCHAR(255) ,
PRIMARY KEY (rtuid),
KEY (Bctuip, Btuid, Bslotid),
CONSTRAINT fk_A_id FOREIGN KEY (Bctuip, Btuid, Bslotid)
REFERENCES B (ctuip, tuid, slotid) ON DELETE SET NULL ON UPDATE RESTRICT); 我最初提问题的建表语句是仿照:
create table z_laopo (id int(5) primary key,
name char(20),
age int(3),
zhiye char(20)); ----创建老婆表
create table z_nanren(id int(5) primary key,
name char(20),
age int(3),
laopo_id int(5),
foreign key(laopo_id) references z_laopo(id));
-------创建男士表
CREATE TABLE `z_laopo` (
`id` int(5) NOT NULL,
`name` char(20) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`zhiye` char(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `z_nanren` (
`id` int(5) NOT NULL,
`name` char(20) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`laopo_id` int(5) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `laopo_id` (`laopo_id`),
CONSTRAINT `z_nanren_ibfk_1` FOREIGN KEY (`laopo_id`) REFERENCES `z_laopo` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
目前我这边建表也是没有问题,就是我在插入数据的时候发现我插入下面的语句:
insert into z_laopo values (1,'fengjie',18,'accontant');
insert into z_laopo values (2,'cangjingkong',25,'teacher');
----向老婆表插入记录
insert into z_nanren values (1,'nanren_1',24,1)
insert into z_nanren values (2,'nanren_2',24,2)
insert into z_nanren values (3,'nanren_3',24,3)
----向男士表插入记录
insert into z_nanren values (3,'nanren_3',24,3)这据应该插不进去,可是我这边却可以插进去?
另外你那边没有问题,很有可能是你数据库引擎默认为InnoDB.
请指教!