早上好,我在研究SQL,今天我发现了两种声明外键的方法(对于MySQL)。我想知道它在这两种语法之间会发生什么变化,为什么我需要为外键设置一个名称(语法2)。这两种声明外键的方法有什么不同?
语法1:
CREATE TABLE `test2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idtest` int(10) unsigned NOT NULL,
`desc` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (`idtest`) REFERENCES `test` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
语法2:
CREATE TABLE `test2` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idtest` int(10) unsigned NOT NULL,
`desc` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_1` (`idtest`),
CONSTRAINT `FK_1` FOREIGN KEY (`idtest`) REFERENCES `test` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
谢谢!
他们只是表达2的同样的事情的方式。表达FK的第一种方式将作为您在那里输入的第二种形式来实现,换句话说,它们将作为约束来实现。 – Icarus
@Icarus无论您是否拥有'CONSTRAINT'关键字,它都是一个约束。 – NullUserException