-- 幂等补 ConcurrencyStamp:已存在则跳过 ADD,只做回填/NOT NULL。 -- 执行前请备份。 -- 先看现状(可选) SELECT TABLE_NAME, COLUMN_NAME, IS_NULLABLE, COLUMN_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('t_pickup_order', 't_pickup_order_line') AND COLUMN_NAME = 'ConcurrencyStamp'; -- ===== t_pickup_order ===== SET @sql := ( SELECT IF( EXISTS( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_pickup_order' AND COLUMN_NAME = 'ConcurrencyStamp' ), 'SELECT ''t_pickup_order.ConcurrencyStamp already exists'' AS info', 'ALTER TABLE `t_pickup_order` ADD COLUMN `ConcurrencyStamp` CHAR(36) NULL COMMENT ''并发戳'' AFTER `IsDeleted`' ) ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE `t_pickup_order` SET `ConcurrencyStamp` = UUID() WHERE `ConcurrencyStamp` IS NULL OR `ConcurrencyStamp` = ''; ALTER TABLE `t_pickup_order` MODIFY COLUMN `ConcurrencyStamp` CHAR(36) NOT NULL COMMENT '并发戳'; -- ===== t_pickup_order_line ===== SET @sql := ( SELECT IF( EXISTS( SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_pickup_order_line' AND COLUMN_NAME = 'ConcurrencyStamp' ), 'SELECT ''t_pickup_order_line.ConcurrencyStamp already exists'' AS info', 'ALTER TABLE `t_pickup_order_line` ADD COLUMN `ConcurrencyStamp` CHAR(36) NULL COMMENT ''并发戳'' AFTER `IsDeleted`' ) ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; UPDATE `t_pickup_order_line` SET `ConcurrencyStamp` = UUID() WHERE `ConcurrencyStamp` IS NULL OR `ConcurrencyStamp` = ''; ALTER TABLE `t_pickup_order_line` MODIFY COLUMN `ConcurrencyStamp` CHAR(36) NOT NULL COMMENT '并发戳';