1、创建学生数据库

create database mystudent charset utf8;

2、分别输入创建表命令

1)创建Student表

CREATE TABLE Student

(Sno   CHAR(9)  PRIMARY  KEY,  /* 列级完整性约束条件,Sno是主码*/

Sname  CHAR(20)  UNIQUE,     /* Sname取唯一值*/

Ssex    CHAR(2),

Sage   SMALLINT,

Sdept  CHAR(20)

)charset utf8;

2)创建Course表

CREATE TABLE  Course

(Cno       CHAR(4)  PRIMARY KEY,

Cname  CHAR(40),

Cpno     CHAR(4),

Ccredit  SMALLINT,

FOREIGN KEY (Cpno) REFERENCES  Course(Cno)

) charset utf8;

3)创建SC表

CREATE TABLE  SC

(Sno  CHAR(9),

Cno  CHAR(4),

Grade  SMALLINT,

PRIMARY KEY (Sno,Cno),

/* 主码由两个属性构成,必须作为表级完整性进行定义*/

FOREIGN KEY (Sno) REFERENCES Student(Sno),

/* 表级完整性约束条件,Sno是外码,被参照表是Student */

FOREIGN KEY (Cno) REFERENCES Course(Cno)

/* 表级完整性约束条件, Cno是外码,被参照表是Course*/

) charset utf8;

(2)student专业表

CREATE TABLE Student

(Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件,Sno是主码*/

Sname CHAR(20) UNIQUE,

Ssex CHAR(2),

Sage SMALLINT,

Sdept numeric(2,0),

FOREIGN KEY(sdept) REFERENCES sdept(Deptno)

/*在表级定义参照完整性*/

)charset utf8;

二   数据更新

1)在student表中输入1条数据

insert into student (sno,sname) values ('201215121','李勇');

3)在student表中输入4条数据

insert  into student values('201215121','李勇','男',20,'CS'),('201215122','刘晨','女',19,'CS'),('201215125','张立','男',19,'IS'),('201215123','王敏','女',18,'MA');

6)在sc表中输入5条数据

insert into sc values ('201215121','1',92), ('201215121','2',85), ('201215121','3',88), ('201215122','2',90),('201215122','3',80);

5)在course表中一次输入7条数据

insert  into course(cno,cname,cpno,Ccredit) values('1','数据库',5,4),('2','数学',null,2),('3','信息系统',1,4),('4','操作系统',6,3),('5','数据结构',7,4),('6','数据处理',null,2),('7','PASCAL语言',6,4);

  1. 分别用update命令输入Cpno列的数据

UPDATE course SET cpno=5 WHERE cno=1;

UPDATE course SET cpno=1 WHERE cno=3;

UPDATE course SET cpno=6 WHERE cno=4;

UPDATE course SET cpno=7 WHERE cno=5;

UPDATE course SET cpno=6 WHERE cno=7;

建立索引

2)建立索引

为学生-课程数据库中的Student,Course,SC三个表建立索引。Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引

create unique index  Stusno  on Student(Sno);

create unique index  Coucno ON Course(Cno);

create unique index  SCno ON SC(Sno ASC,Cno DESC);

  1. 查看上述命令执行后各表中索引的变化。

3)删除索引

删除Student表的sname索引

drop index sname on student;

4)修改索引

将SC表的SCno索引名改为SCSno

Mysql5.7以上:alter  table   sc  rename  index  SCno TO SCSno

Mysql5.7以下:删掉索引,重新建立索引

drop index scno ON sc;

create unique index  SCSno  on  sc(Sno ASC,Cno DESC);

查询

查询全体学生的学号与姓名。

SELECT Sno,Sname

FROM Student;

[例3.17]  查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept

FROM Student;

[例3.18]  查询全体学生的详细记录

SELECT  Sno,Sname,Ssex,Sage,Sdept

FROM Student;

SELECT  *

FROM Student;

查全体学生的姓名及其出生年份。

SELECT Sname,2014-Sage          /*假设当时为2014年*/

FROM Student;

查询计算机科学系全体学生的名单。

SELECT Sname

FROM     Student

WHERE  Sdept=‘CS’;

创建视图

建立信息系学生的视图。

CREATE VIEW IS_Student

AS

SELECT Sno,Sname,Sage

FROM     Student

WHERE  Sdept= 'IS';

建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生 。

CREATE VIEW IS_Student1

