InnoDB mySQL unable to set "ON DELETE SET DEFAULT'. How to set?

前端 未结 3 1609
长发绾君心
长发绾君心 2021-01-18 19:24

I am trying to create a table named EMPLOYEE. When I use the following statements without \"ON DELETE SET DEFAULT\" it is working.

Here is the Error I get with \"ON

3条回答
  •  执念已碎
    2021-01-18 20:06

    You delete your parent table, which triggers the set default in the child. The DB tries to set the child records to their default 0. But there's no 0 record in the parent table, triggering the foreign key violation.

    Check out the MySQL manual about foreign key constrains:

    If you re-create a table that was dropped, it must have a definition that conforms to the foreign key constraints referencing it. It must have the right column names and types, and it must have indexes on the referenced keys, as stated earlier. If these are not satisfied, MySQL returns error number 1005 and refers to error 150 in the error message.

    A few ideas:

    • Better drop the tables and create it new with a well formed syntax.
    • Make sure to add ENGINE=InnoDB; to your CREATE TABLE - command.
    • Make sure InnoDB is enabled on your MySQL server. To verify this, try this command: SHOW VARIABLES LIKE 'have_innodb'; - if it returns a YES, then InnoDB is enabled.
    • Check your command for upper- and lowercases in table- and fieldnames.
    • Check this not only one the table you want to create, but also on the tables the foreign keys are referring to.
    • Make sure your referred tables are properly indexed.

    "When creating a foreign key constraint, MySQL requires a usable index on both the referencing table and also on the referenced table. The index on the referencing table is created automatically if one doesn't exist, but the one on the referenced table needs to be created manually (Source). Yours appears to be missing."

    See MySQL Foreign Key Error 1005 errno 150

提交回复
热议问题