gpt4 book ai didi

InnoDB 的 MySQL 语法

转载 作者:行者123 更新时间:2023-11-29 04:28:47 26 4
gpt4 key购买 nike

所以我接管了一个数据库,但在理解这四行的确切含义时遇到了一些麻烦。我意识到这些行正在强制执行数据库的关系方面,但我希望准确指出此语法在做什么。

  1. 键 x (y):
    它是什么?/location_sh 与 dep_name、cat_name 和 loc_name 的关系是什么?
  2. 约束
    这似乎使 owner 与表 users 中的列 username 相关联,但为什么需要约束部分(即约束 location_sh 做什么)?
  3. ON DELETE SET NULL, ON UPDATE CASCADE
    只需检查删除或更改用户名时是否反射(reflect)了删除或更改。
  4. 我应该对此代码段进行任何更改吗?

    KEY `location_sh` (`dep_name`,`cat_name`,`loc_name`),
    KEY `owner_sh` (`owner`),
    CONSTRAINT `location_sh` FOREIGN KEY (`dep_name`, `cat_name`, `loc_name`)
    REFERENCES `locations` (`dep_name`, `cat_name`, `loc_name`)
    ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `owner_sh` FOREIGN KEY (`owner`) REFERENCES `users` (`username`)
    ON DELETE SET NULL ON UPDATE CASCADE

最佳答案

这个:

KEY `location_sh` (`dep_name`,`cat_name`,`loc_name`)

..定义一个名为“location_sh”的覆盖索引。我指定了“覆盖索引”,因为索引声明包含不止一列。

KEY `owner_sh` (`owner`)

...不使用超过一列,所以它只是一个 index . KEY 是 MySQL 特定于索引的语法——尽管目前 ANSI 未涵盖,但每个数据库都实现索引并使用类似的术语(以某种方式)。

其余的 CONSTRAINT 声明:

CONSTRAINT `location_sh` FOREIGN KEY (`dep_name`, `cat_name`, `loc_name`) 
REFERENCES `locations` (`dep_name`, `cat_name`, `loc_name`)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `owner_sh` FOREIGN KEY (`owner`) REFERENCES `users` (`username`)
ON DELETE SET NULL ON UPDATE CASCADE

...是foreign key constraints .它们用于强制执行参照完整性——定义的列只能具有已存在于语句的 REFERENCES 部分指定的表列中的值。

关于 ON DELETE ... - 文档说:

The action InnoDB takes for any UPDATE or DELETE operation that attempts to update or delete a candidate key value in the parent table that has some matching rows in the child table is dependent on the referential action specified using ON UPDATE and ON DELETE subclauses of the FOREIGN KEY clause. When the user attempts to delete or update a row from a parent table, and there are one or more matching rows in the child table, InnoDB supports five options regarding the action to be taken. If ON DELETE or ON UPDATE are not specified, the default action is RESTRICT.

您应该做出哪些改变?

除了句法(看起来是正确的)之外,我们没有上下文可以判断什么是对的或错的。这完全取决于您的数据以及该数据的业务规则。

关于InnoDB 的 MySQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6286174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com