Mysql批量新增/修改SQL
批量新增
如果你需要从另一个表中选择数据并插入到目标表中,可以使用 INSERT INTO … SELECT 语法。例如:
INSERT INTO your_table (column1, column2, column3)
SELECT columnA, columnB, columnC
FROM another_table
WHERE some_condition;
批量修改
- 使用 UPDATE 语句结合 CASE 表达式
你可以使用 UPDATE 语句结合 CASE 表达式来根据不同的条件批量修改多行数据。例如:
UPDATE your_table
SET column_to_update = CASE
WHEN condition1 THEN new_value1
WHEN condition2 THEN new_value2
-- 可以添加更多的 WHEN 条件
ELSE column_to_update -- 如果没有匹配的条件,则保持原值
END
WHERE condition_to_limit_update; -- 可选,用于限制更新的范围
在这个例子中,condition1、condition2 等是你要用来判断哪些行需要更新的条件,new_value1、new_value2 等是对应的新值。condition_to_limit_update 是一个可选的条件,用于限制哪些行会被考虑进行更新(例如,你可能只想更新某个特定日期之后的数据)。
- 使用临时表或派生表(子查询)
有时,你可能需要从一个临时表或派生表(子查询)中获取要更新的值。例如:
UPDATE your_table AS t1
JOIN (
SELECT id, new_value
FROM another_table_or_subquery
WHERE some_condition
) AS t2 ON t1.id = t2.id
SET t1.column_to_update = t2.new_value;
在这个例子中,another_table_or_subquery 可以是一个实际的表,也可以是一个子查询,它返回要更新的行的 ID 和新值。然后,通过 JOIN 操作将这些值与原始表匹配,并更新相应的列。
操作实例展示:
CREATE TABLE `t_city` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`city_code` VARCHAR(32) NOT NULL COMMENT '主键,城市标识',
`city_name` VARCHAR(64) NULL DEFAULT NULL COMMENT '城市名称',
`province_id` VARCHAR(32) NOT NULL COMMENT '城市所在省,自治区,直辖市标识,来源于PROVINCE表province_id',
`longitude` VARCHAR(128) NULL DEFAULT NULL COMMENT 'POI位置 经度度格式(6位小数)',
`latitude` VARCHAR(128) NULL DEFAULT NULL COMMENT 'POI 位置 纬度 度格式(6位小数)',
`province_capital` INT(1) NULL DEFAULT '0' COMMENT '是否省会城市,0:不是,1:是,每个省只能有一个,地图上取省位置时取该记录的经纬度',
`note` VARCHAR(512) NULL DEFAULT NULL COMMENT '省,自治区,直辖市说明',
PRIMARY KEY (`id`),
INDEX `index_city_code` (`city_code`) USING BTREE
)
COMMENT='城市表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=375;
--实际SQL
UPDATE t_city_zkw_test AS t1
JOIN (
SELECT city_name, province_id,longitude,latitude,note
FROM t_city
) AS t2 ON t1.city_name = t2.city_name
SET
t1.province_id = t2.province_id,
t1.longitude = t2.longitude,
t1.latitude = t2.latitude,
t1.note = t2.note;