Files
yunzerwebsiteallinone/go/docs/sql/alter_system_modules_require_login.sql
T
2026-11-03 11:13:59 +08:00

47 lines
2.1 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================
-- 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`;
-- =============================================================