加入收藏 | 设为首页 | 会员中心 | 我要投稿 驾考网 (https://www.jiakaowang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

SQLServer基本知识四—— MySQL数据库搭建实例

发布时间:2023-05-29 11:17:24 所属栏目:MySql教程 来源:
导读:MySQL数据库基础(四)——MysqL数据库创建实例
一、创建数据库

1、创建数据库
创建数据库,指定数据库的默认字符集为utf8。
create database schoolDB default character set utf8;
连接数据库,客
MySQL数据库基础(四)——MysqL数据库创建实例
一、创建数据库

1、创建数据库
创建数据库,指定数据库的默认字符集为utf8。
create database schoolDB default character set utf8;
连接数据库,客户端必须选择UTF8字符集。
数据库中的三张表分别为学生表(student)、课程表(TSubject)、分数表(Tscore)。

2、创建学生表
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;

3、创建课程表
create table TSubject
(
subJectID nvarchar(10),
subJectName nvarchar(30),
BookName nvarchar(30),
Publisher nvarchar(20)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

4、创建分数表
create table Tscore
(
StudentID nvarchar(15),
subJectID nvarchar(10),
mark decimal
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、数据库信息的生成

1、插入课程表信息
insert into TSubject values ('0001','计算机网络','奠基计算机网络','清华出版社');
insert into TSubject values ('0002','数据结构','大话数据结构','人邮出版社');
insert into TSubject values ('0003','JAVA开发','JAVA企业级开发','人邮出版社');

2、创建产生学生姓名的函数
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_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));

3、创建添加学生的存储过程
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;
call addStudent(1000);

4、创建汉字转拼音的函数
--创建汉字转拼音的函数使用的表

CREATE TABLE `pinyin` (
  `letter` char(1) NOT NULL,
  `chinese` char(1) NOT NULL,
  PRIMARY KEY  (`letter`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk; 
--插入数据

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

5、创建插入学生成绩的存储过程
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;

(编辑:驾考网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章