AS

SELECT Sno,Sname,Sage

FROM  Student

试图插入

别向信息系学生视图IS_Student和IS_Student1中插入一个新的学生记录,查看区别:

INSERT

INTO IS_Student

VALUES(‘201215129’,’赵新’,20);

INSERT

INTO IS_Student1

VALUES(‘201215130’,’赵力’,18);

触发器

(3)创建user表插入事件对应的触发器tri_insert_user;

DROP TRIGGER IF EXISTS `tri_insert_user`;

DELIMITER ;;

CREATE TRIGGER `tri_insert_user` AFTER INSERT ON `user` FOR EACH ROW BEGIN

INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, 'add a user',  NOW());

END

;;

DELIMITER ;

几点说明:

DELIMITER:改变输入的结束符,默认情况下输入结束符是分号;,这里把它改成了两个分号;;,这样做的目的是把多条含分号的语句做个封装,全部输入完之后一起执行,而不是一遇到默认的分号结束符就自动执行;

new:当触发插入和更新事件时可用,指向的是被操作的记录

old: 当触发删除和更新事件时可用,指向的是被操作的记录

(4)创建user表更新事件对应的触发器tri_update_user;

DROP TRIGGER IF EXISTS `tri_update_user`;

DELIMITER ;;

CREATE TRIGGER `tri_update_user` AFTER UPDATE ON `user` FOR EACH ROW BEGIN

INSERT INTO user_history(user_id,operatetype, operatetime) VALUES (new.id, 'update a user', NOW());

END

;;

DELIMITER ;

(5)创建user表删除事件对应的触发器tri_delete_user;

DROP TRIGGER IF EXISTS `tri_delete_user`;

DELIMITER ;;

CREATE TRIGGER `tri_delete_user` AFTER DELETE ON `user` FOR EACH ROW BEGIN

INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (old.id, 'delete a user', NOW());

END

;;

DELIMITER ;

(1)创建TEACHER1表

CREATE TABLE TEACHER1

(   Eno    SMALLINT  PRIMARY KEY ,   /*在列级定义主码*/

Ename  CHAR(10),

Job     CHAR(8),

Sal     DECIMAL(7,2),

Deduct  DECIMAL(7,2),

);

(2)创建触发器:

DROP TRIGGER IF EXISTS  Insert_TEACHER1_Sal;

DELIMITER ;;

CREATE TRIGGER Insert_Or_Update_Sal

BEFORE INSERT  ON Teacher1  /*触发事件是插入或更新操作*/

FOR EACH ROW        /*行级触发器*/

BEGIN                             /*定义触发动作体,*/

IF (new.Job='教授') AND (new.Sal < 4000)

THEN  SET new.Sal=4000;

END IF;

END;

;;

DELIMITER ;

在TEACHER1表中插入一些数据:

INSERT INTO `mystudent3`.`teacher1` (`Eno`, `Ename`, `Job`, `Sal`, `Deduct`) VALUES ('3', '1', '教授', '2', '2');

存储过程

  • 编写存储过程XsxxWh(学生信息查询) 和XsxxWh(学生信息维护) 实现对学生信息的查询和维护

DROP PROCEDURE IF EXISTS `XsxxCx`;

DELIMITER $$

CREATE PROCEDURE `XsxxCx`(cxlb int,cxnr varchar(50))

BEGIN

IF cxlb=0 then    /* 查询所有学生信息*/

SELECT * FROM Xsxxb;

ELSEIF cxlb=1 then  /* 查询指定学号的学生信息*/

SELECT * FROM Xsxxb WHERE xh=cxnr;

ELSE  /* 按姓名或姓名缩写模糊查询*/

SELECT * FROM Xsxxb WHERE xm LIKE concat(cxnr,'%') OR xmsx LIKE CONCAT(cxnr,'%');  /* CONCAT字符串拼接函数 */

END IF;

END$$

DELIMITER ;

函数

(三)编写函数PysxCx(拼音缩写查询) 实现汉字字符串的拼音缩写查询

DELIMITER $$

CREATE FUNCTION `pysxcx`(zw VARCHAR(50)) RETURNS VARCHAR(10) CHARSET utf8

BEGIN

SET @l=CHAR_LENGTH(zw);

SET @i=1;

SET @pysx='';

SET @jp='';

WHILE @i<=@l DO

SET @hz=SUBSTRING(zw,@i,1);

