-- ============================================================= -- CRM units: mark system default units as not editable/deletable -- Table: yz_backend_crm_unit -- is_default = 1 -> system default unit (seeded by the system, -- cannot be edited or deleted by tenants) -- is_default = 0 -> tenant custom unit (full CRUD) -- Existing seeded default units (matched by name) are marked below; -- the backend also self-heals the flag on first use after upgrade. -- Run: mysql --default-character-set=utf8mb4 -h -P -u -p < alter_crm_unit_default.sql -- (re-running only reports "Duplicate column name", which is safe) -- ============================================================= -- 可重复执行:列不存在时才执行 ALTER,已存在自动跳过(不再报 1060 Duplicate column)。 SET @tbl := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_crm_unit'); SET @col := (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'yz_backend_crm_unit' AND COLUMN_NAME = 'is_default'); SET @ddl := IF(@tbl > 0 AND @col = 0, 'ALTER TABLE `yz_backend_crm_unit` ADD COLUMN `is_default` TINYINT NOT NULL DEFAULT 0 COMMENT ''1=system default unit (read-only), 0=tenant custom'' AFTER `status`', 'DO 0'); PREPARE stmt FROM @ddl; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- Mark seeded default units (same list as backend crmDefaultUnits) UPDATE `yz_backend_crm_unit` SET `is_default` = 1 WHERE `name` IN ('套', '台', '个', '件', '批', '次', '项', '人月', '人天', '年', '月', '米', '平方米', '吨', '千克', '箱');