-- ============================================================================ -- smartor_nhfy 数据库 未使用表清理脚本 -- 生成日期: 20260923 -- 来源: 与代码全量比对(178 个 Mapper XML + 全部 Java 源码) -- 范围: 132 张代码零引用的表(空表 110 张 + 有数据的备份表 22 张) -- 注意: 以下表已被排除,请勿删除: -- * qrtz_* (Quartz 框架表,运行时使用) -- * magic_config (magic-api 框架表) -- * pat_med_outhosp_20260406 (分表机制+存储过程+视图 v_pat_med_outhosp 使用) -- ============================================================================ -- ---------------------------------------------------------------------------- -- 【重要】执行前务必先备份。本库疑似多系统共用,建议先确认无其他程序读写。 -- 有数据的 22 张表建议先执行下方 mysqldump 备份: -- mysqldump -h192.168.99.192 -P3306 -uroot -p smartor_nhfy \ -- icd10_copy1 \ -- pat_archive-old \ -- pat_archive_copy1 \ -- pat_archive_copy6 \ -- pat_med_inhosp-old \ -- pat_med_inhosp_0710 \ -- pat_med_inhosp_0814 \ -- pat_med_inhosp_copy1 \ -- service_subtask_0710 \ -- service_subtask_copy1 \ -- service_subtask_copy2 \ -- service_subtask_copy3 \ -- service_subtask_copy4 \ -- service_subtask_copy5 \ -- service_subtask_detail_copy1 \ -- service_subtask_detail_copy2 \ -- service_task_260806 \ -- service_taskdept_260806 \ -- service_taskdiag_copy4 \ -- svy_lib_template_targetoption_copy1 \ -- svy_task_template_targetoption_copy1 \ -- sys_user-old -- > backup_unused_tables_20260923.sql -- ---------------------------------------------------------------------------- USE `smartor_nhfy`; SET FOREIGN_KEY_CHECKS = 0; -- ============================================================================ -- 第 0 部分:预检查(只读,不会改任何数据) -- 说明: information_schema.tables.table_rows 对 InnoDB 是估算值, -- 下面的 UNION ALL 是精确 COUNT,执行后应看到所有 cnt 均为 0。 -- 若某行 cnt > 0,说明该表仍有数据,请先从「第 1 部分」中移除该表的 DROP 语句。 -- ============================================================================ SELECT 'xxx' AS tbl, 0 AS cnt WHERE 1=0 UNION ALL SELECT '_base_dept', COUNT(*) FROM `_base_dept` UNION ALL SELECT '_base_dict', COUNT(*) FROM `_base_dict` UNION ALL SELECT '_base_dict_item', COUNT(*) FROM `_base_dict_item` UNION ALL SELECT '_base_dict_medarea', COUNT(*) FROM `_base_dict_medarea` UNION ALL SELECT '_base_permission', COUNT(*) FROM `_base_permission` UNION ALL SELECT '_base_permissionresources', COUNT(*) FROM `_base_permissionresources` UNION ALL SELECT '_base_role', COUNT(*) FROM `_base_role` UNION ALL SELECT 'ai_conversation', COUNT(*) FROM `ai_conversation` UNION ALL SELECT 'ai_message', COUNT(*) FROM `ai_message` UNION ALL SELECT 'base_applydisease', COUNT(*) FROM `base_applydisease` UNION ALL SELECT 'base_dict_disease', COUNT(*) FROM `base_dict_disease` UNION ALL SELECT 'base_dict_drug', COUNT(*) FROM `base_dict_drug` UNION ALL SELECT 'base_dict_inspect', COUNT(*) FROM `base_dict_inspect` UNION ALL SELECT 'base_dict_physicalpackage', COUNT(*) FROM `base_dict_physicalpackage` UNION ALL SELECT 'base_dict_surgery', COUNT(*) FROM `base_dict_surgery` UNION ALL SELECT 'base_dict_test', COUNT(*) FROM `base_dict_test` UNION ALL SELECT 'base_person', COUNT(*) FROM `base_person` UNION ALL SELECT 'base_pushtemplate', COUNT(*) FROM `base_pushtemplate` UNION ALL SELECT 'base_scoringway', COUNT(*) FROM `base_scoringway` UNION ALL SELECT 'base_scoringwaydetail', COUNT(*) FROM `base_scoringwaydetail` UNION ALL SELECT 'base_sequence', COUNT(*) FROM `base_sequence` UNION ALL SELECT 'base_taskvariable', COUNT(*) FROM `base_taskvariable` UNION ALL SELECT 'base_template', COUNT(*) FROM `base_template` UNION ALL SELECT 'base_templatecategory', COUNT(*) FROM `base_templatecategory` UNION ALL SELECT 'base_wxaccount', COUNT(*) FROM `base_wxaccount` UNION ALL SELECT 'bpbj', COUNT(*) FROM `bpbj` UNION ALL SELECT 'chat_friend', COUNT(*) FROM `chat_friend` UNION ALL SELECT 'chat_friend_group', COUNT(*) FROM `chat_friend_group` UNION ALL SELECT 'chat_group_chat', COUNT(*) FROM `chat_group_chat` UNION ALL SELECT 'chat_group_members', COUNT(*) FROM `chat_group_members` UNION ALL SELECT 'chat_message', COUNT(*) FROM `chat_message` UNION ALL SELECT 'chat_message_statistics', COUNT(*) FROM `chat_message_statistics` UNION ALL SELECT 'chat_user', COUNT(*) FROM `chat_user` UNION ALL SELECT 'crm_complaint', COUNT(*) FROM `crm_complaint` UNION ALL SELECT 'cti_callseats', COUNT(*) FROM `cti_callseats` UNION ALL SELECT 'dev_bug', COUNT(*) FROM `dev_bug` UNION ALL SELECT 'dev_checkrecords', COUNT(*) FROM `dev_checkrecords` UNION ALL SELECT 'dev_equipmentinfo', COUNT(*) FROM `dev_equipmentinfo` UNION ALL SELECT 'dev_repairpl', COUNT(*) FROM `dev_repairpl` UNION ALL SELECT 'dev_repairtype', COUNT(*) FROM `dev_repairtype` UNION ALL SELECT 'dev_rprecords', COUNT(*) FROM `dev_rprecords` UNION ALL SELECT 'flw_channel_definition', COUNT(*) FROM `flw_channel_definition` UNION ALL SELECT 'flw_ev_databasechangelog', COUNT(*) FROM `flw_ev_databasechangelog` UNION ALL SELECT 'flw_ev_databasechangeloglock', COUNT(*) FROM `flw_ev_databasechangeloglock` UNION ALL SELECT 'flw_event_definition', COUNT(*) FROM `flw_event_definition` UNION ALL SELECT 'flw_event_deployment', COUNT(*) FROM `flw_event_deployment` UNION ALL SELECT 'flw_event_resource', COUNT(*) FROM `flw_event_resource` UNION ALL SELECT 'flw_ru_batch', COUNT(*) FROM `flw_ru_batch` UNION ALL SELECT 'flw_ru_batch_part', COUNT(*) FROM `flw_ru_batch_part` UNION ALL SELECT 'ivr_task_singlerecords', COUNT(*) FROM `ivr_task_singlerecords` UNION ALL SELECT 'ivr_taskdetail1', COUNT(*) FROM `ivr_taskdetail1` UNION ALL SELECT 'pat_med_apointment', COUNT(*) FROM `pat_med_apointment` UNION ALL SELECT 'pat_tube_feek', COUNT(*) FROM `pat_tube_feek` UNION ALL SELECT 'pat_tube_feek_medicine', COUNT(*) FROM `pat_tube_feek_medicine` UNION ALL SELECT 'patientinfo', COUNT(*) FROM `patientinfo` UNION ALL SELECT 'questionnaire_advise', COUNT(*) FROM `questionnaire_advise` UNION ALL SELECT 'questionnaire_question', COUNT(*) FROM `questionnaire_question` UNION ALL SELECT 'questionnaire_questionnaire', COUNT(*) FROM `questionnaire_questionnaire` UNION ALL SELECT 'questionnaire_questionoption', COUNT(*) FROM `questionnaire_questionoption` UNION ALL SELECT 'questionnaire_questiontype', COUNT(*) FROM `questionnaire_questiontype` UNION ALL SELECT 'questionnaire_result', COUNT(*) FROM `questionnaire_result` UNION ALL SELECT 'questionnaire_resultdetail', COUNT(*) FROM `questionnaire_resultdetail` UNION ALL SELECT 'questionnairequestion', COUNT(*) FROM `questionnairequestion` UNION ALL SELECT 'questionnairequestionoption', COUNT(*) FROM `questionnairequestionoption` UNION ALL SELECT 'scheme_taskrecord_callrecord', COUNT(*) FROM `scheme_taskrecord_callrecord` UNION ALL SELECT 'service_scheme', COUNT(*) FROM `service_scheme` UNION ALL SELECT 'service_taskdiagnose', COUNT(*) FROM `service_taskdiagnose` UNION ALL SELECT 'sms_account', COUNT(*) FROM `sms_account` UNION ALL SELECT 'soline', COUNT(*) FROM `soline` UNION ALL SELECT 'sopaymentterm', COUNT(*) FROM `sopaymentterm` UNION ALL SELECT 'student', COUNT(*) FROM `student` UNION ALL SELECT 'svr_plan', COUNT(*) FROM `svr_plan` UNION ALL SELECT 'svr_prj', COUNT(*) FROM `svr_prj` UNION ALL SELECT 'svr_prjtask', COUNT(*) FROM `svr_prjtask` UNION ALL SELECT 'svr_prjtaskline', COUNT(*) FROM `svr_prjtaskline` UNION ALL SELECT 'svr_task', COUNT(*) FROM `svr_task` UNION ALL SELECT 'svr_taskrecord', COUNT(*) FROM `svr_taskrecord` UNION ALL SELECT 'svy_lib_resultrule', COUNT(*) FROM `svy_lib_resultrule` UNION ALL SELECT 'svy_task_template_rule', COUNT(*) FROM `svy_task_template_rule` UNION ALL SELECT 'sys_deploy_form', COUNT(*) FROM `sys_deploy_form` UNION ALL SELECT 'sys_expression', COUNT(*) FROM `sys_expression` UNION ALL SELECT 'sys_form', COUNT(*) FROM `sys_form` UNION ALL SELECT 'sys_listener', COUNT(*) FROM `sys_listener` UNION ALL SELECT 'sys_task_form', COUNT(*) FROM `sys_task_form` UNION ALL SELECT 'sys_user_dept_import', COUNT(*) FROM `sys_user_dept_import` UNION ALL SELECT 'sys_variable', COUNT(*) FROM `sys_variable` UNION ALL SELECT 't_delid', COUNT(*) FROM `t_delid` UNION ALL SELECT 'table_svy', COUNT(*) FROM `table_svy` UNION ALL SELECT 'tabledesc', COUNT(*) FROM `tabledesc` UNION ALL SELECT 'tools', COUNT(*) FROM `tools` UNION ALL SELECT 'treatment_plan', COUNT(*) FROM `treatment_plan` UNION ALL SELECT 'treatment_plandetail', COUNT(*) FROM `treatment_plandetail` UNION ALL SELECT 'treatment_plantemplate', COUNT(*) FROM `treatment_plantemplate` UNION ALL SELECT 'treatment_plantemplatedetail', COUNT(*) FROM `treatment_plantemplatedetail` UNION ALL SELECT 'wechat_accesstoken', COUNT(*) FROM `wechat_accesstoken` UNION ALL SELECT 'wechat_function', COUNT(*) FROM `wechat_function` UNION ALL SELECT 'wechat_function_jumpurl', COUNT(*) FROM `wechat_function_jumpurl` UNION ALL SELECT 'wechat_functiontype', COUNT(*) FROM `wechat_functiontype` UNION ALL SELECT 'wechat_jssdk_ticket', COUNT(*) FROM `wechat_jssdk_ticket` UNION ALL SELECT 'wechat_menu', COUNT(*) FROM `wechat_menu` UNION ALL SELECT 'wechat_pay_success', COUNT(*) FROM `wechat_pay_success` UNION ALL SELECT 'wechat_qrcode', COUNT(*) FROM `wechat_qrcode` UNION ALL SELECT 'wechat_respmessage', COUNT(*) FROM `wechat_respmessage` UNION ALL SELECT 'wechat_respmessage_key', COUNT(*) FROM `wechat_respmessage_key` UNION ALL SELECT 'wechat_sendrecord', COUNT(*) FROM `wechat_sendrecord` UNION ALL SELECT 'wechat_subscribeqrcode', COUNT(*) FROM `wechat_subscribeqrcode` UNION ALL SELECT 'wechat_subscribesend', COUNT(*) FROM `wechat_subscribesend` UNION ALL SELECT 'wechat_templatemessage_templatelist', COUNT(*) FROM `wechat_templatemessage_templatelist` UNION ALL SELECT 'wechat_userinfo', COUNT(*) FROM `wechat_userinfo` UNION ALL SELECT 'wechat_userinfo_subscribeinfo', COUNT(*) FROM `wechat_userinfo_subscribeinfo` ORDER BY cnt DESC; -- ============================================================================ -- 第 1 部分:删除空表(110 张,已核对均为 0 行) -- 使用 IF EXISTS,可重复执行,不会报错 -- ============================================================================ DROP TABLE IF EXISTS `_base_dept`; DROP TABLE IF EXISTS `_base_dict`; DROP TABLE IF EXISTS `_base_dict_item`; DROP TABLE IF EXISTS `_base_dict_medarea`; DROP TABLE IF EXISTS `_base_permission`; DROP TABLE IF EXISTS `_base_permissionresources`; DROP TABLE IF EXISTS `_base_role`; DROP TABLE IF EXISTS `ai_conversation`; DROP TABLE IF EXISTS `ai_message`; DROP TABLE IF EXISTS `base_applydisease`; DROP TABLE IF EXISTS `base_dict_disease`; DROP TABLE IF EXISTS `base_dict_drug`; DROP TABLE IF EXISTS `base_dict_inspect`; DROP TABLE IF EXISTS `base_dict_physicalpackage`; DROP TABLE IF EXISTS `base_dict_surgery`; DROP TABLE IF EXISTS `base_dict_test`; DROP TABLE IF EXISTS `base_person`; DROP TABLE IF EXISTS `base_pushtemplate`; DROP TABLE IF EXISTS `base_scoringway`; DROP TABLE IF EXISTS `base_scoringwaydetail`; DROP TABLE IF EXISTS `base_sequence`; DROP TABLE IF EXISTS `base_taskvariable`; DROP TABLE IF EXISTS `base_template`; DROP TABLE IF EXISTS `base_templatecategory`; DROP TABLE IF EXISTS `base_wxaccount`; DROP TABLE IF EXISTS `bpbj`; DROP TABLE IF EXISTS `chat_friend`; DROP TABLE IF EXISTS `chat_friend_group`; DROP TABLE IF EXISTS `chat_group_chat`; DROP TABLE IF EXISTS `chat_group_members`; DROP TABLE IF EXISTS `chat_message`; DROP TABLE IF EXISTS `chat_message_statistics`; DROP TABLE IF EXISTS `chat_user`; DROP TABLE IF EXISTS `crm_complaint`; DROP TABLE IF EXISTS `cti_callseats`; DROP TABLE IF EXISTS `dev_bug`; DROP TABLE IF EXISTS `dev_checkrecords`; DROP TABLE IF EXISTS `dev_equipmentinfo`; DROP TABLE IF EXISTS `dev_repairpl`; DROP TABLE IF EXISTS `dev_repairtype`; DROP TABLE IF EXISTS `dev_rprecords`; DROP TABLE IF EXISTS `flw_channel_definition`; DROP TABLE IF EXISTS `flw_ev_databasechangelog`; DROP TABLE IF EXISTS `flw_ev_databasechangeloglock`; DROP TABLE IF EXISTS `flw_event_definition`; DROP TABLE IF EXISTS `flw_event_deployment`; DROP TABLE IF EXISTS `flw_event_resource`; DROP TABLE IF EXISTS `flw_ru_batch`; DROP TABLE IF EXISTS `flw_ru_batch_part`; DROP TABLE IF EXISTS `ivr_task_singlerecords`; DROP TABLE IF EXISTS `ivr_taskdetail1`; DROP TABLE IF EXISTS `pat_med_apointment`; DROP TABLE IF EXISTS `pat_tube_feek`; DROP TABLE IF EXISTS `pat_tube_feek_medicine`; DROP TABLE IF EXISTS `patientinfo`; DROP TABLE IF EXISTS `questionnaire_advise`; DROP TABLE IF EXISTS `questionnaire_question`; DROP TABLE IF EXISTS `questionnaire_questionnaire`; DROP TABLE IF EXISTS `questionnaire_questionoption`; DROP TABLE IF EXISTS `questionnaire_questiontype`; DROP TABLE IF EXISTS `questionnaire_result`; DROP TABLE IF EXISTS `questionnaire_resultdetail`; DROP TABLE IF EXISTS `questionnairequestion`; DROP TABLE IF EXISTS `questionnairequestionoption`; DROP TABLE IF EXISTS `scheme_taskrecord_callrecord`; DROP TABLE IF EXISTS `service_scheme`; DROP TABLE IF EXISTS `service_taskdiagnose`; DROP TABLE IF EXISTS `sms_account`; DROP TABLE IF EXISTS `soline`; DROP TABLE IF EXISTS `sopaymentterm`; DROP TABLE IF EXISTS `student`; DROP TABLE IF EXISTS `svr_plan`; DROP TABLE IF EXISTS `svr_prj`; DROP TABLE IF EXISTS `svr_prjtask`; DROP TABLE IF EXISTS `svr_prjtaskline`; DROP TABLE IF EXISTS `svr_task`; DROP TABLE IF EXISTS `svr_taskrecord`; DROP TABLE IF EXISTS `svy_lib_resultrule`; DROP TABLE IF EXISTS `svy_task_template_rule`; DROP TABLE IF EXISTS `sys_deploy_form`; DROP TABLE IF EXISTS `sys_expression`; DROP TABLE IF EXISTS `sys_form`; DROP TABLE IF EXISTS `sys_listener`; DROP TABLE IF EXISTS `sys_task_form`; DROP TABLE IF EXISTS `sys_user_dept_import`; DROP TABLE IF EXISTS `sys_variable`; DROP TABLE IF EXISTS `t_delid`; DROP TABLE IF EXISTS `table_svy`; DROP TABLE IF EXISTS `tabledesc`; DROP TABLE IF EXISTS `tools`; DROP TABLE IF EXISTS `treatment_plan`; DROP TABLE IF EXISTS `treatment_plandetail`; DROP TABLE IF EXISTS `treatment_plantemplate`; DROP TABLE IF EXISTS `treatment_plantemplatedetail`; DROP TABLE IF EXISTS `wechat_accesstoken`; DROP TABLE IF EXISTS `wechat_function`; DROP TABLE IF EXISTS `wechat_function_jumpurl`; DROP TABLE IF EXISTS `wechat_functiontype`; DROP TABLE IF EXISTS `wechat_jssdk_ticket`; DROP TABLE IF EXISTS `wechat_menu`; DROP TABLE IF EXISTS `wechat_pay_success`; DROP TABLE IF EXISTS `wechat_qrcode`; DROP TABLE IF EXISTS `wechat_respmessage`; DROP TABLE IF EXISTS `wechat_respmessage_key`; DROP TABLE IF EXISTS `wechat_sendrecord`; DROP TABLE IF EXISTS `wechat_subscribeqrcode`; DROP TABLE IF EXISTS `wechat_subscribesend`; DROP TABLE IF EXISTS `wechat_templatemessage_templatelist`; DROP TABLE IF EXISTS `wechat_userinfo`; DROP TABLE IF EXISTS `wechat_userinfo_subscribeinfo`; -- ============================================================================ -- 第 2 部分:有数据的备份表(22 张) -- 为安全起见,默认只做「改名归档」(可随时改回),观察一段时间后再删除: -- * 归档后表名前缀为 zzz_del_,排在库列表末尾,不影响业务 -- * 恢复方法: RENAME TABLE `zzz_del_xxx_20260923` TO `xxx`; -- * 确认无误后,执行本文件末尾被注释掉的 DROP 语句彻底删除 -- ============================================================================ RENAME TABLE `icd10_copy1` TO `zzz_del_icd10_copy1_20260923`; RENAME TABLE `pat_archive-old` TO `zzz_del_pat_archive-old_20260923`; RENAME TABLE `pat_archive_copy1` TO `zzz_del_pat_archive_copy1_20260923`; RENAME TABLE `pat_archive_copy6` TO `zzz_del_pat_archive_copy6_20260923`; RENAME TABLE `pat_med_inhosp-old` TO `zzz_del_pat_med_inhosp-old_20260923`; RENAME TABLE `pat_med_inhosp_0710` TO `zzz_del_pat_med_inhosp_0710_20260923`; RENAME TABLE `pat_med_inhosp_0814` TO `zzz_del_pat_med_inhosp_0814_20260923`; RENAME TABLE `pat_med_inhosp_copy1` TO `zzz_del_pat_med_inhosp_copy1_20260923`; RENAME TABLE `service_subtask_0710` TO `zzz_del_service_subtask_0710_20260923`; RENAME TABLE `service_subtask_copy1` TO `zzz_del_service_subtask_copy1_20260923`; RENAME TABLE `service_subtask_copy2` TO `zzz_del_service_subtask_copy2_20260923`; RENAME TABLE `service_subtask_copy3` TO `zzz_del_service_subtask_copy3_20260923`; RENAME TABLE `service_subtask_copy4` TO `zzz_del_service_subtask_copy4_20260923`; RENAME TABLE `service_subtask_copy5` TO `zzz_del_service_subtask_copy5_20260923`; RENAME TABLE `service_subtask_detail_copy1` TO `zzz_del_service_subtask_detail_copy1_20260923`; RENAME TABLE `service_subtask_detail_copy2` TO `zzz_del_service_subtask_detail_copy2_20260923`; RENAME TABLE `service_task_260806` TO `zzz_del_service_task_260806_20260923`; RENAME TABLE `service_taskdept_260806` TO `zzz_del_service_taskdept_260806_20260923`; RENAME TABLE `service_taskdiag_copy4` TO `zzz_del_service_taskdiag_copy4_20260923`; RENAME TABLE `svy_lib_template_targetoption_copy1` TO `zzz_del_svy_lib_template_targetoption_copy1_20260923`; RENAME TABLE `svy_task_template_targetoption_copy1` TO `zzz_del_svy_task_template_targetoption_copy1_20260923`; RENAME TABLE `sys_user-old` TO `zzz_del_sys_user-old_20260923`; -- ---------------------------------------------------------------------------- -- 彻底删除(观察期结束、确认归档无误后,取消下面注释执行) -- ---------------------------------------------------------------------------- -- DROP TABLE IF EXISTS `zzz_del_icd10_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_archive-old_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_archive_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_archive_copy6_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp-old_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_0710_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_0814_20260923`; -- DROP TABLE IF EXISTS `zzz_del_pat_med_inhosp_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_0710_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy2_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy3_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy4_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_copy5_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_detail_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_subtask_detail_copy2_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_task_260806_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_taskdept_260806_20260923`; -- DROP TABLE IF EXISTS `zzz_del_service_taskdiag_copy4_20260923`; -- DROP TABLE IF EXISTS `zzz_del_svy_lib_template_targetoption_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_svy_task_template_targetoption_copy1_20260923`; -- DROP TABLE IF EXISTS `zzz_del_sys_user-old_20260923`; SET FOREIGN_KEY_CHECKS = 1; -- =============================== 脚本结束 ====================================