SELECT jp INTO @jp FROM hzpyb WHERE hz=@hz;

SET @pysx=CONCAT(@pysx,@jp);

SET @i=@i+1;

END WHILE;

RETURN @pysx;

END

$$

DELIMITER ;

操作操作操作操作操作操作相关推荐

  1. java8 流操作_java8中的流操作

    Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选.排序.聚合等.元素流在管道中经过 ...

  2. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )

    文章目录 一.判定是否是第一次启动 二.递归删除文件操作 三.解压 Zip 文件操作 四.解压操作相关代码 参考博客 : [Android 安全]DEX 加密 ( 常用 Android 反编译工具 | ...

  3. Docker常用命令操作——1)、镜像操作;2)、容器操作

    Docker常用命令&操作 1).镜像操作 https://hub.docker.com/ 操作 命令 说明 检索 docker search 关键字 eg:docker search red ...

  4. LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作

    从(1)我们看到,当生成entity class定义时,entity class或xml mapping文件中都已经完整的包含了entity和关系数据库的映射信息了,LINQ2SQL会根据这些信息来把 ...

  5. 计算机操作应用实训,计算机操作实训教案计算机操作实训教案.doc

    计算机操作实训教案计算机操作实训教案 <计算机应用基础> 实训教案 本周课标题:计算机操作授课班级13521.2上课 时间第5周上课 地点四号楼机房教 学 目 的通过本实训周的教学,让学生 ...

  6. python数据库操作框架_python bottle 框架操作数据库

    python操作mysql数据库用MySQLdb模板,操作postgresql则用psycopg2模块 安装MySQLdb(用yum安装,好像只能与mysql5.1版本配合使用):yum instal ...

  7. C# 对Ini文件操作(C# ini文件操作类)

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  8. .net 延时操作_锁、CAS操作和无锁队列的实现

    (给算法爱好者加星标,修炼编程内功) 来源:yishizuofei blog.csdn.net/yishizuofei/article/details/78353722 锁的机制 锁和人很像,有的人乐 ...

  9. python文件操作的方法_python文件操作的方法介绍

    文件操作 1.open()函数 open()函数主要用于文件处理,一般分为下面3个过程:1.打开文件 2.操作文件 3.关闭文件 常见的格式示例:f = open('note.txt','r') f. ...

  10. 浅谈管理系统操作日志设计(附操作日志类)

    原文地址:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html 相关文章链接:<系统操作日志设计> 在开始做之前,必须 ...

最新文章

  1. Metasploit技巧命令支持tips
  2. CCF-百度松果基金闭门研讨会成功举办,百度飞桨提供基金平台支持
  3. 【 HDU - 1796】How many integers can you find (容斥原理,二进制枚举或者dfs)
  4. Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
  5. CPU的乱序执行、指令流水线技术
  6. Python——format()/str.format()函数
  7. uBLAS——Boost 线性代数基础程序库
  8. 安装AAE v11.x Control Room简易教程
  9. 手撕:经典问题的遗传算法代码
  10. 北风修仙笔记—2020年7月
  11. CocosCreator黄金矿工资源工程文件
  12. 【机器学习】决策树(Decision Tree)
  13. [JZOJ5710] Mex
  14. 重置SMC和NVRAM解决MacBookPro卡顿问题
  15. AES128加密解密
  16. 西数USB硬盘 WD10JMVW-11AJGS 4数据恢复步骤
  17. android自定义下拉筛选,android自定义Spinner下拉菜单(下拉列表框)样式
  18. FileInputStream.read和FileChannel.read的区别
  19. 详述用网络分析仪测量DC-DC和PDN
  20. 关于a标签的点击事件触发无效的问题

热门文章

  1. DEI脉冲发生器维修高压电源维修PVX-5500
  2. ChatGpt - 基于人工智能检索进行论文写作
  3. 堆排序-Java小顶堆排序
  4. Hbase与Oracle比较(列式数据库与行式数据库)
  5. 如何修改项目中Git远程仓库地址?
  6. 接口自动化-接口请求数据准备-如何生成随机姓名、年龄、号码、email等
  7. 第四章 ContextCapture 19 空三控制点平差
  8. matlab2012a到期重新激活
  9. Las Vegas算法八皇后问题最好的一种实现
  10. NeurIPS'22杰出论文奖:3项研究出自华人团队,AlexNet获时间检验奖