98 lines
2.7 KiB
SQL
98 lines
2.7 KiB
SQL
-- ===========================================
|
||
-- 班级操行分管理系统 - v1.0 → v1.1 升级脚本
|
||
-- 字符集: utf8mb4
|
||
--
|
||
-- 变更内容:
|
||
-- 1. users 表添加 need_change_password 列
|
||
-- 2. users 表添加 last_login_time 列
|
||
-- 3. users 表添加 last_login_ip 列
|
||
-- 4. users 表 password_hash 字段扩展至 VARCHAR(255)
|
||
--
|
||
-- 兼容性: 使用存储过程实现幂等,phpMyAdmin 可直接执行
|
||
-- ===========================================
|
||
|
||
-- 升级步骤 1: users 添加 need_change_password 列
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
DELIMITER $$
|
||
CREATE PROCEDURE `upgrade_step`()
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'users'
|
||
AND COLUMN_NAME = 'need_change_password'
|
||
) THEN
|
||
ALTER TABLE `users`
|
||
ADD COLUMN `need_change_password` TINYINT DEFAULT 1
|
||
AFTER `status`;
|
||
END IF;
|
||
END$$
|
||
DELIMITER ;
|
||
|
||
CALL `upgrade_step`();
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
|
||
-- 升级步骤 2: users 添加 last_login_time 列
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
DELIMITER $$
|
||
CREATE PROCEDURE `upgrade_step`()
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'users'
|
||
AND COLUMN_NAME = 'last_login_time'
|
||
) THEN
|
||
ALTER TABLE `users`
|
||
ADD COLUMN `last_login_time` DATETIME DEFAULT NULL
|
||
AFTER `need_change_password`;
|
||
END IF;
|
||
END$$
|
||
DELIMITER ;
|
||
|
||
CALL `upgrade_step`();
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
|
||
-- 升级步骤 3: users 添加 last_login_ip 列
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
DELIMITER $$
|
||
CREATE PROCEDURE `upgrade_step`()
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'users'
|
||
AND COLUMN_NAME = 'last_login_ip'
|
||
) THEN
|
||
ALTER TABLE `users`
|
||
ADD COLUMN `last_login_ip` VARCHAR(45) DEFAULT NULL
|
||
AFTER `last_login_time`;
|
||
END IF;
|
||
END$$
|
||
DELIMITER ;
|
||
|
||
CALL `upgrade_step`();
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
|
||
-- 升级步骤 4: password_hash 字段扩展至 VARCHAR(255)
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|
||
DELIMITER $$
|
||
CREATE PROCEDURE `upgrade_step`()
|
||
BEGIN
|
||
DECLARE v_col_len INT;
|
||
SELECT CHARACTER_MAXIMUM_LENGTH INTO v_col_len
|
||
FROM INFORMATION_SCHEMA.COLUMNS
|
||
WHERE TABLE_SCHEMA = DATABASE()
|
||
AND TABLE_NAME = 'users'
|
||
AND COLUMN_NAME = 'password_hash';
|
||
|
||
IF v_col_len < 255 THEN
|
||
ALTER TABLE `users`
|
||
MODIFY COLUMN `password_hash` VARCHAR(255) NOT NULL;
|
||
END IF;
|
||
END$$
|
||
DELIMITER ;
|
||
|
||
CALL `upgrade_step`();
|
||
DROP PROCEDURE IF EXISTS `upgrade_step`;
|