47 lines
2.1 KiB
SQL
47 lines
2.1 KiB
SQL
-- =============================================================
|
||
-- yz_system_modules 增加「是否必须登录」字段 require_login
|
||
--
|
||
-- 用途:Platform 模块管理可配置某业务模块是否允许移动端免登录访问。
|
||
-- 1 = 必须登录(默认,保持既有行为)
|
||
-- 0 = 可免登录使用
|
||
--
|
||
-- 幂等:MySQL 的 ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,
|
||
-- 重复执行会报 1060 Duplicate column name。这里用 information_schema
|
||
-- 判断列是否存在,缺失才拼 ADD COLUMN,再通过 PREPARE 执行。
|
||
-- 约定:本脚本在 mysql 客户端手动执行(同一会话保持 PREPARE 生效)。
|
||
-- =============================================================
|
||
|
||
SET @sql := CONCAT(
|
||
'ALTER TABLE `yz_system_modules` ',
|
||
IF(
|
||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'yz_system_modules'
|
||
AND COLUMN_NAME = 'require_login') = 0,
|
||
'ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1 COMMENT ''1=必须登录 0=可免登录使用'' AFTER `is_show`',
|
||
''
|
||
)
|
||
);
|
||
|
||
-- 列已存在时 @sql 仅剩 'ALTER TABLE `yz_system_modules` ',替换为无害语句
|
||
SET @sql := IF(RIGHT(TRIM(@sql), 1) = '`', 'SELECT 1 AS column_already_exists', @sql);
|
||
|
||
PREPARE stmt FROM @sql;
|
||
EXECUTE stmt;
|
||
DEALLOCATE PREPARE stmt;
|
||
|
||
-- =============================================================
|
||
-- 方案 B(兜底):不支持会话变量 / PREPARE 的执行器(工单系统等),
|
||
-- 改用下面的纯静态语句。注意:本条不幂等,列已存在会报
|
||
-- 1060 Duplicate column,执行前先用 information_schema 自查:
|
||
--
|
||
-- SELECT COUNT(*) FROM information_schema.COLUMNS
|
||
-- WHERE TABLE_SCHEMA = DATABASE()
|
||
-- AND TABLE_NAME = 'yz_system_modules'
|
||
-- AND COLUMN_NAME = 'require_login'; -- 返回 0 才执行 ALTER
|
||
--
|
||
-- ALTER TABLE `yz_system_modules`
|
||
-- ADD COLUMN `require_login` TINYINT NOT NULL DEFAULT 1
|
||
-- COMMENT '1=必须登录 0=可免登录使用' AFTER `is_show`;
|
||
-- =============================================================
|