【发布时间】:2020-09-21 04:41:19
【问题描述】:
我有如下数据:
id table column add edit delete view
1 vendors city 0 0 0 1
1 vendors state 0 0 0 1
1 vendors zip 0 0 0 1
我正在尝试使用类似的查询执行批量更新:
UPDATE user_perms SET add = ?, edit = ?, delete = ?, view = ?
WHERE id = ? AND table_name = ? AND column_name = ?
无需遍历列表并运行此查询 X 次,MySQL 是否支持一次性批量更新的方法?
创建表STMT:
CREATE TABLE `user_perms` (
`up_id` int unsigned NOT NULL AUTO_INCREMENT,
`id` int unsigned DEFAULT NULL,
`table_name` varchar(255) DEFAULT NULL,
`column_name` varchar(255) DEFAULT NULL,
`add` int unsigned DEFAULT NULL,
`edit` int unsigned DEFAULT NULL,
`delete` int unsigned DEFAULT NULL,
`view` int unsigned DEFAULT NULL,
PRIMARY KEY (`up_id`),
UNIQUE KEY `up_id_UNIQUE` (`up_id`),
KEY `fk_idx` (`id`),
CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=1659 DEFAULT CHARSET=utf8
【问题讨论】:
-
不需要循环,它将根据您的
WHERE id = ?where 条件更新所有匹配记录。 -
但我需要更改各种表+列组合的添加、编辑、删除或查看
-
SQL 中的更新默认是批量更新。这意味着更新可以针对
WHERE子句允许的尽可能多的记录。 -
@TimBiegeleisen,对,但我可能需要供应商 + 城市的组合为 1、1、0、0,而我需要供应商 + zip 的组合为 0、1、0、1,所以在那个你将如何处理批量更新?
-
@dataviews 根据您的表格,您在上面给定的表格中存储其他表格的详细信息,并且您需要动态更新,然后可能需要循环。
标签: mysql mysql-python