Mysql 这些FK定义是否等效?

Mysql 这些FK定义是否等效?,mysql,sql,foreign-keys,schema,ddl,Mysql,Sql,Foreign Keys,Schema,Ddl,地址的以下两个外键定义是否等效?我的意思是,它们最终是否具有相同的有效数据库元素(索引、约束等)。我更喜欢后者,因为它是一种速记方式,而且打字不太方便 这里显式创建地址索引和约束: CREATE TABLE customer ( customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, first_name VARCHAR(45) NOT NULL, last_name VARCHAR(45) NOT NULL, PRIMARY

地址的以下两个外键定义是否等效?我的意思是,它们最终是否具有相同的有效数据库元素(索引、约束等)。我更喜欢后者,因为它是一种速记方式,而且打字不太方便

这里显式创建地址索引和约束:

CREATE TABLE customer (
  customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(45) NOT NULL,
  last_name VARCHAR(45) NOT NULL,
  PRIMARY KEY  (customer_id),
  KEY idx_fk_address_id (address_id),
  CONSTRAINT fk_customer_address FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
这里是否也创建了约束和索引

CREATE TABLE customer (
  customer_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(45) NOT NULL,
  last_name VARCHAR(45) NOT NULL,
  PRIMARY KEY  (customer_id),
  FOREIGN KEY (address_id) REFERENCES address (address_id) ON DELETE RESTRICT ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

需要注意的任何其他差异?

从功能角度来看,这些声明是等效的。不同之处在于,第一个代码段设置了一个友好的名称,以后更容易维护,而第二个代码段将创建一些自动生成的名称。

我更喜欢命名约束,在需要禁用或删除它时更容易维护。您不是也可以禁用它的隐式按约定生成的约束名称吗?是,您将获得自动生成的名称,但随后需要读取元数据表。第二,当您使用模式比较软件时,数据库是从头设置的,第二次它可能会显示为差异(取决于选项)。显式比隐式好。只有65000个客户?来吧你的雄心何在@草莓LOL:D