MySQL 关系和连接

标签 mysql database relational-database innodb

在MySQL数据库中,表与表之间存在关系,一个表的主键作为外键存储在第二个表中,是否还需要执行连接?

如果有,声明关系有什么意义?我会在黑暗中刺一下,说这与索引有关,或者相关表可以更快地找到相关记录?我试过用谷歌搜索这个,但似乎找不到太多。我敢肯定这方面有很多内容,但我不知道要搜索的关键字。

这是表 1 和表 2 的示例:

------------------- Table 1 ----------------------
CREATE TABLE IF NOT EXISTS `db_hint`.`user` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`fb_id` INT NOT NULL,
`last_logged_in` DATETIME NULL,
`permissions` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `permissions_id_idx` (`permissions` ASC),
CONSTRAINT `permissions_id`
FOREIGN KEY (`permissions`)
REFERENCES `db_hint`.`permissions` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

----------------- Table 2 ----------------------
CREATE TABLE IF NOT EXISTS `db_hint`.`user_stat` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED NOT NULL,
PRIMARY KEY (`id`),
INDEX `user_id_idx3` (`user_id` ASC),
CONSTRAINT `user_id`
FOREIGN KEY (`user_id`)
REFERENCES `db_hint`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

当执行任何类型的连接时,InnoDB 引擎是否以任何方式使用关系?谢谢。

最佳答案

声明外键的目的是为了保证数据的一致性。 您仍然需要 JOIN 才能获得所需的数据。 在 MySQL 中,外键会提高性能,但不要期望与索引有太大可比性。

关于MySQL 关系和连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30256985/

相关文章:

sql - 使用 graphviz 显示 SQL 脚本

javascript - 我想要两个 mysql 表与 group_concat 连接导致 json 数组

mysql - 实现共享评论表

c# - 将关系数据库数据表示为 XML 并使用 XPath 获取结果

mysql - 映射到另一个表(其实际值保存在 MySQL 中)的表的效率

php - 为什么 mysqli QUERY 有效,但相同的 PREPARED 语句版本返回 SQL 语法错误?

php - 使用 php 函数 stripslashes 保存数据库

sql - 存储工作时间并有效查询的最佳方式

MySQL 对多个表进行分区

php - MySQL 查询选择了太多行