mysql - Why 'foreign key constraint fails' when foreign key exists? -


i have simple query

update `t_timecard_detail` set  `timeoff_request_id` = 'adad8e0d-c22b-41c3-a460-6cf982729299' `id` = 'cfc7a0a1-4e03-46a4-af89-069a0661cf55';  

which gives error

error 1452 (23000): cannot add or update child row: foreign key constraint fails (`demo1_timeapp`.`t_timecard_detail`, constraint `timeoff_request_id_refs_id_48fe5c4` foreign key (`timeoff_request_id`) references `t_timeoff_request` (`id`)) 

constraint

constraint `timeoff_request_id_refs_id_48fe5c4` foreign key (`timeoff_request_id`) references `t_timeoff_request` (`id`) 

though id 'adad8e0d-c22b-41c3-a460-6cf982729299' exists in t_timeoff_request table

mysql> select `id`  t_timeoff_request `id`='adad8e0d-c22b-41c3-a460-6cf982729299'; +--------------------------------------+ | id                                   | +--------------------------------------+ | adad8e0d-c22b-41c3-a460-6cf982729299 | +--------------------------------------+ 

so not sure why mysql says 'foreign key constraint fails' when foreign key exists?

mysql version:

$ mysql --version mysql  ver 14.14 distrib 5.1.41, debian-linux-gnu (i486) using readline 6.1 

edit: looks 1 table has engine=myisam , other innodb

output of show create table t_timecard_detail;

create table `t_timecard_detail` (   `id` varchar(36) not null,   `change_time` datetime not null,   `department_id` varchar(36) default null,   `day` date not null,   `in_punch_id` varchar(36) default null,   `punch_in` datetime default null,   `paid_in` datetime default null,   `infraction_in_id` varchar(36) default null,   `schedule_in` datetime default null,   `type_in` varchar(10) not null,   `out_punch_id` varchar(36) default null,   `punch_out` datetime default null,   `paid_out` datetime default null,   `schedule_out` datetime default null,   `infraction_out_id` varchar(36) default null,   `type_out` varchar(10) not null,   `work_min` int(11) not null,   `ot_min` int(11) not null,   `ot2_min` int(11) not null,   `pay_type_id` varchar(36) not null,   `timecard_id` varchar(36) not null,   `user_entered` tinyint(1) not null,   `comments` varchar(256) default null,   `timeoff_request_id` varchar(36),   primary key (`id`),   key `t_timecard_detail_department_id` (`department_id`),   key `t_timecard_detail_in_punch_id` (`in_punch_id`),   key `t_timecard_detail_infraction_in_id` (`infraction_in_id`),   key `t_timecard_detail_out_punch_id` (`out_punch_id`),   key `t_timecard_detail_infraction_out_id` (`infraction_out_id`),   key `t_timecard_detail_pay_type_id` (`pay_type_id`),   key `t_timecard_detail_timecard_id` (`timecard_id`),   key `t_timecard_detail_4f5ffbb5` (`timeoff_request_id`),   constraint `department_id_refs_id_1b23ee35` foreign key (`department_id`) references `t_department` (`id`),   constraint `infraction_in_id_refs_id_17b2e173` foreign key (`infraction_in_id`) references `t_pay_group_infraction` (`id`),   constraint `infraction_out_id_refs_id_17b2e173` foreign key (`infraction_out_id`) references `t_pay_group_infraction` (`id`),   constraint `in_punch_id_refs_id_4d13a8b2` foreign key (`in_punch_id`) references `t_punch` (`id`),   constraint `out_punch_id_refs_id_4d13a8b2` foreign key (`out_punch_id`) references `t_punch` (`id`),   constraint `pay_type_id_refs_id_70cb7404` foreign key (`pay_type_id`) references `t_pay_type` (`id`),   constraint `timecard_id_refs_id_7889236c` foreign key (`timecard_id`) references `t_timecard` (`id`),   constraint `timeoff_request_id_refs_id_48fe5c4` foreign key (`timeoff_request_id`) references `t_timeoff_request` (`id`) ) engine=innodb default charset=latin1  

output of show create table t_timeoff_request;

create table `t_timeoff_request` (   `id` varchar(36) not null,   `change_time` datetime not null,   `employee_id` varchar(36) not null,   `submitted_date` datetime not null,   `time_off_day` date not null,   `mins_charged` int(11) not null,   `pay_type_id` varchar(36) not null,   `employee_comment` varchar(300) not null,   `approved_status` varchar(10) not null,   `approved_by_id` varchar(36) default null,   `approved_date` datetime default null,   `approved_comment` varchar(300) default null,   primary key (`id`),   key `t_timeoff_request_employee_id` (`employee_id`),   key `t_timeoff_request_pay_type_id` (`pay_type_id`),   key `t_timeoff_request_approved_by_id` (`approved_by_id`) ) engine=myisam default charset=latin1 

i think it's bug. mysql shouldn't allow add foreign key referencing myisam table innodb because myisam engine isn't transactional, innodb is.

try: alter table t_timeoff_request engine=innodb; 

Comments

Popular posts from this blog

ASP.NET/SQL find the element ID and update database -

c++ - Compiling static TagLib 1.6.3 libraries for Windows -

PostgreSQL 9.x - pg_read_binary_file & inserting files into bytea -