这些 FK 定义是否等价?
Are these FK definitions equivalent?
下面两个address
的外键定义是否等价?我的意思是它们最终是否具有相同的有效数据库元素(索引、约束等)。我更喜欢后者,因为它是 shorthand 并且输入更少。
此处显式创建地址索引和约束:
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;
还有其他需要注意的区别吗?
从功能的角度来看,这些声明是等效的。不同之处在于第一个代码片段设置了一个便于以后维护的友好名称,第二个代码片段将创建一些 auto-generated 名称。
下面两个address
的外键定义是否等价?我的意思是它们最终是否具有相同的有效数据库元素(索引、约束等)。我更喜欢后者,因为它是 shorthand 并且输入更少。
此处显式创建地址索引和约束:
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;
还有其他需要注意的区别吗?
从功能的角度来看,这些声明是等效的。不同之处在于第一个代码片段设置了一个便于以后维护的友好名称,第二个代码片段将创建一些 auto-generated 名称。