如果满足某些条件,我想在表(如下所示)获得新插入时自动删除行。
什么时候:
- 有行引用具有相同“user_id”的相同“字段”
- 它们的“字段”、“显示”和“搜索”列是相同的
简单地说,当行重复时(“group_id”列除外),非空“group_id”应该被删除,否则应该更新或插入一行。
有没有办法在 mysql 中设置它(本着“ON DUPLICATE do stuff ”结合唯一键等的精神),还是我必须在 php 中明确检查它(有多个查询)?
附加信息:对于每个可能的“字段”,应该总是有一行带有 NULL 的“group_id”(有一个有限的集合,在别处定义)。另一方面,可能没有一个非空“group_id”。
CREATE TABLE `Views` (
`user_id` SMALLINT(5) UNSIGNED NOT NULL,
`db` ENUM('db_a','db_b') NOT NULL COLLATE 'utf8_swedish_ci',
`field` VARCHAR(40) NOT NULL COLLATE 'utf8_swedish_ci',
`display` TINYINT(1) UNSIGNED NOT NULL,
`search` TINYINT(1) UNSIGNED NOT NULL,
`group_id` SMALLINT(6) UNSIGNED NULL DEFAULT NULL,
UNIQUE INDEX `user_id` (`field`, `db`, `user_id`),
INDEX `Views_ibfk_1` (`user_id`),
INDEX `group_id` (`group_id`),
CONSTRAINT `Views_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`) ON
UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='utf8_swedish_ci'
ENGINE=InnoDB;