简体   繁体   中英

Mysql foreign key

so i am trying again and again to make a column as a foreign key but it gives me Constraint name error? what Constraint name should i put? i am using PHPmyadmin SQL , I tried giving it names such as trackid and so on but still i am getting an error

ALTER TABLE `ss_ordered_carts`
  ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
    REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
    ON DELETE RESTRICT ON UPDATE CASCADE;

MySQL said: Documentation

  • 1452 - Cannot add or update a child row: a foreign key constraint fails ( projectdatabase .

    '#sql-1414_6c7'>, CONSTRAINT track_id FOREIGN KEY ( track_id ) REF

    ERENCES ss_orders ( track_id ) ON UPDATE CASCADE)

If you have data in child table for the referred column field, to add foreign key on that field,

  1. first you have to disable foreign key checking.
  2. And then alter to add foreign key .
  3. And lastly reset the constraint checking.

Step 1 : Disable the foreign key checks.

set foreign_key_checks=0;

Step 2 : Now add the foreign key constraint.

ALTER TABLE `ss_ordered_carts`
  ADD CONSTRAINT `track_id` FOREIGN KEY (`track_id`)
    REFERENCES `ProjectDatabase`.`ss_orders` (`track_id`)
    ON DELETE RESTRICT ON UPDATE CASCADE;

Step 3 : Now reset the foreign key checks.

set foreign_key_checks=1;

It is possible that you have table ss_ordered_carts filled with wrong data, that cannot be related. Check it using this query -

SELECT * FROM ss_ordered_carts t1
  LEFT JOIN ss_orders t2
    ON t1.track_id = t2.track_id
WHERE
  t2.track_id IS NULL;

Then modify table's data, and after, create foreign key.

Try this.

mysql> SET foreign_key_checks = 0;

mysql> ALTER TABLE ss_ordered_carts
ADD CONSTRAINT track_id
FOREIGN KEY(track_id)
REFERENCES ss_orders(track_id)

mysql> SET foreign_key_checks = 1;

May be, you are getting the specified error as there exists data in the tables.

This may also occur if child table contain some data with the foreign key that that are not in parent table. In this case try,

Delete from child where child_id NOT IN (select parent_id from parent where parent.id = child.id) 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM