What are MySQL foreign keys?

后端 未结 3 2019
时光取名叫无心
时光取名叫无心 2021-02-01 23:20

In an answer on Stack Overflow, I saw this code:

CREATE TABLE Favorites (
    user_id INT NOT NULL,
    movie_id INT NOT NULL,
    PRIMARY KEY (user_id, movie_id         


        
相关标签:
3条回答
  • 2021-02-01 23:53

    A foreign key describes a relationship between two tables. It has many benefits:

    • You can enforce that if a value is in the one table then it must also exist in the other table. Any attempt to break this constraint will give an error.
    • It allows database administrators or programmers to more easily understand the relationship between the tables just by looking at the table definitions.
    • It allows tools to inspect the schema and draw diagrams showing the relations between the tables, or create classes where the children of an object are accessible from the parent via members.
    • In InnoDB adding a foreign key also automatically adds an index on that column so that the join can be made efficiently in either direction. (Source)

    If you are using MyISAM then foreign keys are not supported.

    0 讨论(0)
  • 2021-02-02 00:01

    A foreign key is a reference to a primary key in another table or the table itself. It is used for what is called referential integrity. Basically in your table provided, for a Record to be inserted into Favorites - you would have to supply a valid user_id from the Users table, and a valid movie_id from the Movies table. With Foreign keys enforces, I could not delete a record from Users or Movies. If I didn't have foreign keys, I could delete those records. Then if I did a SELECT ... JOIN on Favorites it would break.

    See Wikipedia.

    0 讨论(0)
  • 2021-02-02 00:02

    You can also add the ability to cascade when a related record is deleted. For example if I have a library table with many books in a related "book" table and I delete a given library from my library table its' dependent book records will also be deleted.

    0 讨论(0)
提交回复
热议问题