mysql数据库技术及实验指导实验参考 1文档格式.docx
- 文档编号:20966040
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:23
- 大小:28.60KB
mysql数据库技术及实验指导实验参考 1文档格式.docx
《mysql数据库技术及实验指导实验参考 1文档格式.docx》由会员分享,可在线阅读,更多相关《mysql数据库技术及实验指导实验参考 1文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
例23进入jxgl数据库。
USEjxgl;
例24在命令行环境中,创建和删除数据库jxgl:
创建数据库:
mysqladmin-hlocalhost-uroot-pcreatejxgl
删除数据库:
mysqladmin-hlocalhost-uroot-pdropjxgl
实验3表、ER图、索引与视图的基础操作
CREATETABLEIFNOTEXISTS`jxgl`.`sc`(
`sno`CHAR(7)NOTNULL,
`cno`CHAR
(2)NOTNULL,
`grade`INTNULL,
PRIMARYKEY(`sno`,`cno`),INDEX`sc_ibfk_1`(`sno`ASC),INDEX`sc_ibfk_2`(`cno`ASC),CONSTRAINT`sc_ibfk_1`FOREIGNKEY(`sno`)REFERENCES`jxgl`.`student`(`sno`)ONDELETERESTRICTONUPDATERESTRICT,
CONSTRAINT`sc_ibfk_2`FOREIGNKEY(`cno`)REFERENCES`jxgl`.`course`(`cno`)ONDELETERESTRICTONUPDATERESTRICT
)ENGINE=InnoDB;
例31列出jxgl数据库中所有表。
usejxgl;
showtables;
mysqlshow-hlocalhost-uroot-pjxgl
例32列出jxgl数据库中表student的列。
showcolumnsfromstudent;
showcolumnsfromjxgl.student;
mysqlshow-hlocalhost-uroot-pjxglstudent
例33列出jxgl数据库中表的详细信息。
showtablestatus;
mysqlshow--status-hlocalhost-uroot-pjxgl
例34列出jxgl数据库中表sc的索引。
showindexfromsc;
showindexfromjxgl.sc;
例35使用SQL语句创建示例数据库(jxgl):
其中,学生表要求学号为主键,性别默认为男,取值必须为男或女,年龄取值在15到45之间。
课程表(course)要求主键为课程编号,外键为先修课号,参照课程表的主键(cno)。
选修表(sc)要求主键为(学号,课程编号),学号为外键,参照学生表中的学号,课程编号为外键,参照课程表中的课程编号;
成绩不为空时必须在0到100之间。
CreateTableStudent
(SnoCHAR(7)NOTNULL,
SnameVARCHAR(16),
SsexCHAR
(2)DEFAULT'
男'
CHECK(Ssex='
ORSsex='
女'
),
SageSMALLINTCHECK(Sage>
=15ANDSage<
=45),
SdeptCHAR
(2),
PRIMARYKEY(Sno)
)ENGINE=InnoDB;
CreateTableCOURSE
(CnoCHAR
(2)NOTNULL,
CnameVARCHAR(20),
CpnoCHAR
(2),
CreditSMALLINT,
PRIMARYKEY(Cno),
foreignkey(cpno)referencescourse(cno)
Createtablesc
(snochar(7)notnull,
cnochar
(2)notnull,
gradesmallintnullcheck(gradeisnullor(gradebetween0and100)),
Primarykey(sno,cno),
Foreignkey(sno)referencesstudent(sno),
Foreignkey(cno)referencescourse(cno)
例36在表student中增加属性生日(birthday)。
ALTERTABLEstudentADDbirthdaydatetime;
例37删除例3-6中增加的属性生日(birthday)。
ALTERTABLEstudentDROPbirthday;
例38在表student中属性sname上建立索引(sn)。
altertablestudentadduniquesn(sname);
例39删除表sc。
DROPTABLEsc;
例310在数据库jxgl中创建视图v,查询学生姓名,课程名及其所学课程的成绩。
usejxgl--先选择jxgl数据库为当前数据库
Databasechanged
createviewv(sname,cname,grade)asselectsname,cname,gradefromstudent,course,sc
->
wherestudent.sno=sc.snoando=o;
例311显示数据库jxgl中视图v创建的信息。
SHOWCREATEVIEWv;
实验4SQL语言——SELECT查询操作
例41查询考试成绩大于等于90的学生学号。
SELECTDISTINCTSNO
FROMSC
WHEREGRADE>
=90;
例42查年龄大于18,并且不是信息系(IS)与数学系(MA)的学生姓名和性别。
SELECTSNAME,SSEX
FROMSTUDENTWHERESAGE>
18ANDSDEPTNOTIN('
IS'
'
MA'
);
例43查以“MIS_”开头,且倒数第二个汉字为“导”字的课程的详细信息。
SELECT*FROMCOURSEWHERECNAMELIKE'
MIS#_%导_'
ESCAPE'
#'
例44查询选修计算机系(CS)选修了2门及以上课程的学生学号。
SELECTSTUDENT.SNO
FROMSTUDENT,SC
WHERESDEPT='
CS'
ANDSTUDENT.SNO=SC.SNO
GROUPBYSTUDENT.SNOHAVINGCOUNT(*)>
=2;
例45查询student表与sc表的广义笛卡尔积。
SELECTSTUDENT.*,SC.*
FROMSTUDENTCROSSJOINSC;
例46查询student表与sc表基于学号sno的等值连接。
SELECT*FROMSTUDENT,SCWHERESTUDENT.SNO=SC.SNO;
例47查询student表与sc表基于学号sno的自然连接。
SELECTSTUDENT.*,SC.CNO,SC.GRADE
WHERESTUDENT.SNO=SC.SNO;
例48查询课程号的间接先修课程号。
SELECTFIRST.CNO,SECOND.CNO
FROMCOURSEFIRST,COURSESECOND
WHEREFIRST.CPNO=SECOND.CNO;
例49查询学生及其课程、成绩等情况(不管是否选课,均需列出学生信息)。
SELECTSTUDENT.SNO,SNAME,SSEX,SAGE,SDEPT,CNO,GRADE
FROMSTUDENTLEFTOUTERJOINSCONSTUDENT.SNO=SC.SNO;
例410查询学生及其课程成绩与课程及其学生选修成绩的明细情况(要求学生与课程均全部列出)。
SELECTSTUDENT.SNO,SNAME,SSEX,SAGE,SDEPT,
COURSE.CNO,GRADE,CNAME,CPNO,CCREDIT
FROMSTUDENTLEFTOUTERJOINSC
ONSTUDENT.SNO=SC.SNOFULLOUTERJOINCOURSEONSC.CNO=COURSE.CNO;
说明:
因MySQL不支持“FULLOUTERJOIN”,为此上命令运行会出错的。
可以把“FULLOUTERJOIN”用“…LEFTOUTERJOIN…UNION…RIGHTOUTERJOIN…”来变通实现,为此,查询命令可改为:
SELECTa.SNO,a.SNAME,a.SSEX,a.SAGE,a.SDEPT,C.CNO,b.GRADE,c.CNAME,c.CPNO,c.CREDITFROMSTUDENTaLEFTOUTERJOINSCbONa.SNO=b.SNOLEFTOUTERJOINCOURSEcONb.CNO=C.CNO
UNION
SELECTa2.SNO,a2.SNAME,a2.SSEX,a2.SAGE,a2.SDEPT,c2.CNO,b2.GRADE,c2.CNAME,c2.CPNO,c2.CREDIT
FROMSTUDENTa2LEFTOUTERJOINSCb2ONa2.SNO=b2.SNORIGHTOUTERJOINCOURSEc2ONb2.CNO=C2.CNO;
例411查询性别为男、课程成绩及格的学生信息及课程号、成绩。
SELECTSTUDENT.*,CNO,GRADE
FROMSTUDENTINNERJOINSCONSTUDENT.SNO=SC.SNO
WHERESSEX='
ANDGRADE>
=60;
例412查询与“钱横”在同一系学习的学生信息。
SELECT*FROMSTUDENT
WHERESDEPTIN(SELECTSDEPTFROMSTUDENTWHERESNAME='
钱横'
);
例413找出同系、同年龄、同性别的学生。
SELECTT.*FROMSTUDENTAST
WHERE(T.sdept,T.SAGE,T.SSEX)IN
(SELECTSDEPT,SAGE,SSEX
FROMSTUDENTASS
WHERES.SNO<
>
T.SNO);
例414查询选修了课程名为“数据库系统”的学生学号,姓名和所在系。
SELECTSNO,SNAME,SDEPTFROMSTUDENT
WHERESNOIN
(SELECTSNOFROMSC
WHERECNOIN(SELECTCNOFROMCOURSEWHERECNAME='
数据库系统'
));
或
SELECTSTUDENT.SNO,SNAME,SDEPT
INNERJOINCOURSEONSC.CNO=COURSE.CNO;
例415检索至少不学2和4课程的学生学号和姓名。
SELECTSNO,SNAMEFROMSTUDENT
WHERESNONOTIN(SELECTSNOFROMSCWHERECNOIN('
2'
4'
例416查询其他系中比信息系IS所有学生年龄均大的学生名单,并排序输出。
SELECTSNAMEFROMSTUDENT
WHERESAGE>
ALL(SELECTSAGEFROMSTUDENTWHERESDEPT='
)ANDSDEPT<
'
ORDERBYSNAME;
例417查询选修了全部课程的学生姓名(为了有查询结果,自己可以调整表的内容)。
WHERENOTEXISTS
(SELECT*FROMCOURSE
(SELECT*FROMSCWHERESNO=SC.SNOANDCNO=COURSE.CNO));
例418查询至少选修了学生“2005001”选修的全部课程的学生号码。
SELECTSNOFROMSTUDENTSX
(SELECT*FROMSCSCY
WHERESCY.SNO='
2005001'
ANDNOTEXISTS
(SELECT*FROMSCSCZ
WHERESCZ.SNO=SX.SNOANDSCZ.CNO=SCY.CNO));
例419查询平均成绩大于85分的学号,姓名和平均成绩。
SELECTSTUDENT.SNO,SNAME,AVG(GRADE)
WHERESTUDENT.SNO=SC.SNO
GROUPBYSTUDENT.SNO,SNAMEHAVINGAVG(GRADE)>
85;
实验5SQL语言——数据更新操作
例51向jxgl数据库中表student添加数据('
2005007'
'
李涛'
19,'
)。
insertintostudentvalues('
insertintostudentsetsno='
sname='
ssex='
sage=19,sdept='
例52向jxgl数据库中表student添加数据('
2005008'
陈高'
21,'
AT'
),('
2005009'
张杰'
17,'
Mysql>
insertintostudentvalues('
例53在数据库中先创建表:
tbl_name1(sn,sex,dept),现从student表把数据转入tb1_name1。
createtabletbl_name1(sn,sex,dept)selectsnamesn,ssexsex,sdeptdeptfromwhere1=2;
--先创建表tbl_name1;
insertintotbl_name1(sn,sex,dept)selectsname,ssex,sdeptfromstudent;
例54向jxgl数据库中表sc添加数据('
5'
80)。
replacescvalues('
80);
注意这些规则意味着一个像“./myfile.txt”给出的文件是从服务器的数据目录读取,而作为“myfile.txt”给出的一个文件是从当前数据库的数据库目录下读取。
也要注意,对于下列那些语句,对db1文件从数据库目录读取,而不是db2:
USEdb1;
LOADDATAINFILE"
./data.txt"
INTOTABLEdb2.my_table;
例55在student表中,我们发现陈高的性别没有指定,因此我们可以这样修改这个记录。
updatestudentsetssex='
wheresname='
例56在sc表中,删除陈高选修课程信息。
deletefromscwheresno=(selectsnofromstudentwheresname='
例57删除所有学生选课记录
deletefromsc;
实验6嵌入式SQL应用
表名与属性名对应由英文表示,则关系模式为:
1)student(sno、sname、ssex、sage、sdept)
2)course(cno、cname、cpno、ccredit)
3)sc(sno、cno、grade)
4)users(uno、uname、upassword、uclass)
创建数据库及其表结构的SQL命令:
CREATETABLEstudent(
snochar(5)NOTnullprimarykey,
snamechar(6)null,
ssexchar
(2)null,
sageintnull,
sdeptchar
(2)null)ENGINE=MyISAM/InnoDB;
--MyISAM/InnoDB选其一
CREATETABLEsc(snochar(5)NOTnull,cnochar
(1)NOTnull,gradeintnull,primarykey(sno,cno),foreignkey(sno)referencesstudent(sno),foreignkey(cno)referencescourse(cno))ENGINE=MyISAM/InnoDB;
CREATETABLEcourse(cnochar
(1)NOTnullprimarykey,cnamechar(10)null,cpnochar
(1)null,ccreditintnull)ENGINE=MyISAM/InnoDB;
CREATETABLEusers(unochar(6)NOTNULLPRIMARYKEY,unameVARCHAR(10)NOTNULL,upasswordVARCHAR(10)NULL,uclasschar
(1)DEFAULT'
A'
)ENGINE=MyISAM/InnoDB;
三、MS-DOS窗口中编译、连接与运行
利用VC++6.0C编译器直接在MS-DOS窗口中编译、连接与运行,也是简单便捷的方法。
设VC++6.0C编译器相关文件(如\BIN含可执行程序,\INCLUDE含头文件,\LIB含库文件)放在C:
\VC98目录中。
可以把C语言源程序(如CC.C)放在某目录中如C:
\esqlc-mysql。
(1)启动“MS-DOS”窗口,执行如下命令,使当前盘为C,当前目录为esqlc-mysql
cd\esqlc-mysql
(2)设置系统环境变量值,执行如下批处理命令:
setenv-mysql
(3)编译、连接嵌入SQL的C语言程序(例如:
CC.C),执行如下批处理命令(有语法语义错时可修改后重新运行):
run-mysqlCC
(4)运行生成的应用程序(CC.exe),输入程序名即可:
(如图6-18所示)
CC
(a)嵌入SQL的C语言程序的可用任意文本编辑器进行编辑修改(如记事本、WORD等)。
(b)你的数据库中应有student、sc、course等所需的表(或通过嵌入SQLC语言运行时执行创建功能)。
(c)你需要有VC++6.0的C程序编译器cl.exe及相关的动态连接库与库文件等。
(d)setenv-mysql.bat文件内容(根据VC++6.0安装目录及MySQL安装目录需做相应修改的):
@echooff
echoUseSETENVtosetuptheappropriateenvironmentfor
echobuildingEmbeddedSQLforCprograms
setpath="
\ProgramFiles\MySQL\MySQLServer5.5\bin"
"
\vc98\bin"
setINCLUDE=C:
\ProgramFiles\MySQL\MySQLServer5.1\Include;
\VC98\Include;
%include%
setLIB="
\ProgramFiles\MySQL\MySQLServer5.5\lib\debug"
\VC98\Lib;
%lib%
(e)嵌入SQL的C语言程序编译环境要求(即SETENV-mysql.BAT文件内容):
需VC安装目录下的\bin、\include、\lib子目录;
MySQL安装后子目录\binn、\include、\lib\debug等。
为此SETENV-mysql.BAT文件目录情况应按照实际目录情况调整。
(f)run-mysql.bat文件内容为:
cl/c/W3/D"
_x86_"
/Zi/od/D"
_DEBUG"
%1.c
link/NOD/subsystem:
console/debug:
full/debugtype:
cv%1.objkernel32.liblibcmt.liblibmysql.lib
%1.c代表C源程序,连接中用到的库文件在VC安装子目录及MySQL安装子目录中能找
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mysql数据库技术及实验指导实验参考 mysql 数据库技术 实验 指导 参考