Mysql批量新增/修改SQL

Mysql批量新增/修改SQL

批量新增

如果你需要从另一个表中选择数据并插入到目标表中,可以使用 INSERT INTO … SELECT 语法。例如:

INSERT INTO your_table (column1, column2, column3)  
SELECT columnA, columnB, columnC  
FROM another_table  
WHERE some_condition;

批量修改

  1. 使用 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 是一个可选的条件,用于限制哪些行会被考虑进行更新(例如,你可能只想更新某个特定日期之后的数据)。

  1. 使用临时表或派生表(子查询)
    有时,你可能需要从一个临时表或派生表(子查询)中获取要更新的值。例如:
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值