> 文档中心 > 【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f
参赛话题:如何体系化掌握数据库
话题描述:畅谈学习数据库的感悟及经历,分享技能

文章目录

    • 前言
    • 数据库介绍
    • 学习心得
    • 数据库实践
      • 一、实战项目
        • 1.系统概述
          • 1.1学生教师账号注册
          • 1.2学生组队
          • 1.3队伍参赛
          • 1.4队伍获奖信息查询
        • 2.需求分析
          • 2.1 数据流图
          • 2.2数据字典
            • 1.数据项定义
            • 2.数据结构
            • 3.数据流
            • 4.数据存储
            • 5.数据处理:
        • 3.数据库概念结构设计
          • 3.1 实体分析
          • 3.2 数据库概念结构设计
        • 4.数据库逻辑结构设计
            • 4.1 关系模型
          • 4.2表与视图的设计
        • 5 数据库物理设计及实施
      • 二、技术点
    • 推荐学习书籍
    • 技能证书
    • 总结

前言

在生活中,我们总是会和数据打交道。最简单的无非就是保存数据和读取数据。比如现实生活中我们可以把把平时花销记录下来,每月再查看总结一次。这时候我们用账本就可以啦。但如果是计算机中呢?
我们可以再电脑中建个Excel或者记事本等记录一下。如果我们学过编程,我们也可以把部分数据存放到数组和集合当中。其实说白了,存放在电脑中无非就两个地方:1.内存(借助数组,集合等);2.磁盘(借助Excel、word和记事本等)。 这使得我们的数据极其难处理,我们为了更好的管理我们的数据,就是使用数据库。
绝大多数的使用linux操作系统的大中小互联网网站都在使用mysql作为其后端的数据库存储,从大型的BAT门户,到电商平台,分类门户等无一例外都在使用,IOE逐渐淡化在一些传统行业,最近几年Oracle的对国内抵制使得MySQL以及国产数据库占领国内大量市场。显然,国产数据库已经取得特别高的成就,比如达梦数据库(DM)。面对大数据时代,我们应该学学习并掌握一门数据库语言,毕竟技多不压身嘛,在这里分享下如何体系化掌握数据库的心得和方法。

数据库介绍

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
MySQL 和 Oracle 都属于关系型数据库,现在都隶属于甲骨文公司,这家公司的产品很厉害。Oracle 相对 MySQL 更沉重一些,属于企业级应用。而 MySQL 是开源的,性能又给力,所以近些年来市场占用率已经飙升到了第一位,甩开 Oracle 两条街。
再来说说我们的国产数据库达梦数据库。
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,简称DM。达梦数据库管理系统的最新版本是8.0版本,简称DM8。
DM8采用全新的体系架构,在保证大型通用的基础上,针对可靠性、高性能、海量数据处理和安全性做了大量的研发和改进工作,极大提升了达梦数据库产品的性能、可靠性、可扩展性,能同时兼顾OLTP和OLAP请求,从根本上提升了DM8产品的品质。
● DM8采用多趟扫描、代价估算的优化策略,支持查询计划的HINT功能,可供经验丰富的DBA对特定查询进行优化改进,进一步提高查询的效率和灵活性。
●DM8是具有自主知识产权的高安全数据库管理系统,已通过公安部安全四级评测。是安全等级最高的商业数据库之一。同时DM8还通过了中国信息安全测评中心的EAL4级评测。
● 为保障用户现有应用系统上的投资,降低系统迁移到DM8的难度,DM8提供了许多与其他数据库系统兼容的特性,尤其针对Oracle,DM8提供了全方位的兼容,以降低用户学习成本,迁移成本。体系结构方面,DM8兼容oracle的单库单实例式结构、表空间-数据文件机制、回滚机制、多版本并发控制、闪回。
● DM8可以提供数据库或整个服务器的冷/热备份以及对应的还原功能,达到数据库数据保护和迁移。支持的备份类型包括物理备份、逻辑备份,可实现全库、表空间、B树3个级别的备份。支持增量备份,支持以检查点进行还原。

