MySQL数据库技术与实验指导
(第1版)
钱雪忠、王燕玲、张平 编著
清华大学出版社
2011.09
实验1 数据库系统基础操作
进入MySQL的官方下载页面:sql/downloads/
如果想旧的发布版本,可进入页面:sql/archives.php
例14 有一个脚本文件(test.sql),文件内容:
Show databases;
Create database test;
Use test;
Create table table_1( I int ) ENGINE = MyISAM;
执行之。
解:C:\> mysql -h localhost -u root -p <c:\test.sql
或mysql> source c:\test.sql
实验2 MySQL数据库基础操作
例21 创建jxgl数据库。
解:mysql>create database jxgl;
例22 查看本机服务器上数据库。
解:mysql>show databases;
或:mysql>show databases like 'my%';
例23 进入jxgl数据库。
解:mysql> USE jxgl;
例24 在命令行环境中,创建和删除数据库jxgl:
解:创建数据库:
C:\> mysqladmin -h localhost -u root -p create jxgl
删除数据库:
C:\> mysqladmin -h localhost -u root -p drop jxgl
实验3 表、ER图、索引与视图的基础操作
CREATE TABLE IF NOT EXISTS `jxgl`.`sc`(
`sno` CHAR(7) NOT NULL ,
`cno` CHAR(2) NOT NULL ,
`grade` INT NULL ,
PRIMARY KEY (`sno`,`cno`),INDEX `sc_ibfk_1`(`sno` ASC),INDEX `sc_ibfk_2`(`cno` ASC) , CONSTRAINT `sc_ibfk_1` FOREIGN KEY(`sno`) REFERENCES `jxgl`. `student`(`sno`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `sc_ibfk_2` FOREIGN KEY(`cno`) REFERENCES `jxgl`.`course` (`cno`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB;
例31 列出jxgl数据库中所有表。
解:mysql> use jxgl;
mysql> show tables;
或:C:\>mysqlshow -h localhost -u root -p jxgl
例32 列出jxgl数据库中表student的列。
解:mysql> use jxgl;
mysql> show columns from student;
或:mysql> show columns from jxgl.student;
或:C:\>mysqlshow -h localhost -u root -p jxgl student
例33 列出jxgl数据库中表的详细信息。
解:mysql> use jxgl;
mysql> show table status;
或:C:\>mysqlshow --status -h localhost -u root -p jxgl
mysql数据库损坏修复例34 列出jxgl数据库中表sc的索引。
解:mysql> use jxgl;
mysql> show index from sc;
或:mysql> show index from jxgl.sc;
例35使用SQL语句创建示例数据库(jxgl):其中,学生表要求学号为主键,性别默认为男,取值必须为男或女,年龄取值在15到45之间。
课程表(course)要求主键为课程编号,外键为先修课号,参照课程表的主键(cno)。
选修表(sc)要求主键为(学号,课程编号),学号为外键,参照学生表中的学号,课程编号为外键,参照课程表中的课程编号;成绩不为空时必须在0到100之间。
解:
Create Table Student
( Sno CHAR(7) NOT NULL ,
Sname VARCHAR(16),
Ssex CHAR(2) DEFAULT '男' CHECK (Ssex='男' OR Ssex='女'),
Sage SMALLINT CHECK(Sage>=15 AND Sage<=45),
Sdept CHAR(2),
PRIMARY KEY(Sno)
) ENGINE = InnoDB;
Create Table COURSE
( Cno CHAR(2) NOT NULL ,
Cname VARCHAR(20),
Cpno CHAR(2),
Credit SMALLINT,
PRIMARY KEY(Cno),
foreign key(cpno) references course(cno)
) ENGINE = InnoDB;
Create table sc
( sno char(7) not null,
cno char(2) not null,
grade smallint null check(grade is null or (grade between 0 and 100)),
Primary key(sno,cno),
Foreign key(sno) references student(sno),
Foreign key(cno) references course(cno)
) ENGINE = InnoDB;
例36 在表student中增加属性生日(birthday)。
解:ALTER TABLE student ADD birthday datetime;
例37删除例3-6中增加的属性生日(birthday)。
解:ALTER TABLE student DROP birthday;
例38 在表student中属性sname上建立索引(sn)。
解:alter table student add unique sn(sname);
例39 删除表sc。
解:DROP TABLE sc;
例310 在数据库jxgl中创建视图v,查询学生姓名,课程名及其所学课程的成绩。
解:mysql>use jxgl --先选择jxgl数据库为当前数据库
Database changed
mysql> create view v(sname,cname, grade) as select sname,cname,grade from student,course,sc
-> where student.sno=sc.sno and sco=ccourseo;
例311 显示数据库jxgl中视图v创建的信息。
解:mysql> SHOW CREATE VIEW v;
实验4 SQL语言——SELECT查询操作
例41 查询考试成绩大于等于90的学生学号。
解:SELECT DISTINCT SNO
FROM SC
WHERE GRADE>=90;
例42 查年龄大于18,并且不是信息系(IS)与数学系(MA)的学生姓名和性别。
解:SELECT SNAME, SSEX
FROM STUDENT WHERE SAGE>18 AND SDEPT NOT IN ('IS', 'MA');
例43 查以“MIS_”开头,且倒数第二个汉字为“导”字的课程的详细信息。
解:SELECT * FROM COURSE WHERE CNAME LIKE 'MIS#_%导_' ESCAPE '#';
例44 查询选修计算机系(CS)选修了2门及以上课程的学生学号。
解:SELECT STUDENT.SNO
FROM STUDENT, SC
WHERE SDEPT='CS' AND STUDENT.SNO=SC.SNO
GROUP BY STUDENT.SNO HAVING COUNT(*)>=2;
例45 查询student表与sc表的广义笛卡尔积。
解:SELECT STUDENT.*, SC.*
FROM STUDENT CROSS JOIN SC;
例46 查询student表与sc表基于学号sno的等值连接。
解:SELECT * FROM STUDENT, SC WHERE STUDENT.SNO=SC.SNO;
例47 查询student表与sc表基于学号sno的自然连接。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论