Files
hzdyjs/docs/设计文档/database/19-fix-missing-columns.sql
T
2025-07-16 18:11:31 +08:00

157 lines
11 KiB
SQL

-- ==========================================
-- 修复学生信息表缺失字段脚本
-- 版本:V2.2.0
-- 功能:添加代码中使用但数据库表中缺失的字段
-- 作者:Cursor AI
-- 时间:2025-01-15
-- 问题:数据库表结构与代码实体类不匹配,导致插入失败
-- ==========================================
-- 设置字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 修复 xg_student_info 表缺失字段
-- ----------------------------
-- 检查表是否存在
SELECT 'Checking xg_student_info table...' as message;
-- 1. 添加基本信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `nation` varchar(20) DEFAULT NULL COMMENT '民族' AFTER `birth_date`,
ADD COLUMN IF NOT EXISTS `name_english` varchar(100) DEFAULT NULL COMMENT '英文姓名' AFTER `name`,
ADD COLUMN IF NOT EXISTS `former_name` varchar(50) DEFAULT NULL COMMENT '曾用名' AFTER `name_english`,
ADD COLUMN IF NOT EXISTS `name_pinyin` varchar(200) DEFAULT NULL COMMENT '姓名拼音' AFTER `former_name`,
ADD COLUMN IF NOT EXISTS `marital_status` varchar(10) DEFAULT NULL COMMENT '婚姻状况:未婚、已婚、离异、丧偶' AFTER `political_status`,
ADD COLUMN IF NOT EXISTS `religion` varchar(20) DEFAULT NULL COMMENT '宗教信仰' AFTER `marital_status`,
ADD COLUMN IF NOT EXISTS `photo_path` varchar(500) DEFAULT NULL COMMENT '学生照片存储路径' AFTER `photo_url`;
-- 2. 添加学籍信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `school_system` int(2) DEFAULT 4 COMMENT '学制(年)' AFTER `enrollment_date`,
ADD COLUMN IF NOT EXISTS `education_level` varchar(20) DEFAULT NULL COMMENT '学历层次' AFTER `school_system`,
ADD COLUMN IF NOT EXISTS `training_type` varchar(20) DEFAULT NULL COMMENT '培养方式:全日制、在职、函授、夜大等' AFTER `education_level`,
ADD COLUMN IF NOT EXISTS `admission_category` varchar(20) DEFAULT NULL COMMENT '录取类别:统招、自主招生、专项计划等' AFTER `training_type`,
ADD COLUMN IF NOT EXISTS `source_region` varchar(100) DEFAULT NULL COMMENT '生源地区(省市县)' AFTER `admission_category`,
ADD COLUMN IF NOT EXISTS `middle_school` varchar(100) DEFAULT NULL COMMENT '毕业中学' AFTER `source_region`;
-- 3. 添加联系信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `qq` varchar(20) DEFAULT NULL COMMENT 'QQ号码' AFTER `email`,
ADD COLUMN IF NOT EXISTS `wechat` varchar(50) DEFAULT NULL COMMENT '微信号' AFTER `qq`,
ADD COLUMN IF NOT EXISTS `current_address` varchar(200) DEFAULT NULL COMMENT '现住址' AFTER `wechat`,
ADD COLUMN IF NOT EXISTS `postal_code` varchar(10) DEFAULT NULL COMMENT '邮政编码' AFTER `home_address`,
ADD COLUMN IF NOT EXISTS `domicile_place` varchar(100) DEFAULT NULL COMMENT '户籍所在地' AFTER `postal_code`;
-- 4. 添加宿舍信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `dormitory_building` varchar(50) DEFAULT NULL COMMENT '宿舍楼栋' AFTER `domicile_place`,
ADD COLUMN IF NOT EXISTS `dormitory_room` varchar(20) DEFAULT NULL COMMENT '宿舍房间' AFTER `dormitory_building`;
-- 5. 添加紧急联系人信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `emergency_contact_name` varchar(50) DEFAULT NULL COMMENT '紧急联系人姓名' AFTER `dormitory_room`,
ADD COLUMN IF NOT EXISTS `emergency_contact_phone` varchar(20) DEFAULT NULL COMMENT '紧急联系人电话' AFTER `emergency_contact_name`,
ADD COLUMN IF NOT EXISTS `emergency_contact_relation` varchar(20) DEFAULT NULL COMMENT '紧急联系人关系' AFTER `emergency_contact_phone`;
-- 6. 添加家庭信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `father_name` varchar(50) DEFAULT NULL COMMENT '父亲姓名' AFTER `emergency_contact_relation`,
ADD COLUMN IF NOT EXISTS `father_phone` varchar(20) DEFAULT NULL COMMENT '父亲电话' AFTER `father_name`,
ADD COLUMN IF NOT EXISTS `father_work_unit` varchar(100) DEFAULT NULL COMMENT '父亲工作单位' AFTER `father_phone`,
ADD COLUMN IF NOT EXISTS `mother_name` varchar(50) DEFAULT NULL COMMENT '母亲姓名' AFTER `father_work_unit`,
ADD COLUMN IF NOT EXISTS `mother_phone` varchar(20) DEFAULT NULL COMMENT '母亲电话' AFTER `mother_name`,
ADD COLUMN IF NOT EXISTS `mother_work_unit` varchar(100) DEFAULT NULL COMMENT '母亲工作单位' AFTER `mother_phone`,
ADD COLUMN IF NOT EXISTS `guardian_name` varchar(50) DEFAULT NULL COMMENT '监护人姓名' AFTER `mother_work_unit`,
ADD COLUMN IF NOT EXISTS `guardian_phone` varchar(20) DEFAULT NULL COMMENT '监护人电话' AFTER `guardian_name`,
ADD COLUMN IF NOT EXISTS `guardian_relation` varchar(20) DEFAULT NULL COMMENT '监护人关系' AFTER `guardian_phone`,
ADD COLUMN IF NOT EXISTS `family_income` varchar(50) DEFAULT NULL COMMENT '家庭收入' AFTER `guardian_relation`,
ADD COLUMN IF NOT EXISTS `family_members` int(11) DEFAULT NULL COMMENT '家庭成员数量' AFTER `family_income`,
ADD COLUMN IF NOT EXISTS `family_economic_status` varchar(20) DEFAULT NULL COMMENT '家庭经济状况' AFTER `family_members`,
ADD COLUMN IF NOT EXISTS `household_register_type` varchar(20) DEFAULT NULL COMMENT '户口类型:农村、城镇' AFTER `family_economic_status`,
ADD COLUMN IF NOT EXISTS `hukou_location` varchar(100) DEFAULT NULL COMMENT '户口所在地' AFTER `household_register_type`;
-- 7. 添加体征信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `height` decimal(5,2) DEFAULT NULL COMMENT '身高(厘米)' AFTER `hukou_location`,
ADD COLUMN IF NOT EXISTS `weight` decimal(5,2) DEFAULT NULL COMMENT '体重(公斤)' AFTER `height`,
ADD COLUMN IF NOT EXISTS `blood_type` varchar(10) DEFAULT NULL COMMENT '血型' AFTER `weight`,
ADD COLUMN IF NOT EXISTS `health_status` varchar(20) DEFAULT NULL COMMENT '健康状况' AFTER `blood_type`,
ADD COLUMN IF NOT EXISTS `special_condition` varchar(200) DEFAULT NULL COMMENT '特殊体质或疾病' AFTER `health_status`,
ADD COLUMN IF NOT EXISTS `medical_history` varchar(500) DEFAULT NULL COMMENT '病史' AFTER `special_condition`,
ADD COLUMN IF NOT EXISTS `allergies` varchar(200) DEFAULT NULL COMMENT '过敏史' AFTER `medical_history`,
ADD COLUMN IF NOT EXISTS `disability_type` varchar(50) DEFAULT NULL COMMENT '残疾类型' AFTER `allergies`,
ADD COLUMN IF NOT EXISTS `disability_level` varchar(20) DEFAULT NULL COMMENT '残疾等级' AFTER `disability_type`;
-- 8. 添加银行信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `bank_card_no` varchar(30) DEFAULT NULL COMMENT '银行卡号' AFTER `disability_level`,
ADD COLUMN IF NOT EXISTS `bank_name` varchar(100) DEFAULT NULL COMMENT '开户银行' AFTER `bank_card_no`,
ADD COLUMN IF NOT EXISTS `bank_branch` varchar(100) DEFAULT NULL COMMENT '开户支行' AFTER `bank_name`,
ADD COLUMN IF NOT EXISTS `card_holder_name` varchar(50) DEFAULT NULL COMMENT '持卡人姓名' AFTER `bank_branch`;
-- 9. 添加特殊标识字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `is_poor_student` tinyint(1) DEFAULT 0 COMMENT '是否贫困生:0-否,1-是' AFTER `card_holder_name`,
ADD COLUMN IF NOT EXISTS `is_minority` tinyint(1) DEFAULT 0 COMMENT '是否少数民族:0-否,1-是' AFTER `is_poor_student`,
ADD COLUMN IF NOT EXISTS `is_disabled` tinyint(1) DEFAULT 0 COMMENT '是否残疾:0-否,1-是' AFTER `is_minority`,
ADD COLUMN IF NOT EXISTS `is_orphan` tinyint(1) DEFAULT 0 COMMENT '是否孤儿:0-否,1-是' AFTER `is_disabled`,
ADD COLUMN IF NOT EXISTS `is_left_behind_child` tinyint(1) DEFAULT 0 COMMENT '是否留守儿童:0-否,1-是' AFTER `is_orphan`,
ADD COLUMN IF NOT EXISTS `is_single_child` tinyint(1) DEFAULT 0 COMMENT '是否独生子女:0-否,1-是' AFTER `is_left_behind_child`,
ADD COLUMN IF NOT EXISTS `has_loan` tinyint(1) DEFAULT 0 COMMENT '是否有助学贷款:0-否,1-是' AFTER `is_single_child`,
ADD COLUMN IF NOT EXISTS `loan_amount` decimal(10,2) DEFAULT NULL COMMENT '助学贷款金额' AFTER `has_loan`;
-- 10. 添加扩展信息字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `specialties` text DEFAULT NULL COMMENT '特长爱好' AFTER `loan_amount`,
ADD COLUMN IF NOT EXISTS `awards` text DEFAULT NULL COMMENT '获奖情况' AFTER `specialties`,
ADD COLUMN IF NOT EXISTS `violations` text DEFAULT NULL COMMENT '违纪记录' AFTER `awards`,
ADD COLUMN IF NOT EXISTS `social_activities` text DEFAULT NULL COMMENT '社会活动' AFTER `violations`;
-- 11. 添加状态管理字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `info_status` char(1) DEFAULT '1' COMMENT '信息状态:1-正常,2-待审核,3-审核中,4-已驳回,5-已锁定' AFTER `social_activities`,
ADD COLUMN IF NOT EXISTS `data_source` varchar(20) DEFAULT 'manual' COMMENT '数据来源:manual-手工录入,import-批量导入,sync-系统同步' AFTER `info_status`,
ADD COLUMN IF NOT EXISTS `last_batch_id` bigint(20) DEFAULT NULL COMMENT '最后修改批次ID' AFTER `data_source`,
ADD COLUMN IF NOT EXISTS `last_audit_time` datetime DEFAULT NULL COMMENT '最后审核时间' AFTER `last_batch_id`,
ADD COLUMN IF NOT EXISTS `is_complete` tinyint(1) DEFAULT 0 COMMENT '信息是否完整:0-不完整,1-完整' AFTER `last_audit_time`,
ADD COLUMN IF NOT EXISTS `completion_rate` decimal(5,2) DEFAULT 0.00 COMMENT '完整度百分比' AFTER `is_complete`;
-- 12. 添加扩展字段
ALTER TABLE `xg_student_info`
ADD COLUMN IF NOT EXISTS `ext_field1` varchar(200) DEFAULT NULL COMMENT '扩展字段1' AFTER `completion_rate`,
ADD COLUMN IF NOT EXISTS `ext_field2` varchar(200) DEFAULT NULL COMMENT '扩展字段2' AFTER `ext_field1`,
ADD COLUMN IF NOT EXISTS `ext_field3` varchar(200) DEFAULT NULL COMMENT '扩展字段3' AFTER `ext_field2`,
ADD COLUMN IF NOT EXISTS `ext_field4` varchar(200) DEFAULT NULL COMMENT '扩展字段4' AFTER `ext_field3`,
ADD COLUMN IF NOT EXISTS `ext_field5` varchar(500) DEFAULT NULL COMMENT '扩展字段5' AFTER `ext_field4`;
-- 13. 添加索引(如果不存在)
CREATE INDEX IF NOT EXISTS `idx_nation` ON `xg_student_info`(`nation`);
CREATE INDEX IF NOT EXISTS `idx_political_status` ON `xg_student_info`(`political_status`);
CREATE INDEX IF NOT EXISTS `idx_training_type` ON `xg_student_info`(`training_type`);
CREATE INDEX IF NOT EXISTS `idx_source_region` ON `xg_student_info`(`source_region`);
CREATE INDEX IF NOT EXISTS `idx_is_poor_student` ON `xg_student_info`(`is_poor_student`);
CREATE INDEX IF NOT EXISTS `idx_is_minority` ON `xg_student_info`(`is_minority`);
CREATE INDEX IF NOT EXISTS `idx_is_disabled` ON `xg_student_info`(`is_disabled`);
CREATE INDEX IF NOT EXISTS `idx_completion_rate` ON `xg_student_info`(`completion_rate`);
CREATE INDEX IF NOT EXISTS `idx_last_batch_id` ON `xg_student_info`(`last_batch_id`);
CREATE INDEX IF NOT EXISTS `idx_data_source` ON `xg_student_info`(`data_source`);
-- 14. 检查字段是否添加成功
SELECT 'Checking if nation column exists...' as message;
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'xg_student_info'
AND COLUMN_NAME = 'nation';
-- 15. 显示表结构
SELECT 'Table structure after modification:' as message;
SHOW CREATE TABLE `xg_student_info`;
-- 恢复外键检查
SET FOREIGN_KEY_CHECKS = 1;
SELECT 'xg_student_info table fields fix completed!' as message;