2014年8月24日 星期日

10年學號重複問題如何修正?

1轉學生轉入學號與10年前重複,無法輸入戶口資料並出現錯誤
2出現下列訊息
該學號已經有人使用
程式目前執行位置/var/www/html/sf3/modules/stud_move/stud_move.php的第111行

我們學校註冊組長說 101 年的新生資料會覆蓋 91 年的舊生資料,求救之後知道祇要復原舊資料 & 新增一個主鍵值即可。

方法如下:

mysql -u root -p
mysql>use sfs3;
mysql>show create table stud_base;
mysql>ALTER TABLE stud_base DROP PRIMARY KEY;
mysql>ALTER TABLE stud_base ADD PRIMARY KEY (`stud_id`, `stud_study_year`);

有遇到相同問題的組長請將資料表更新一下吧!

詳細說明請見:
解決學務系統學號重覆問題:修改資料表主鍵值

http://www.sfs.project.edu.tw/modules ... t_id=10996#forumpost10996

這問題在2007年4月就被注意到了
所以在2007/4/12就有發布一個系統自動更新
會有十年前資料被"覆蓋"的情形
都是學校的學務系統主機該更新失敗所致!

其實~~~狀況並不是被"覆蓋" 而是被刪
為何會被刪?
因為匯入新生資料使用了MySQL的replace指令
該指令會先把符合primary、unique索引的紀錄列先刪除
再新增新的紀錄!

由於這些學校的primary key並未被正確更新為 stud_id + stud_study_year
僅有stud_id
所以~~~國中101學年度匯入時 便會將91學年度的相同學號紀錄刪除!

如果其他資料尚未被建立
倒是可以用資料庫全部復原的方式處理
怕就是~~~現在已經開學 若學期初相關設定都已完成
會變成~~~~前人疏誤 後人承擔的情形

要解決這個兩難問題
步驟是~~~
(1).先把索引修正好 ( 利用SQL 或刪 data/upgrade/include/2007-4-12.txt 都可 )
(2).將備份的資料庫改名 移入mysql資料庫目錄內 並注意權限
(3).連入MySQL 執行 insert into `sfs3`.`stud_base` (select * from `aaa`.`stud_base` where stud_study_year=91 and stud_id<1xxx)

#####sttud_study_year=91#####學生入學年=91年######
###### from `aaa`.`stud_base`#######從資料庫aaa資料表stud_base
#######stud_id<1xxx############學號<10356-10400



執行
mysql> insert into `sfs3`.`stud_base` (select * from `aaa`.`stud_base` where stud_study_year=92 and stud_id<737);
出現
ERROR 1136 (21S01): Column count doesn't match value count at row 1


範例三:將範例一的檔案解壓縮
[root@www tmp]# gzip -d man.config.gz
# 不要使用 gunzip 這個指令,不好背!使用 gzip -d 來進行解壓縮!
# 與 gzip 相反, gzip -d 會將原本的 .gz 刪除,產生原本的 man.config 檔案。


新增欄位
ALTER TABLE  stud_base ADD `edu_key` varchar(65) DEFAULT NULL;

ALTER TABLE  stud_base ADD `ldap_password` varchar(60) DEFAULT NULL;



顯示90年入學生
select * from `sfs320101103`.`stud_base` where stud_study_year=88 ;

0 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=88 ;


0 rows in set (0.02 sec)



select * from `sfs320101103`.`stud_base` where stud_study_year=89 ;
1 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=89 ;
1 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=90 ;
357 rows in set (0.02 sec)


select * from `sfs3`.`stud_base` where stud_study_year=90 ;
356 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=91 ;
351 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=91 ;
33 rows in set (0.02 sec)
351

select * from `sfs320101103`.`stud_base` where stud_study_year=92 ;
351 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=92 ;
340 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=93 ;
385 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=93 ;
382 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=94 ;
390 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=94 ;
390 rows in set (0.02 sec)


沒有留言:

張貼留言