DM采用创新的混合数据库模型,扩展的多媒体和GIS数据类型等技术,成功实现了空间数据、多媒体数据与常规数据的一体化定义、存储和管理,在空间地理信息及多媒体信息管理方面具有明显的优势。此外,DM系统还提供了地理信息的分层检索、限定检索、漫游、特写、局部放大、叠加等功能。

学习心得

博主在这整理了针对Mysql数据库的学习路线,希望能帮助到大家学习。

一、数据库基础知识
1.数据模型(层次、网状、关系)。
2.数据库系统的结构(二级映像,三级模式)。
3.数据库系统的组成。
4.关系代数(域、笛卡尔积、并、差、交学案则、投影、连接、除)。
5.关系的完整性(参照完整性、实体完整性、用户定义完整性)。

二、数据库应用
1.SQL语法(增、删、改、查)。
2.进阶SQL(连接查询、嵌套查询、集合查询、基于派生表的查询)。
3.视图(定义、更新、作用)。
4.触发器(定义、激活、删除)。
5.存储器(定义、删除、调用)。
6.断言(简单了解)。

三、数据库设计与开发
1.范式(1NF,2NF,3NF,BCNF,4NF)。
2.数据库设计的步骤(需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施与维护)。
3.数据库编程(嵌入式SQL、游标、函数)

四、数据库系统
1.关系查询处理和查询优化。
2.数据库故障(事务故障、系统故障、介质故障)及数据库恢复。
3.并发控制(封锁协议、活锁、死锁、并发调度、两段锁协议)。

数据库实践

真实经历:当时我们做项目,当时要部署到服务器,发现我们数据库被黑了,给我们要比特币,我们上网搜了一下,1比特币 =201,841.83人民币 ,我们当场破防了,当时找了很久的备份,虽然不是最新的,但最起码也能用,建议做项目的童鞋们一定要备份好数据库!一定要备份好数据库!一定要备份好数据库!!!
博主来举一个简单的实战的例子,来总结一下项目的数据库工作有哪些,大家有兴趣可以尝试一下。

一、实战项目

学院大赛管理系统设计与实现

1.系统概述

每年学院都举行若干大赛,像挑战杯、软件大赛等。现希望设计并开发一个系统来管理大赛相关的报名以及获奖情况信息。学生通过自行组队参加各类比赛,比赛后可以查看自己队伍的获奖信息。

1.1学生教师账号注册

学生教师通过该系统注册账号,并输入基本信息,得到该系统账号(一人一号)。

1.2学生组队

学生队长通过创建队伍,首先输入队伍基本信息,其次输入队员信息,邀请指导教师,并输入指导信息,学生组队成功(一个人可以创建多个队伍,也可以参加多个队伍)。

1.3队伍参赛

一个队伍只能通过查看大赛信息参加一个大赛。

1.4队伍获奖信息查询

学生老师可以根据队伍查询队伍获奖信息。

2.需求分析

2.1 数据流图

顶层数据流图:
【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

0层数据流图:
【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

2.2数据字典
1.数据项定义

数据项名称:学号
含义说明:标识一个学号,一个学生只有一个学号,一个学号对应一个学生
类型:字符型
长度:20
具体的学号编码规律如下:
学生的学号前四位是入学年份
紧接着两位代表专业,最后三位代表专业内学生代号
学号=入学年份十专业号十专业内学生代号
如学号20105026表示该学生2019年入学,软件测试专业,专业内代号26

数据项名称:身份证号
含义说明:一个用户只能有一个身份证号,每个用户的身份证号都不一样
类型:字符型
长度:20

数据项名称:教师编号
含义:一个教师只能有一个教师号,一个教师号对应一个教师
类型:字符型
长度:20

数据项名称:队伍编号
含义说明:一个队伍只能有一个队伍编号,一个队伍编号对应一个队伍,唯一标识
类型:字符型
长度:20

2.数据结构

用户(账号,密码,{用户类型,用户姓名,用户身份证号,用户性别})
队伍信息(队伍名称,队伍状态,队长学号,队伍创建时间,队员,参与大赛,指导教师,{获奖类型,获奖时间,获奖名称,获奖级别})
学生信息(学号,身份证号,姓名,性别,班级)
教师信息(教师编号,教师姓名,职称,性别,电话,就业指导率,毕业率)

