我阅读了this和this问题,但我无法解决。
MariaDB v1.6.12、PhpMyAdmin v5.1.1、Ubuntu 22.04.
这是我的
orders
桌子:
orders CREATE TABLE `orders` (
`id` varchar(16) NOT NULL COMMENT 'Id',
`machine` varchar(8) NOT NULL COMMENT 'Macchina',
`reference` varchar(255) NOT NULL COMMENT 'Riferimento',
`article` varchar(255) NOT NULL COMMENT 'Articolo',
`length` int(11) NOT NULL DEFAULT 0 COMMENT 'Q.tà',
`date` date NOT NULL DEFAULT current_timestamp() COMMENT 'Data',
`states_id` int(11) NOT NULL COMMENT 'Stato',
PRIMARY KEY (`id`,`machine`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
这是我的
states
桌子:
states CREATE TABLE `states` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(32) NOT NULL,
`label` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
我想在
orders.states_id
和states.id
之间创建一个外键。
这里建议的 SQL 和 UI 图片:
ALTER TABLE `orders` ADD CONSTRAINT `state_fk` FOREIGN KEY (`states_id`) REFERENCES `states`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
但它返回错误:
但是
states.id
和orders.states_id
都是int(11)
而不是NULL。 states.id
是主键。
它们之间阻止创建外键的区别是什么?