address
等效的以下两个外键定义吗?我的意思是,它们是否最终获得了相同的有效数据库元素(索引,约束等(。我更喜欢后者,因为它是一个速记,而不是输入。
在这里,地址索引和约束是明确创建的:
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;
其他有区别要注意?
从功能的角度来看,这些声明是等效的。不同之处在于,第一个摘要设置了一个友好的名称,以后更容易维护,第二个片段将创建一些自动生成的名称。