建立數據庫,指定數據庫的默認字符集爲utf8。
create database schoolDB default character set utf8;
鏈接數據庫,客戶端必須選擇UTF8字符集。
數據庫中的三張表分別爲學生表(student)、課程表(TSubject)、分數表(TScore)。
數據庫
CREATE TABLE `TStudent` ( `StudentID` varchar(15) NOT NULL, `Sname` varchar(10) DEFAULT NULL, `sex` char(1) DEFAULT NULL, `cardID` varchar(20) DEFAULT NULL, `Birthday` date DEFAULT NULL, `Email` varchar(40) DEFAULT NULL, `Class` varchar(20) DEFAULT NULL, `enterTime` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table TSubject ( subJectID nvarchar(10), subJectName nvarchar(30), BookName nvarchar(30), Publisher nvarchar(20) )ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table TScore ( StudentID nvarchar(15), subJectID nvarchar(10), mark decimal )ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into TSubject values ('0001','計算機網絡','奠定計算機網絡','清華出版社'); insert into TSubject values ('0002','數據結構','大話數據結構','人郵出版社'); insert into TSubject values ('0003','JAVA開發','JAVA企業級開發','人郵出版社');
create function CreateName() RETURNS varchar(3) begin DECLARE LN VARCHAR(300); DECLARE MN VARCHAR(500); DECLARE FN VARCHAR(500); DECLARE LN_N INT; DECLARE MN_N INT; DECLARE FN_N INT; SET LN='李王張劉陳楊黃趙周吳徐孫朱馬胡郭林何高梁鄭羅宋謝唐韓曹許鄧蕭馮曾程蔡彭潘袁於董餘蘇葉呂魏蔣田杜丁沈姜範江傅鍾盧汪戴崔任陸廖姚方金邱夏譚韋賈鄒石熊孟秦閻薛侯雷白龍段郝孔邵史毛常萬顧賴武康賀嚴尹錢施牛洪龔'; SET MN='偉剛勇春菊毅俊峯強軍平保東文輝力明永健世廣志瑗琰韻融園藝詠卿聰瀾純毓悅昭冰爽琬茗羽希寧欣飄育瀅馥新利筠柔竹靄凝曉歡霄楓芸菲寒伊亞宜可姬舒義興良海山仁波寧貴福生龍元全國勝學祥亮政謙亨奇固之嵐苑富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思羣豪清飛彬娜靜淑惠珠翠雅芝妍茜秋珊莎錦黛青倩婷姣婉嫺瑾穎露瑤怡嬋雁蓓紈儀荷丹蓉眉君琴蕊薇菁夢素偉剛勇毅俊峯強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清飛彬富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思羣豪心邦承樂紹功鬆善厚慶磊民友裕河哲江超浩亮政謙亨奇固之輪翰朗伯宏言若鳴朋斌樑棟維啓克倫翔旭鵬澤晨辰士以建家致樹炎德行時泰盛雄琛鈞冠策騰楠榕風航弘'; SET FN='偉剛勇毅俊雲蓮真環雪榮愛妹霞香月鶯媛豔瑞凡佳嘉瓊勤珍貞莉桂娣葉璧才發武麗琳輪翰朗伯宏言若鳴朋斌樑棟維啓克倫翔旭鵬澤晨辰士以建家致樹炎德河哲江超浩璐婭琦晶裕華慧巧美婕馨影荔枝思心邦承樂紹功鬆善厚慶磊民友玉萍紅娥玲芬芳燕彩蘭鳳潔梅秀娟英行時泰盛雄琛鈞冠策騰楠榕風航弘峯強軍平保東文輝力明永健世廣志義興良海山仁波寧貴福生龍元全國勝學祥才發武新利清飛彬富順信子傑濤昌成康星光天達安巖中茂進林有堅和彪博誠先敬震振壯會思羣豪心邦承樂紹功鬆善厚慶磊民友裕河哲江超浩亮政謙亨奇固之輪翰朗伯宏言若鳴朋斌樑棟維啓克倫翔旭鵬澤晨辰士以建家致樹炎德行時泰盛雄琛鈞冠策騰楠榕風航弘'; SET LN_N=CHAR_LENGTH(LN); SET MN_N=CHAR_LENGTH(MN); SET FN_N=CHAR_LENGTH(FN); return Concat(substring(LN,ceil(rand()*LN_N),1),substring(MN,ceil(rand()*MN_N),1),substring(FN,ceil(rand()*FN_N),1)); end
create procedure addStudent(in num int) begin declare i int; set i=1; delete from TStudent; while num>=i do insert TStudent values ( LPAD(convert(i,char(5)),5,'0'), CreateName(), if(ceil(rand()*10)%2=0,'男','女'), RPAD(convert(ceil(rand()*1000000000000000000),char(18)),18,'0'), Concat(convert(ceil(rand()*10)+1980,char(4)),'-',LPAD(convert(ceil(rand()*12), char(2)),2,'0'),'-',LPAD(convert(ceil(rand()*28),char(2)),2,'0')), Concat(PINYIN(sname),'@hotmail.com'), case ceil(rand()*3) when 1 then '網絡與網站開發' when 2 then 'JAVA' ELSE 'NET' END, NOW() ); set i=i+1; end while; select * from TStudent; End
插入1000個學生記錄。
call addStudent(1000);網絡
--建立漢字轉拼音的函數使用的表數據結構
CREATE TABLE `pinyin` ( `letter` char(1) NOT NULL, `chinese` char(1) NOT NULL, PRIMARY KEY (`letter`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk;
--插入數據ide
INSERT INTO `pinyin` VALUES ('A','驁'),('B','簿'),('C','錯'),('D','鵽'),('E','樲'),('F','鰒'),('G','腂'),('H','夻'),('J','攈'),('K','穒'),('L','鱳'),('M','旀'),('N','桛'),('O','漚'),('P','曝'),('Q','囕'),('R','鶸'),('S','蜶'),('T','籜'),('W','鶩'),('X','鑂'),('Y','韻'),('Z','咗'); CREATE FUNCTION PINYIN(str CHAR(255)) RETURNS char(255) BEGIN DECLARE hexCode char(4); DECLARE pinyin varchar(255); DECLARE firstChar char(1); DECLARE aChar char(1); DECLARE pos int; DECLARE strLength int; SET pinyin = ''; SET strLength = CHAR_LENGTH(LTRIM(RTRIM(str))); SET pos = 1; SET @str = (CONVERT(str USING gbk)); WHILE pos <= strLength DO SET @aChar = SUBSTRING(@str,pos,1); SET hexCode = HEX(@aChar); IF hexCode >= "8140" AND hexCode <= "FEA0" THEN SELECT letter into firstChar FROM pinyin WHERE chinese >= @aChar LIMIT 1; ELSE SET firstChar = @aChar; END IF; SET pinyin = CONCAT(pinyin,firstChar); SET pos = pos + 1; END WHILE; RETURN UPPER(pinyin); END
create procedure fillScore() begin DECLARE St_Num INT; DECLARE Sb_Num INT; DECLARE i1 INT; DECLARE i2 INT; set i1=1; set i2=1; delete from TScore; select count(*) into St_Num from TStudent; select count(*) into Sb_Num from TSubject; while St_Num>=i1 do set i2=1; while Sb_Num>=i2 do insert TScore values (LPAD(convert(i1,char(5)),5,'0'),LPAD(convert(i2,char(4)),4,'0'),ceil(50+rand()*50)); set i2=i2+1; END WHILE; set i1=i1+1; END WHILE; End
插入學生成績
call fillScore();函數
select a.*,b.*,c.* from TStudent a join TScore b on a.studentid=b.studentid join TSubject c on b.subjectid=c.subjectid limit 50;
網站