3.数据流

数据流名称:参赛信息
含义说明:学生参加比赛的信息表
去向:审核参赛
数据流量:一份一次
组成:队伍编号+队伍名称+队伍状态+队长学号+参与大赛+指导教师+队员

数据流名称:获奖信息
含义说明:学生参加大赛获得的奖项
去向:学生查看
数据流量:
组成:团队编号+参加大赛+获奖类型+获奖时间+获奖名称+获奖级别+指导教师+队员

数据流名称:学生信息
含义说明:学生的基本信息
去向:学生组队
数据流量:
组成:学号+身份证号+姓名+性别+班级

数据流名称:教师信息
含义说明:教师的基本信息
去向:学生组队
数据流量:
组成:教师编号+教师姓名+职称+性别+电话+就业指导率+毕业率

4.数据存储

数据存储名称:学生信息表
含义说明:存放学生的基本信息
组成:学生
说明:

数据存储名称:教师信息表
含义说明:存放教师的基本信息
组成:教师
说明:

数据存储名称:大赛信息表
含义说明:存放大赛的基本信息
组成:大赛+大赛状态
说明:大赛状态是大赛当前的状态

数据存储名称:获奖信息表
含义说明:存放学生的获奖信息
组成:获奖
说明:

5.数据处理:

处理过程名称:队伍编号审核
输入:队伍编号
输出:认定合格的队伍编号
加工逻辑:根据队伍信息表和队伍编号,如果队伍编号在队伍信息表中存在并且没有被锁定,那么队伍编号是有效的队伍编号,否则是无效的队伍编号。

3.数据库概念结构设计

3.1 实体分析

用户:账号,密码
用户信息:用户账号,用户类型,用户姓名,用户身份证号,用户性别
队伍信息:队伍id,队伍名称,队伍状态,队长学号,队伍创建时间,参与大赛Id,指导教师id
队员信息:队伍编号,队员学号
学生信息:学号,身份证号,姓名,性别,班级
教师信息:教师编号,教师姓名,职称,性别,电话,就业指导率,毕业率
大赛信息:大赛id,大赛名称,组织单位,大赛等级,报名时间,初赛时间,复赛时间,举办年份,大赛状态
获奖信息:获奖id,团队id,大赛id,获奖类型,获奖时间,获奖名称,获奖级别

这些实体间的语义描述如下:
一个学生一个教师均有一个用户,一个用户包含一个用户信息,一个学生可以参加多个队伍,一个队伍有多个成员,一个队伍可参与一个比赛,一个比赛获得一个奖项。

3.2 数据库概念结构设计

【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

4.数据库逻辑结构设计

4.1 关系模型

【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

4.2表与视图的设计

【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

5 数据库物理设计及实施

以下就是设计数据库的代码了:


– Table structure for Award


