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 ;
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
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)