186 lines
13 KiB
SQL
186 lines
13 KiB
SQL
-- ==============================
|
|
-- 修复 xg_student_info 表缺失字段 (MySQL 5.7兼容版本)
|
|
-- 创建时间: 2025-01-15
|
|
-- 说明: 使用存储过程检查字段是否存在,避免重复添加
|
|
-- ==============================
|
|
|
|
USE `hzdyjs_xg`;
|
|
|
|
-- 创建添加字段的存储过程
|
|
DELIMITER $$
|
|
|
|
DROP PROCEDURE IF EXISTS AddColumnIfNotExists$$
|
|
|
|
CREATE PROCEDURE AddColumnIfNotExists(
|
|
IN table_name VARCHAR(128),
|
|
IN column_name VARCHAR(128),
|
|
IN column_definition TEXT
|
|
)
|
|
BEGIN
|
|
DECLARE column_exists INT DEFAULT 0;
|
|
|
|
-- 检查字段是否存在
|
|
SELECT COUNT(*) INTO column_exists
|
|
FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = table_name
|
|
AND COLUMN_NAME = column_name;
|
|
|
|
-- 如果字段不存在,则添加
|
|
IF column_exists = 0 THEN
|
|
SET @sql = CONCAT('ALTER TABLE `', table_name, '` ADD COLUMN `', column_name, '` ', column_definition);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
SELECT CONCAT('Added column: ', column_name) as message;
|
|
ELSE
|
|
SELECT CONCAT('Column already exists: ', column_name) as message;
|
|
END IF;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|
|
-- 开始添加字段
|
|
SELECT 'Starting to add missing columns to xg_student_info table...' as message;
|
|
|
|
-- 1. 添加基本信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'nation', 'varchar(20) DEFAULT NULL COMMENT \'民族\' AFTER `birth_date`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'name_english', 'varchar(100) DEFAULT NULL COMMENT \'英文姓名\' AFTER `name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'former_name', 'varchar(50) DEFAULT NULL COMMENT \'曾用名\' AFTER `name_english`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'name_pinyin', 'varchar(200) DEFAULT NULL COMMENT \'姓名拼音\' AFTER `former_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'marital_status', 'varchar(10) DEFAULT NULL COMMENT \'婚姻状况:未婚、已婚、离异、丧偶\' AFTER `political_status`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'religion', 'varchar(20) DEFAULT NULL COMMENT \'宗教信仰\' AFTER `marital_status`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'photo_path', 'varchar(500) DEFAULT NULL COMMENT \'学生照片存储路径\' AFTER `photo_url`');
|
|
|
|
-- 2. 添加学籍信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'school_system', 'varchar(10) DEFAULT NULL COMMENT \'学制:3年制、4年制、5年制等\' AFTER `enrollment_year`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'education_level', 'varchar(20) DEFAULT NULL COMMENT \'培养层次:专科、本科、硕士、博士\' AFTER `school_system`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'training_type', 'varchar(20) DEFAULT NULL COMMENT \'培养方式:全日制、非全日制\' AFTER `education_level`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'admission_category', 'varchar(20) DEFAULT NULL COMMENT \'录取类别:统招、自主招生、推荐免试等\' AFTER `training_type`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'source_region', 'varchar(50) DEFAULT NULL COMMENT \'生源地区\' AFTER `admission_category`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'middle_school', 'varchar(100) DEFAULT NULL COMMENT \'毕业中学\' AFTER `source_region`');
|
|
|
|
-- 3. 添加联系信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'qq', 'varchar(20) DEFAULT NULL COMMENT \'QQ号码\' AFTER `email`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'wechat', 'varchar(50) DEFAULT NULL COMMENT \'微信号\' AFTER `qq`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'current_address', 'varchar(200) DEFAULT NULL COMMENT \'现住址\' AFTER `home_address`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'postal_code', 'varchar(10) DEFAULT NULL COMMENT \'邮政编码\' AFTER `current_address`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'domicile_place', 'varchar(100) DEFAULT NULL COMMENT \'户籍所在地\' AFTER `postal_code`');
|
|
|
|
-- 4. 添加宿舍信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'dormitory_building', 'varchar(20) DEFAULT NULL COMMENT \'宿舍楼栋\' AFTER `domicile_place`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'dormitory_room', 'varchar(20) DEFAULT NULL COMMENT \'宿舍房间号\' AFTER `dormitory_building`');
|
|
|
|
-- 5. 添加紧急联系人字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'emergency_contact_name', 'varchar(50) DEFAULT NULL COMMENT \'紧急联系人姓名\' AFTER `dormitory_room`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'emergency_contact_phone', 'varchar(20) DEFAULT NULL COMMENT \'紧急联系人电话\' AFTER `emergency_contact_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'emergency_contact_relation', 'varchar(20) DEFAULT NULL COMMENT \'紧急联系人关系\' AFTER `emergency_contact_phone`');
|
|
|
|
-- 6. 添加家庭信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'father_name', 'varchar(50) DEFAULT NULL COMMENT \'父亲姓名\' AFTER `emergency_contact_relation`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'father_phone', 'varchar(20) DEFAULT NULL COMMENT \'父亲电话\' AFTER `father_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'father_work_unit', 'varchar(100) DEFAULT NULL COMMENT \'父亲工作单位\' AFTER `father_phone`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'father_position', 'varchar(50) DEFAULT NULL COMMENT \'父亲职务\' AFTER `father_work_unit`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'mother_name', 'varchar(50) DEFAULT NULL COMMENT \'母亲姓名\' AFTER `father_position`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'mother_phone', 'varchar(20) DEFAULT NULL COMMENT \'母亲电话\' AFTER `mother_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'mother_work_unit', 'varchar(100) DEFAULT NULL COMMENT \'母亲工作单位\' AFTER `mother_phone`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'mother_position', 'varchar(50) DEFAULT NULL COMMENT \'母亲职务\' AFTER `mother_work_unit`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'family_income', 'decimal(10,2) DEFAULT NULL COMMENT \'家庭年收入\' AFTER `mother_position`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'family_members', 'int DEFAULT NULL COMMENT \'家庭成员数量\' AFTER `family_income`');
|
|
|
|
-- 7. 添加体征信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'height', 'decimal(5,2) DEFAULT NULL COMMENT \'身高(cm)\' AFTER `blood_type`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'weight', 'decimal(5,2) DEFAULT NULL COMMENT \'体重(kg)\' AFTER `height`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'health_status', 'varchar(20) DEFAULT NULL COMMENT \'健康状况:健康、一般、较差\' AFTER `weight`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'special_condition', 'varchar(200) DEFAULT NULL COMMENT \'特殊身体状况\' AFTER `health_status`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'medical_history', 'varchar(500) DEFAULT NULL COMMENT \'既往病史\' AFTER `special_condition`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'allergies', 'varchar(200) DEFAULT NULL COMMENT \'过敏史\' AFTER `medical_history`');
|
|
|
|
-- 8. 添加银行信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'bank_card_no', 'varchar(30) DEFAULT NULL COMMENT \'银行卡号\' AFTER `allergies`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'bank_name', 'varchar(50) DEFAULT NULL COMMENT \'开户银行\' AFTER `bank_card_no`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'bank_branch', 'varchar(100) DEFAULT NULL COMMENT \'开户支行\' AFTER `bank_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'card_holder_name', 'varchar(50) DEFAULT NULL COMMENT \'持卡人姓名\' AFTER `bank_branch`');
|
|
|
|
-- 9. 添加特殊标识字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_poor_student', 'tinyint(1) DEFAULT 0 COMMENT \'是否贫困生:0-否,1-是\' AFTER `card_holder_name`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_minority', 'tinyint(1) DEFAULT 0 COMMENT \'是否少数民族:0-否,1-是\' AFTER `is_poor_student`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_disabled', 'tinyint(1) DEFAULT 0 COMMENT \'是否残疾:0-否,1-是\' AFTER `is_minority`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_orphan', 'tinyint(1) DEFAULT 0 COMMENT \'是否孤儿:0-否,1-是\' AFTER `is_disabled`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_single_parent', 'tinyint(1) DEFAULT 0 COMMENT \'是否单亲家庭:0-否,1-是\' AFTER `is_orphan`');
|
|
|
|
-- 10. 添加扩展信息字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'specialties', 'varchar(500) DEFAULT NULL COMMENT \'特长爱好\' AFTER `is_single_parent`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'awards', 'text DEFAULT NULL COMMENT \'获奖情况\' AFTER `specialties`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'violations', 'text DEFAULT NULL COMMENT \'违纪记录\' AFTER `awards`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'social_activities', 'text DEFAULT NULL COMMENT \'社会实践活动\' AFTER `violations`');
|
|
|
|
-- 11. 添加状态管理字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'info_status', 'varchar(10) DEFAULT \'active\' COMMENT \'信息状态:active-正常,inactive-停用,graduated-已毕业\' AFTER `social_activities`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'data_source', 'varchar(20) DEFAULT \'manual\' COMMENT \'数据来源:manual-手动录入,import-批量导入,sync-同步\' AFTER `info_status`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'is_complete', 'tinyint(1) DEFAULT 0 COMMENT \'信息是否完整:0-不完整,1-完整\' AFTER `data_source`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'completion_rate', 'decimal(5,2) DEFAULT 0.00 COMMENT \'信息完整度百分比\' AFTER `is_complete`');
|
|
|
|
-- 12. 添加扩展字段
|
|
CALL AddColumnIfNotExists('xg_student_info', 'ext_field1', 'varchar(200) DEFAULT NULL COMMENT \'扩展字段1\' AFTER `completion_rate`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'ext_field2', 'varchar(200) DEFAULT NULL COMMENT \'扩展字段2\' AFTER `ext_field1`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'ext_field3', 'varchar(200) DEFAULT NULL COMMENT \'扩展字段3\' AFTER `ext_field2`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'ext_field4', 'varchar(200) DEFAULT NULL COMMENT \'扩展字段4\' AFTER `ext_field3`');
|
|
CALL AddColumnIfNotExists('xg_student_info', 'ext_field5', 'varchar(200) DEFAULT NULL COMMENT \'扩展字段5\' AFTER `ext_field4`');
|
|
|
|
-- 13. 添加索引以提高查询性能
|
|
SELECT 'Adding indexes for better performance...' as message;
|
|
|
|
-- 检查索引是否存在的函数
|
|
DELIMITER $$
|
|
|
|
DROP PROCEDURE IF EXISTS AddIndexIfNotExists$$
|
|
|
|
CREATE PROCEDURE AddIndexIfNotExists(
|
|
IN table_name VARCHAR(128),
|
|
IN index_name VARCHAR(128),
|
|
IN index_definition TEXT
|
|
)
|
|
BEGIN
|
|
DECLARE index_exists INT DEFAULT 0;
|
|
|
|
-- 检查索引是否存在
|
|
SELECT COUNT(*) INTO index_exists
|
|
FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA = DATABASE()
|
|
AND TABLE_NAME = table_name
|
|
AND INDEX_NAME = index_name;
|
|
|
|
-- 如果索引不存在,则添加
|
|
IF index_exists = 0 THEN
|
|
SET @sql = CONCAT('ALTER TABLE `', table_name, '` ADD ', index_definition);
|
|
PREPARE stmt FROM @sql;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
SELECT CONCAT('Added index: ', index_name) as message;
|
|
ELSE
|
|
SELECT CONCAT('Index already exists: ', index_name) as message;
|
|
END IF;
|
|
END$$
|
|
|
|
DELIMITER ;
|
|
|
|
-- 添加索引
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_student_no', 'INDEX `idx_student_no` (`student_no`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_id_card', 'INDEX `idx_id_card` (`id_card`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_name', 'INDEX `idx_name` (`name`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_class_code', 'INDEX `idx_class_code` (`class_code`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_major_code', 'INDEX `idx_major_code` (`major_code`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_college_code', 'INDEX `idx_college_code` (`college_code`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_enrollment_year', 'INDEX `idx_enrollment_year` (`enrollment_year`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_student_status', 'INDEX `idx_student_status` (`student_status`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_info_status', 'INDEX `idx_info_status` (`info_status`)');
|
|
CALL AddIndexIfNotExists('xg_student_info', 'idx_phone', 'INDEX `idx_phone` (`phone`)');
|
|
|
|
-- 清理存储过程
|
|
DROP PROCEDURE IF EXISTS AddColumnIfNotExists;
|
|
DROP PROCEDURE IF EXISTS AddIndexIfNotExists;
|
|
|
|
-- 完成信息
|
|
SELECT 'All missing columns have been added successfully!' as message;
|
|
SELECT 'Please verify the table structure and test the application.' as message; |