DROP TABLE IF EXISTS `Award`;CREATE TABLE `Award` ( `award_id` int(255) NOT NULL AUTO_INCREMENT COMMENT '获奖编号', `team_id` int(255) DEFAULT NULL COMMENT '团队编号', `award_competition_id` int(255) DEFAULT NULL COMMENT '获奖大赛Id', `award_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '获奖类    型', `award_time` year(4) DEFAULT NULL COMMENT '获奖时间', `award_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '获奖  名称', `award_level` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '获奖级别', PRIMARY KEY (`award_id`), KEY `team_id` (`team_id`), KEY `award_competition_id` (`award_competition_id`), CONSTRAINT `Award_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `Team` (`team_id`) ON DELETE CASCADE ON UPDATE CASCADE,CONSTRAINT `Award_ibfk_2` FOREIGN KEY (`award_competition_id`) REFERENCES  `Competition` (`Competitioninformation_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of Award


INSERT INTO `Award` VALUES ('1', '1', '1', '省级', '2021', '齐鲁软件设计大赛', '一等奖');INSERT INTO `Award` VALUES ('2', '2', '2', '省级', '2020', '山东省软件设计大赛', '二等奖');

– Table structure for Competition


DROP TABLE IF EXISTS `Competition`;CREATE TABLE `Competition` ( `Competitioninformation_id` int(255) NOT NULL AUTO_INCREMENT, `Competitioninformation_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  Organizer` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '举办单位', `Competition_level` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '大赛级别', Registration_time` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '报名时间', Preliminary_time` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '初赛时间', Second_round_time` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '复赛时间',`Year_of_competition` date DEFAULT NULL COMMENT '参赛时间',`Competition_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '大赛状态', PRIMARY KEY (`Competitioninformation_id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8    COLLATE=utf8_unicode_ci;

– Records of Competition


INSERT INTO `Competition` VALUES ('1', '齐鲁软件设计大赛', '省教育厅、省计算机协会', '省级', '每年5月中旬', '6月下旬', '10月中旬', '2020-05-01', '完结');INSERT INTO `Competition` VALUES ('2', '山东省软件设计大赛', '省教育厅', '省级', '每年5月中旬', '6月下旬', '10月中旬', '2021-05-11', '完结');INSERT INTO `Competition` VALUES ('3', '中国软件杯', '中央教育厅', '国家级', '每年4月中旬', '7月中旬', '11月下旬', '2021-04-23', '完结');INSERT INTO `Competition` VALUES ('4', '山东省数学建模大赛', '山东省数学建模协会', '省级', '每年5月下旬', '7月中旬', '8月下旬', '2021-05-21', '报名阶段');INSERT INTO `Competition` VALUES ('5', '互联网+创新创业大赛', '山东省', '省级', '每年5月下旬', '7月中旬', '11月中旬', '2021-05-27', '报名阶段');INSERT INTO `Competition` VALUES ('6', '美国数学建模', '美国', '国家级', '每年5月下旬', '7月中旬', '8月上旬', '2021-05-12', '报名阶段');INSERT INTO `Competition` VALUES ('7', '全国大学生英语竞赛', '中央教育厅', '国家级', '每年4月中旬', '5月下旬', '7月上旬', '2021-04-14', '复赛阶段');INSERT INTO `Competition` VALUES ('8', '大学生服务外包大赛', '南京大学承办', '国家级', '每年11月中旬', '次年5月中旬', '次年6月下旬', '2020-11-19', '复赛阶段');INSERT INTO `Competition` VALUES ('9', '蓝桥杯', 'ACM协会', '省级', '每年3月中旬', '5月上旬', '5月中旬', '2021-03-18', '完结');INSERT INTO `Competition` VALUES ('10', '全国大学生计算机能力挑战赛', '计算机协会', '国家级', '每年9月中旬', '10月中旬', '12月下旬', '2020-10-16', '完结');

– Table structure for Student


DROP TABLE IF EXISTS `Student`;CREATE TABLE `Student` (  `sno` int(255) NOT NULL COMMENT '学号',  `sid_card` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '身份证号',  `sname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '姓名',  `ssex` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '性别',  `sclass` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '班级',  PRIMARY KEY (`sno`),  KEY `sname` (`sname`),  KEY `sno` (`sno`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of Student


INSERT INTO `Student` VALUES ('1', '37142820001118751X', '梁恩硕', '男', '软测191');INSERT INTO `Student` VALUES ('2', '371428200011187511', '李贺奥', '男', '软测191');INSERT INTO `Student` VALUES ('3', '371428200011187512', '王杰', '男', '软测191');INSERT INTO `Student` VALUES ('4', '371428200011187513', '王博涛', '男', '软测191');INSERT INTO `Student` VALUES ('5', '371428200011187514', '李子铭', '男', '软件193');INSERT INTO `Student` VALUES ('6', '371428200011187515', '史善力', '男', '软测171');INSERT INTO `Student` VALUES ('7', '371428200011187516', '陈英杰', '男', '软测191');INSERT INTO `Student` VALUES ('8', '371428200011187517', '魏永超', '男', '软测191');INSERT INTO `Student` VALUES ('9', '371428200011187518', '兰天增', '男', '软测191');INSERT INTO `Student` VALUES ('10', '371428200011187519', '兰兰1', '男', '软测191');INSERT INTO `Student` VALUES ('11', '371428200011187520', '兰兰2', '男', '软测194');

– Table structure for Teacher


DROP TABLE IF EXISTS `Teacher`;CREATE TABLE `Teacher` (  `tno` int(255) NOT NULL COMMENT '教师编号',  `tname` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '教师姓名',  `ttitle` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '教师职务',  `tsex` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '教师性别',  `tphone` int(20) DEFAULT NULL,  `tjiuye` char(10) COLLATE utf8_unicode_ci DEFAULT NULL,  `tbiye` char(10) COLLATE utf8_unicode_ci DEFAULT NULL,  PRIMARY KEY (`tno`),  KEY `tname` (`tname`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of Teacher


INSERT INTO `Teacher` VALUES ('1', '邢国波', '副教授', '男', '1555555555', '99%', '99%');INSERT INTO `Teacher` VALUES ('2', '张三三', '讲师', '男', '1555555554', '99%', '99%');INSERT INTO `Teacher` VALUES ('3', '李思思', '助教', '女', '1555555578', '99%', '99%');INSERT INTO `Teacher` VALUES ('4', '王五五', '讲师', '男', '1555555514', '99%', '99%');INSERT INTO `Teacher` VALUES ('5', '六六', '助教', '男', '1555555151', '99%', '99%');INSERT INTO `Teacher` VALUES ('6', '七七', '讲师', '女', '1555555515', '99%', '99%');INSERT INTO `Teacher` VALUES ('7', '八八', '讲师', '女', '1555555556', '99%', '99%');INSERT INTO `Teacher` VALUES ('8', '九九', '讲师', '男', '1555555557', '99%', '99%');INSERT INTO `Teacher` VALUES ('9', '十十', '讲师', '男', '1555555558', '99%', '99%');INSERT INTO `Teacher` VALUES ('10', '测试', '助教', '男', '1555555559', '99%', '99%');INSERT INTO `Teacher` VALUES ('11', '测试1', '讲师', '女', '1555555577', '99%', '99%');INSERT INTO `Teacher` VALUES ('12', '测试2', '助教', '男', '1555555787', '99%', '99%');

– Table structure for Team


DROP TABLE IF EXISTS `Team`;CREATE TABLE `Team` (  `team_id` int(11) NOT NULL COMMENT '队伍号',  `team_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '团队名称',  `team_type` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '状态',  `team_captain_sno` int(255) NOT NULL COMMENT '队长学号',  `team_tname` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '指导老师',  `team_captain_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '队长姓名',  `team_time` int(255) DEFAULT NULL COMMENT '队伍创建时间',  `Competitioninformation_id` int(255) DEFAULT NULL COMMENT '参与大赛Id',  PRIMARY KEY (`team_id`),  KEY `Team_ibfk_1` (`team_captain_sno`),  KEY `team_tname` (`team_tname`), KEY `team_captain_name` (`team_captain_name`), KEY `Competitioninformation_id` (`Competitioninformation_id`),  CONSTRAINT `Team_ibfk_1` FOREIGN KEY (`team_captain_sno`) REFERENCES `Student` (`sno`) ON DELETE CASCADE ON UPDATE CASCADE,  CONSTRAINT `Team_ibfk_2` FOREIGN KEY (`team_tname`) REFERENCES `Teacher` (`tname`) ON DELETE CASCADE ON UPDATE CASCADE,  CONSTRAINT `Team_ibfk_3` FOREIGN KEY (`team_captain_name`) REFERENCES `Student` (`sname`) ON DELETE CASCADE ON UPDATE CASCADE,  CONSTRAINT `Team_ibfk_4` FOREIGN KEY (`Competitioninformation_id`) REFERENCES `Competition` (`Competitioninformation_id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of Team


INSERT INTO `Team` VALUES ('1', '一群人', '一等奖', '1', '邢国波', '梁恩硕', '2021', '1');INSERT INTO `Team` VALUES ('2', 'Joker', '二等奖', '2', '邢国波', '李贺奥', '2020', '2');

– Table structure for TeamUser


DROP TABLE IF EXISTS `TeamUser`;CREATE TABLE `TeamUser` (  `team_id` int(255) NOT NULL COMMENT '团队编号',  `sno` int(255) NOT NULL COMMENT '队员学号',  KEY `sno` (`sno`),  KEY `TeamUser_ibfk_1` (`team_id`),  CONSTRAINT `TeamUser_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `Team` (`team_id`) ON DELETE CASCADE ON UPDATE CASCADE,  CONSTRAINT `TeamUser_ibfk_2` FOREIGN KEY (`sno`) REFERENCES `Student` (`sno`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of TeamUser


INSERT INTO `TeamUser` VALUES ('1', '2');INSERT INTO `TeamUser` VALUES ('1', '3');INSERT INTO `TeamUser` VALUES ('1', '4');INSERT INTO `TeamUser` VALUES ('1', '5');INSERT INTO `TeamUser` VALUES ('1', '6');INSERT INTO `TeamUser` VALUES ('1', '1');INSERT INTO `TeamUser` VALUES ('2', '3');INSERT INTO `TeamUser` VALUES ('2', '4');INSERT INTO `TeamUser` VALUES ('2', '5');INSERT INTO `TeamUser` VALUES ('2', '6');INSERT INTO `TeamUser` VALUES ('2', '2');

– Table structure for User


DROP TABLE IF EXISTS `User`;CREATE TABLE `User` (  `id` int(11) NOT NULL,  `account` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '账号',  `passward` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '密码',  PRIMARY KEY (`id`),  KEY `account` (`account`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of User



– Table structure for UserInformation


DROP TABLE IF EXISTS `UserInformation`;CREATE TABLE `UserInformation` (  `account` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户账号',  `user_type` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户类型',  `user_sex` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户性别',  `user_id_card` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户身份证号',  `user_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL COMMENT '用户姓名',  KEY `account` (`account`),  CONSTRAINT `UserInformation_ibfk_1` FOREIGN KEY (`account`) REFERENCES `User` (`account`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

– Records of UserInformation



– View structure for Check_award


DROP VIEW IF EXISTS Check_award;
CREATE ALGORITHM=UNDEFINED DEFINER=root@% SQL SECURITY DEFINER VIEW Check_award AS select Award.award_type AS award_type,Award.award_level AS award_level,Award.award_time AS award_time,count(Award.award_time) AS 数量 from Award group by Award.award_level,Award.award_type,Award.award_time ;

SELECT *FROM Check_awardUNIONSELECT award_type,'合计',sum(数量) as '数量'FROM Check_awardGROUP by award_type;

存储过程和触发器:
drop trigger if exists usertrigger;
CREATE TRIGGER usertrigger AFTER INSERT ON UserInformation FOR EACH ROW
BEGIN
DECLARE type1,Idcard1,name1,sex1 varchar(255);
set Idcard1 = (SELECT user_id_card FROM UserInformation WHERE account = new.account);
set name1=(SELECT user_name FROM UserInformation WHERE account = new.account);
set sex1=(SELECT user_sex FROM UserInformation WHERE account = new.account);
set type1=(SELECT user_type FROM UserInformation WHERE account = new.account);
case type1
WHEN 1 THEN INSERT INTO Student(sid_card,sname,ssex)VALUES(‘Idcard1’,‘name1’,‘sex1’);
WHEN 2 THEN INSERT INTO Teacher(tname,tsex)VALUES(‘name1’,‘sex1’);
END CASE;
END

drop PROCEDURE IF EXISTS InsertS;
CREATE PROCEDURE InsertS ( sno1 int , sid_card varchar(255),sname1 varchar(255),ssex1 varchar(255),sclass1 varchar(255))
BEGIN
insert into Student (sno,sid_card,sname,ssex,sclass) VALUES(sno1,sid_card1,sname1,ssex1,sclass1);
END
call InsertS(20,‘371414200011187542’,‘测试’,‘男’,‘软测191’,);

drop PROCEDURE IF EXISTS Updatepassward;
CREATE PROCEDURE Updatepassward (account1 varchar(255), passward1 varchar(255))
BEGIN
UPDATE User
SET passward=passward1
WHERE account=account1;
END
call Updatepassward(‘admin’,‘admin’);

drop trigger if exists setpassward;
CREATE TRIGGER setpassward BEFORE INSERT ON User
FOR EACH ROW
BEGIN
SET new.passward=‘123456’;
END

INSERT INTO User(account,passward) VALUES (‘001’,‘’);

drop PROCEDURE IF EXISTS searchStudent;
CREATE PROCEDURE searchStudent ( sid_card1 varchar(255),sname1 varchar(255),ssex1 varchar(255),sclass1 varchar(255))
BEGIN
SELECT *
FROM Student
where (sid_card=sid_card1 and sname=sname1) or (ssex=ssex1 and sclass=sclass1);
END
CALL searchStudent(‘’,‘’,‘男’,‘软测191’);

UPDATE Student
SET sclass=‘软测193’
WHERE sno=10;

DELETE
FROM Student
WHERE sno=11;

UPDATE Teacher
SET ttitle=‘助教’
WHERE tno=11;

DELETE
FROM Teacher
WHERE tno=12;

INSERT INTO Teacher(tno,tname,ttile,tsex)
VALUES (13,‘测试3’,‘讲师’,‘女’);

– 查询队伍信息

SELECT Student.sno,sname,team_name,team_time,Competition.Competitioninformation_name,team_captain_name,team_tname,team_type,award_level,award_name,award_time,award_type
FROM Student,Team,TeamUser,Competition,Award
WHERE Student.sno=TeamUser.sno AND Award.team_id=Team.team_id AND Competition.Competitioninformation_id=Team.Competitioninformation_id and Team.team_id=TeamUser.team_id AND Student.sno=2;

– 查询获奖信息

CREATE VIEW Check_award AS
SELECT award_type,award_level,award_time,COUNT(award_time)‘数量’
FROM Award
GROUP BY award_level,award_type,award_time;

SELECT *
FROM Check_award
UNION
SELECT award_type,‘合计’,sum(数量) as ‘数量’
FROM Check_award
GROUP by award_type;

SELECT award_type,award_level,数量
FROM Check_award
WHERE award_time BETWEEN 2019 AND 2020;

SELECT Student.sno,sname,sclass,ssex
FROM Student,TeamUser
WHERE Student.sno=TeamUser.sno AND TeamUser.team_id=1;

– drop trigger if exists usertrigger;
– CREATE TRIGGER usertrigger AFTER INSERT ON User FOR EACH ROW
– BEGIN
– DECLARE account1,passward1 varchar(255);
– set account1 = (SELECT account1 FROM UserInformation WHERE account = new.account);
– set passward1=(SELECT passward1 FROM UserInformation WHERE account = new.account);
– INSERT INTO UserInformation(account)VALUES(‘new.account’);
– END

– 用户角色

drop trigger if exists userinformationtrigger;
CREATE TRIGGER userinformationtrigger AFTER INSERT ON UserInformation FOR EACH ROW
BEGIN
DECLARE type1,Idcard1,name1,sex1,number1 varchar(255);
set Idcard1 = (SELECT user_id_card FROM UserInformation WHERE account = new.account);
set name1=(SELECT user_name FROM UserInformation WHERE account = new.account);
set sex1=(SELECT user_sex FROM UserInformation WHERE account = new.account);
set type1=(SELECT user_type FROM UserInformation WHERE account = new.account);
set number1=(SELECT number FROM UserInformation WHERE account = new.account);
case type1
WHEN 1 THEN INSERT INTO Student(sno,sid_card,sname,ssex)VALUES(number1,Idcard1,name1,sex1);
WHEN 2 THEN INSERT INTO Teacher(tno,tname,tsex)VALUES(number1,name1,sex1);
ELSE SET type1=0;
END CASE;
END

INSERT INTO User(account) VALUES (‘003’);
INSERT INTO UserInformation VALUES(‘003’,‘1’,‘男’,‘37142820001118752X’,‘触发器测试’,22);

INSERT INTO User(account) VALUES (‘002’);
INSERT INTO UserInformation VALUES(‘002’,‘2’,‘男’,‘37142820001118752X’,‘触发器测试’,23);

– 插入存储过程

drop PROCEDURE IF EXISTS InsertS;
CREATE PROCEDURE InsertS ( sno1 int,sid_card1 varchar(255),sname1 varchar(255),ssex1 varchar(255),sclass1 varchar(255))
BEGIN
insert into Student (sno,sid_card,sname,ssex,sclass) VALUES(sno1,sid_card1,sname1,ssex1,sclass1);
END
call InsertS(20,‘371428200011187521’,‘测试’,‘男’,‘软测191’);

– 修改密码

drop PROCEDURE IF EXISTS Updatepassward;
CREATE PROCEDURE Updatepassward (account1 varchar(255), passward1 varchar(255))
BEGIN
UPDATE User
SET passward=passward1
WHERE account=account1;
END
call Updatepassward(‘admin’,‘admin’);

– 默认密码

drop trigger if exists setpassward;
CREATE TRIGGER setpassward BEFORE INSERT ON User
FOR EACH ROW
BEGIN
SET new.passward=‘123456’;
END

INSERT INTO User(account,passward) VALUES (‘001’,‘’);

– 模糊查询

drop PROCEDURE IF EXISTS searchStudent;
CREATE PROCEDURE searchStudent ( sid_card1 varchar(255),sname1 varchar(255),ssex1 varchar(255),sclass1 varchar(255))
BEGIN
SELECT *
FROM Student
where
(sclass=sclass1 AND sname=sname1 AND ssex=ssex1 AND sid_card=sid_card1)
OR (sclass=sclass1 AND sname=sname1 AND sid_card=sid_card1) OR (ssex=ssex1 AND sname=sname1 AND sid_card=sid_card1)
OR (sclass=sclass1 AND sname=sname1 AND ssex=ssex1) OR (sclass=sclass1 AND sid_card=sid_card1 AND ssex=ssex1)
OR (sclass=sclass1 AND sname=sname1) OR (ssex=ssex1 AND sid_card=sid_card1) OR (sclass=sclass1 AND ssex=ssex1)
OR (sclass=sclass1 AND sid_card=sid_card1) OR (sname=sname1 AND ssex=ssex1) OR (sname=sname1 AND sid_card=sid_card1)
OR sclass=sclass1 OR sname=sname1 OR ssex=ssex1 OR sid_card=sid_card1;
END

CALL searchStudent(‘’,‘’,‘女’,‘’);

二、技术点

1.进行简单的需求分析(数据流图、数据字典、数据结构等)涉及到软件工程的一些知识。
2.绘制数据库概念模型。
3.用ERstudio画出E-R图。
4.用ERstudio导出SQL语句。
5.根据需求创建触发器、存储结构。

推荐学习书籍

以下是博主对初学者推荐的几本书:
《数据库系统概论》 这是部分高校都要学习的一本书,非常的详细,覆盖所有知识点,对初学者理解概念、实际操作都非常有帮助。
对于“大佬”来说:真没有推荐的书,最好的书就是实践,毕竟实践出真知嘛。

技能证书

postgreSQL按照等级分为PGCA、 PGCE、PGCM,大家可以根据自己的能力适当选择一个考,毕竟人往高处走,越高越好。
【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验【如何体系化掌握数据库】如何体系化掌握数据库?--从0到1沉浸式数据库学习体验

总结

我觉得成为一个优秀的DBA应该具备的优点有:
1.熟练掌握数据库知识,包括 SQL 语言、备份、恢复、管理、数据库结构知识、数据库运行原理。
2.至少熟练掌握一种数据库,了解其他数据库(有一定应用能力)。实际应用中,很少有不与其他类型数据库交互的数据库,如果只熟练掌握一种数据库,那么当需要与其他数据库交互时,就会无从下手。
3.综合应用能力,有一定的程序设计能力,包括操作系统、网络与安全等知识。
最后,博主希望大家一起努力,成为一名合格的DBA。

注:本文章仅用于参考学习,如有错误,请大家指正。
CSDN话题挑战赛第1期
活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f

ZDfans