Daevid, CONSTRAINT `0_359` FOREIGN KEY (`rep_company_code`) REFERENCES `company_table` (`company_code`)
you do not have ON UPDATE CASCADE in your constraint. MySQL versions < 4.0.8 ignored it. Best regards, Heikki Tuuri Innobase Oy http://www.innodb.com Foreign keys, transactions, and row level locking for MySQL InnoDB Hot Backup - a hot backup tool for MySQL ----- Original Message ----- From: "Daevid Vincent" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Cc: "'Heikki Tuuri'" <[EMAIL PROTECTED]> Sent: Friday, September 12, 2003 4:01 AM Subject: RE: Foreign key update and Error :: 1217 with v4.0.15 Heikki, I took your advice and installed the RPM updates to no avail: [root]# rpm -qa | grep "mysql" -i MySQL-server-4.0.15-0 mod_auth_mysql-1.11-1 MySQL-devel-4.0.15-0 MySQL-shared-4.0.15-0 php-mysql-4.1.2-7.2.6 MySQL-client-4.0.15-0 MySQL-shared-compat-4.0.15-0 And it seems to be running... mysql> \s -------------- mysql Ver 12.21 Distrib 4.0.15, for pc-linux (i686) Connection id: 1 Current database: mysql Current user: [EMAIL PROTECTED] SSL: Not in use Current pager: stdout Using outfile: '' Server version: 4.0.15-standard Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: latin1 Server characterset: latin1 UNIX socket: /tmp/mysql.sock Uptime: 1 min 53 sec Also, I noticed that my phpinfo() shows "Client API version = 3.23.56" -- is that normal? But oddly enough, my phpMyAdmin page shows "MySQL 4.0.15-standard running on localhost as [EMAIL PROTECTED]" Anyways, back to the real problem... Updating via my web page produced the error 1217, so thinking that the PHP/mySQL version mentioned above might be a factor, I just logged into the mysql CLI program (Ver 12.21 Distrib 4.0.15, for pc-linux (i686)) and exectued the query directly there. However I still get the same error... mysql> UPDATE company_table SET company_code = 'bunk1234' WHERE company_id = '91' LIMIT 1; ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails I looked at some InnoDB status log that phpMyAdmin has, and it shows some debug info that doesn't make sense to me. It complains that there is a record, but of course there is a record. That's the record I want to update?! ------------------------ LATEST FOREIGN KEY ERROR ------------------------ 030911 17:41:07 Transaction: TRANSACTION 0 913922, ACTIVE 0 sec, process no 24665, OS thread id 36874 updating or deleting, thread declared inside InnoDB 499 mysql tables in use 1, locked 1 4 lock struct(s), heap size 320, undo log entries 1 MySQL thread id 1, query id 3118 localhost root Updating UPDATE company_table SET company_code = 'bunk1234', Foreign key constraint fails for table crimson/rep_table: , CONSTRAINT `0_359` FOREIGN KEY (`rep_company_code`) REFERENCES `company_table` (`company_code`) Trying to delete or update in parent table, in index company_code tuple: 0: len 8; hex 62756e6b34333231; asc bunk4321;; 1: len 3; hex 00005b; asc ..[;; But in child table crimson/rep_table, in index rep_company_code, there is a record: RECORD: info bits 0 0: len 8; hex 62756e6b34333231; asc bunk4321;; 1: len 2; hex 0001; asc ..;; > -----Original Message----- > From: Heikki Tuuri [mailto:[EMAIL PROTECTED] > Sent: Thursday, September 11, 2003 12:45 PM > To: [EMAIL PROTECTED] > Subject: Re: Foreign key update and Error :: 1217 > > > Daevid, > > there is really one update you need to do first: upgrade to > MySQL-4.0.14. > > http://www.innodb.com/ibman.html#InnoDB_foreign_keys > " > Starting from version 3.23.50, you can also associate the ON > DELETE CASCADE > or ON DELETE SET NULL clause with the foreign key constraint. > Corresponding > ON UPDATE options are available starting from 4.0.8. > " > > Best regards, > > Heikki Tuuri > Innobase Oy > http://www.innodb.com > Foreign keys, transactions, and row level locking for MySQL > InnoDB Hot Backup - a hot backup tool for MySQL > > > ----- Original Message ----- > From: ""Daevid Vincent"" <[EMAIL PROTECTED]> > Newsgroups: mailing.database.myodbc > Sent: Thursday, September 11, 2003 9:10 PM > Subject: RE: Foreign key update and Error :: 1217 > > > > I really appreciate your help with this. > > > > Hmmm... So, while SET FOREIGN_KEY_CHECKS allowed me to > ALTER the table, = > > now > > I can't UPDATE the company that has a rep with the same company_code > > because: > > > > Error :: 1217 :: Cannot delete a parent row: a foreign key > constraint = > > fails > > UPDATE company_table SET company_name =3D 'InteractNetworks, Inc', > > company_code =3D 'TEST1234', ... > > > > However, I can update a company that doesn't have a > company_code set = > > (and so > > no reps either). > > I can also manually change the rep_company_code. > > But once again, if I try to change the company that has a > code that a = > > rep > > also has the same code, I get that error 1217 above. > > > > > You should fix your data first: find rows in the rep_table=20 > > > that don't have parent row in the the company_table, then add=20 > > > parent row(s) to the company_table for those rows or delete=20 > > > child row(s) from rep_table. After that you can create=20 > > > FOREIGN KEY with ON UPDATE CASCADE. > > > > I don't follow you here. I don't think I have rows in the > child (rep) = > > table > > that don't have a match in the parent (company) table. > > > > mysql> select rep_id, rep_fname, rep_company_code from > rep_table; = > > =20 > > +--------+-------------+------------------+ > > | rep_id | rep_fname | rep_company_code | > > +--------+-------------+------------------+ > > | 1 | Daevid | bunk4321 | > > | 5 | Test | interact | > > | 8 | Mark | interact | > > | 9 | Joe | interact | > > [ snip ] > > | 10 | Tony | interact | > > | 15 | Bob | interact | > > | 17 | John | interact | > > +--------+-------------+------------------+ > > 17 rows in set (0.00 sec) > > > > There are holes because some reps were deleted. > > > > But as I'm just building this portion of the CRM, I have only used > > "interact" and "bunk4321" as the rep_company_code and also in the > > company_table as company_code. I had set these manually in > each table. > > > > mysql> select company_id, company_name, company_code from > company_table > > limit 5; > > +------------+-------------------------+--------------+ > > | company_id | company_name | company_code | > > +------------+-------------------------+--------------+ > > | 7 | City Of Seattle | | > > | 8 | Port of Seattle | | > > | 9 | Test Company | | > > | 10 | Metropolitian | | > > | 11 | DIO, Inc. | | > > | 91 | Bunk Company | bunk4321 | > > [snip] > > | 276 | InteractNetworks, Inc | interact | > > +------------+-------------------------+--------------+ > > > > > -----Original Message----- > > > "Daevid Vincent" <[EMAIL PROTECTED]> wrote: > > > > > > > > ALTER TABLE rep_table ADD FOREIGN KEY (`rep_company_code`)=20 > > > REFERENCES > > > > `company_table` (`company_code`) ON UPDATE CASCADE; > > > >=20 > > > > But get "ERROR 1216: Cannot add a child row: a foreign key=20 > > > constraint fails" > > >=20 > > > It means that you have row(s) in the child table that doesn't=20 > > > have parent row. > > > > > > > > -- > > MySQL General Mailing List > > For list archives: http://lists.mysql.com/mysql > > To unsubscribe: > http://lists.mysql.com/[EMAIL PROTECTED] > > > > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: > http://lists.mysql.com/mysql?> [EMAIL PROTECTED] > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]