MySQL如何设置列来引用另一个表中的列

Gal*_*Gal 1 mysql

我想在tableA中定义columnA的值,以获得tableB中tableB.columnB所有行的计数

我有两张桌子:

articles table
columns: articleId,numComments
comments table
columns: articleId,content
Run Code Online (Sandbox Code Playgroud)

我希望表"articles"中的numComments列包含表注释中所有行的计数 articles.articleId=comments.articleId

我是否需要将其中任何一个设置为"innodb"?

Sve*_*hal 7

我是否需要将其中任何一个设置为"innodb"?

是! InnoDB是唯一支持外键的mysql引擎.你必须做以下事情:

ALTER TABLE comments ADD CONSTRAINT
        FOREIGN KEY (articleId)
        REFERENCES articles(articleId);
Run Code Online (Sandbox Code Playgroud)

或者如果您只是创建表:

CREATE TABLE comments
    (articleId INT,
     content INT,
        FOREIGN KEY (articleId)
        REFERENCES articles(articleId);
        ON DELETE CASCADE // You probably want the comments to be deleted,
                          // whenever the article is deleted
    ) ENGINE=INNODB;
Run Code Online (Sandbox Code Playgroud)

请参阅:http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

而对于numComments列:最好做一个

SELECT count(articleId) FROM comments WHERE articleId=selectedArticleId;
Run Code Online (Sandbox Code Playgroud)