MySQL数据库技术实战

 

一,安装mysql

很早之前就知道mysql提供了一套数据库样本(github地址),用于测试你的应用程序和数据库服务器。

今天分享下使用过程并将他发布到了码云,以便于同学们下载使用。

1. 要求

MySQL数据库服务器(5.0以上)

2. 安装使用

1.1

git clone https://gitee.com/JianQiangDeShiTouDian/mysql-demo-data.git

1.2

cd 下载好的仓库目录下

3. 使用说明

3.1.

mysql -u root -p < employees.sql

3.2

mysql -uroot -p < test_employees_md5.sql
或者 mysql -uroot -p < test_employees_sha.sql (校验是否安装成功)

然后就可以愉快的使用数据进行sql优化了。

二,mysql的介绍

1. 设计mysql数据表

  • 字符编码
  • 表的创建
  • 多表的设计规划

2. mysql基本操作

  • 数据的增删改查
  • 单一条件与多条件查询
  • 数据筛选时的常用运算符

3.mysql高级查询

  • 多表关联查询
  • 子查询与联合查询
  • 分组查询

4.mysql基本函数

  • mysql中的运算函数

  • sql使用的综合实战

  • 熟悉掌握mysql的增删改查

  • 掌握mysql中常用的运算符

  • 掌握mysql中聚合函数的使用

5.mysql的应用环境

内部

  • 移动APP
  • web网站
  • 客户端应用

外部

  • 竞品网站
  • 竞品app
  • 三方公开信息
  • 交换数据

6. 数据库的分类

关系型数据库

  • mysql
  • oracle
  • sql server

非关系型数据库(nosql)

  • redis
  • mongodb
  • memcached

关系型数据库的优点

  • 关系型数据库是表和表,表和字段,数据和数据之间是存在着关系的
  • 由于关系的存在,进行数据的增删改查非常方便
  • 拥有事务的操作,保证书的完整性和一致性

关系型数据库的缺点

  • 也正因为数据和数据之间是有关系的,这种关系的维护需要大量的算法,大量的算法就会降低系统的效果,同时降低性能
  • 因为性能的降低使的关系型数据库面对海量的数据增删改查,数据维护的等场景显得比较无力

7. 数据库的基本结构

8. 设计mysql数据库

  • 字符编码:

三,mysql基本操作

  • 多表设计规范
  • 标的创建
  • 案例:多表创建

1. 数据库创建的两种方法

  • 第一种,使用Navicat工具进行创建
  • 第二种,使用sql语句进行创建

2. sql语句创建数据库的语法

  • 创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名字 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

3. 表的创建

  • 第一种,使用Navicat工具进行创建
  • 第二种,使用sql语句进行创建

4. SQL语句创建表的语法

  • 创建表:
CREATE TABLE IF NOT EXISTS 'user'('user_id' INI UNSIGNED 

AUTO_INCREMENT,'user_name' VARCHAR(100)NOT NULL,'birthday'DATE,

PRIMARY KEY('user_id'))ENGINE=InnoDB DEFAULT CHARSET =utf8;

5.字段名

'birthday’DATE,字段名叫birthday日期类型

PRIMARY KEY(‘user_id’) 唯一主键user_id

)ENGINE=InnoDB DEFAULT CHARSET =utf8; 存储引擎为InnoDB 默认字符编码是utf8

6. 代表. 多表创建

6.1. 学校表(表名school)
  • id 数字 不能为空 自增 主键
  • school_name 不能为空 字符串
  • school_address 可以为空 字符串
6.2. 年级表(表名grade)
  • id 数字 不能为空 自增 主键
  • school_id 不能为空 数字
  • grade_name 年级名称 不能为空 字符串
6.3.班级表(表名class)
  • id 数字 不能为空 自增 主键
  • grade_id 不能为空 数字
  • class_name 班级名称 不能空 字符串
6.4. 学生表(表名student)
  • class_id 班级id 不能为空 数字
  • student_name 学生名称 不能为空 字符串
  • student_birthday 学生生日 日期类型
  • sex 性别 整数 不能为空
6.5. 课程表(表名course)
  • id 数字 不能为空 自增 主键
  • grade_id 年级id 不能为空 数字
  • course_name 课程名称 不能为空 字符串
  • full_mark 满分分数 数字类型
  • passing_score 及格分数 数字类型
6.6.成绩表(表名score)
  • id 数字 不能为空 自增 主键
  • student_id 学生id 不能为空 数字
  • course_id 课程id 整数 不能为空
  • score 分数 可以为空 数字

7. 插入数据

7.1. SQL语句插入数据语法

新增一行数据

INSERT INTO 表名(字段名1,字段名2,...字段名N)
VALUES (值1,值1,...值N);

新增多行数据

INSERT INTO 表名(字段名1,字段名2,...字段名N)

VALUES 

(值1,值1,...值N),

 (值1,值1,...值N),

  (值1,值1,...值N);
INSERT INTO USER ( user_name, birthday )
VALUES
( 'xiaoqiang', '2022-09-01' )

7.2.

INSERT into user(user_name,birthday)

VALUES

('小强','1987-01-01'),

('韩咩咩','1960-08-04'),

('建国','1955-06-07'),

('卫国','1930-08-09'),

('狗子个','1925-12-25');

8. 更新数据

8.1. 更新表中全部数据
UPDATE 表名 SET 列1=新值1,列2=新值

8.2. 按条件更新数据
UPDATE 表名 SET 列1=新值1,列2=新值2 WHERE 过滤条件

8.1.1. 点击对应的表,右键设计表可添加sex
输入

UPDATE user set sex=0;

刷新表格sex一列可变为0


8.1.2. 如果修改xiaoqiang的sex参数可输入:

UPDATE user set sex =1 where user_name='xiaoqiang';

8.1.3. 同时修改两个人(中文名需要加上’')的sex参数可输入

UPDATE user set sex =1 where user_name='韩梅'or user_name ='李华';

8.1.4. 修改表格里的名字和sex参数,可输入(要加where条件):

UPDATE user set user_name='xiaoqiang222'
,sex=0 where user_id = 1

9. 数据删除

9.1. 删除表中全部数据

delete from 表名;`

9.2. 按条件删除表中部分数据

delete from 表名 where 字段名=字段值;

9.3. 清空表中数据

truncate table 表名;

9.4. 删除表

drop table [if exists] 表名;

演练

①:删除表格中其中一行可输入:

delete from user where user_id = 2

②:删除表格所有可输入(这个方法删除数据,会有轨迹存在):

delete from user -- where user_id = 2

③:删除表格所有可输入(这个方法是真的删除数据,不会有任何的轨迹):

truncate table user

④清空表

这个方法删除数据,会有轨迹存在

⑤截断表(这个方法是真的删除数据,不会有任何的轨迹)

⑥删除表(以下两种方法都可以删除)


10. 数据基本查询

(1). 查询表中全部字段

select * from 表名
select 字段1,字段2... from 表名

①:查询全部可以输入:

select * from user;


②:查取出来的结果,sex参数可以修改的

(2). 查询表中指定的字段

①:要什么给什么可输入:

select user_name,birthday from user;

②:将表格中的字母改为中文可输入(如果不输入as,只是结果改为中文,表里并没有改为中文):

select user_name as '用户名',
birthday as '生日'
from user;

11. 条件查询

(1). 单条件查询

select * from 表名 where 字段名=字段值

(2). 模糊条件查询

  • 前模糊
select * from 表名 where 字段名 like "%关键字"
  • 后模糊
  • 前后模糊
select * from 表名 where 字段名 like "%关键字%"
  • 中间模糊
select * from 表名 where 字段名 like "关键字%关键字"
  • 哪里模糊就哪里模糊
select * from 表名 where 字段名 like "关键字%关键字%关键字"
  • 查询出姓李,并且名字只有两个的同学
select * from 表名 where 字段名 like "李_"
  • 查询出姓李,并且名字只有三个的同学
select * from 表名 where 字段名 like "李__"

注意:%代表一个或者多个,_代表一个下划线。
_是一个下划线,__是两个下划线,李后边是两个下划线

演练

①. 查找2班所有的人可输入:

select * from student where class_id = 2

②. 查找姓李的人可输入:

select * from student where student_name like '李%'

③. 查找姓段的人可输入:

select * from student where student_name like '段%'

④. 查找名字后面带有冬字的人可输入:

select * from student where student_name like '%冬'

⑤. 查找名字中间带有冬字的人可输入:

select * from student where student_name like '%冬%'

⑥. 查找名字里面带有薄,云字的人可输入:

select * from student where student_name like '薄%云'

⑦. 查找名字里面有薄_云字的人可输入:

select * from student where student_name like '薄_云'

⑧. 查找名字里面有__儿字的人可输入:

select * from student where student_name like '__儿'

12. 数据筛选查询

①. 大于

select * from score where score > 100

②. 小于

select * from score where score < 30

③. 大于等于

select * from score where score >= 150

④. 小于等于

select * from score where score <= 10

⑤. null

select * from school where school_address is null

⑥. 空字符串

select * from school where school_address =""

⑦. 不等于

select * from school where school_address !=""

⑧. 不为null

select * from school where school_address is not null

⑨包含in

select * from score where score in (30,40,50)

⑩不包含not in

select * from score where score not in (30,40,50)

⑪两者之间between and

select * from score where score between 90 and 100

⑫返回指定条数 limit

select * from score where score between 90 and 100 limut 3

⑬只显示从第三行开始,数到后五

select * from student limit 3,5

13. 多条件查询

① 与 and

select * from student where class sex =1 and sex = 1

select * from student where class sex =1 and sex = 1 and studen_name like "%香"

② 或 or

select * from course where full_mark = 100 or passing_score = 90

select * from course where full_mark = 100 or passing_score = 90 or grade_id = 10

③如果and和or一起使用会怎样?

select * from course where full_mark = 120 and grade_id = 10 or grade_id =1

四,高级查询

1.关联查询的分类与定义

1.1演练

  • 左关联查询实战
   select s.id '学校id',

   s.school_name '学校名称',

   s.school_address '学校地址',

   g.id '班级id'

   g.school_id '所属学校id'

   g.grade_name '班级名称'

   from

   school left join grade

   on school.id = grade.school_id

  • 右关联查询实战
select school.*,grade.*

from

school left join grade

on school.id = grade.school_id

  • 全关联查询实战
select s.*,g.*

from school s

join grade g

on s.id = g.school_id

  • 子查询实战(括号内就叫做子查询)
    ①要查寻有年纪的学校
select * from school where id
in
(select school_id from grade)

②查询出六年级,全体的数学分数

select * from score where score_id =
(select * from course where
grade_id in (select * from grade where ``grade_name='六年级') and course_name ='数学')
  • 联合查询
    基本格式
select 字段名 from 表名 where 筛选条件

union

select 字段名 from 表名 where 筛选条件

  • 结果排序
select * from score 

order by  score asc

select * from score 

where score > 140  

order by  score desc

  • 分组查询与筛选


请查询出现过5次以上的课程

select count(id) '课程出现的次数'

,course_name

from course 

group by course_name

having count(id) > 5

五,聚合函数

  • 最大值
  • 最小值
  • 平均值
  • 求和

演练一

①查询出每个学生的总分

select sum(score)

from score

group by student_id

②查询出每个学生的最高分

select max(score),student_id

from score

group by student_id

③平均分

select avg(score),student_id

from score

group by student_id

④最小值 min

select min(score),student_id

from score

group by student_id

演练二

查询出每个年级中每个班级总分最高的学生

①查出每个学生的总分

select sum(score),student_id

from score

group by student_id

②查询出每个学生所在班级

select st.id,st.class_id,student_name,

stu_score.sum_score

from student st

left join

(select sum(score)sum_score,student_id

from score

group by student_id) stu_score

on st.id = stu_score.student_id

③根据我们现有的结果查询到学生所属班级

select 

c.id,c.class_name,c.grade_id,

sn.student_name,sn.sum_score

from class c

left join

(select sum(score)sum_score,student_id

from score

group by student_id) stu_score

on st.id = stu_score.student_id

) sn

on c.id = sn.class_id

④根据现有结果查询出所在年级

select 

g.grade_name,cc.class_name,cc.student_name,

cc.sum_score

from grade g

left join

(select c.id,c.class_name,c.grade_id,

sn.student_name,sn.sum_score

from class c

left join

(select sum(score)sum_score,student_id

from score

group by student_id) stu_score

on st.id = stu_score.student_id

) sn

on c.id = sn.class_id
) cc
on g.id = cc.class_id

六,总结

  • 字符编码(utf-8)
  • 三范式与反范式设计
  • 数据写入语句
  • 数据更新语句
  • 条件查询
  • 模糊查询
  • 多条件查询
  • 各种比较运算符
  • 左关联查询
  • 右关联查询
  • 全关联查询
  • 分组查询的概念与应用
  • 聚合函数
 
 
 
评论 
还能输入1000个字符
 
 插入表情

 
 
 条评论被折叠 查看
 
实付元
 点击重新获取
扫码支付
 
 钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值

 

MySQL数据库技术实战的更多相关文章

  1. 使用C语言调用mysql数据库编程实战以及技巧

    今天编写使用C语言调用mysql数据库编程实战以及技巧.为其它IT同行作为參考,当然有错误能够留言,共同学习. 一.mysql数据库的C语言经常使用接口API 1.首先当然是链接数据库mysql_re ...

  2. mysql数据库技术1——基本的增删查改的sql语句

    1.数据库语言的分类 DDL:数据库定义语言 data Definition language 用于创建.修改.和删除数据库内的数据结构,如: 1:创建和删除数据库(CREATE DATABASE | ...

  3. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL数据库的类型

    键值存储数据库临时性:如Memcached.临时性的键值数据库把数据存储在内存中,在两种情况下会造成上数据的丢失,一是断电,而是数据内容超出内存大小.这种处理的好处是非常快.永久型:如Tokyo Ty ...

  4. NoSQL数据库技术实战-第1章 NoSQL的数据一致性 传统关系型数据库的ACID

    在看着章节的时候,我简单的回顾了一下关系型数据库的事务处理的ACID原则,其中原子性和持久性比较好理解.由于以前没有深入去研究.关于一致性和隔离性上我产生了疑问,在整理后分析如下:   一致性:书中所 ...

  5. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL产生的原因

    NoSQL产生的原因: 关系型数据库不擅长的操作,是NoSQL应运而生的原因: 大量的数据写入操作书上写的是“大量数据的写入操作“,我理解的应该是“大量的数据写入操作”,因为大量的数据写入操作才会引起 ...

  6. mysql数据库优化实战--日期及IP地址的正确存储方式

  7. python中web应用与mysql数据库交互

    7使用数据库 具体使用python的DB-API,这一章里介绍如何编写代码与MYSQL数据库技术交互,这里使用一个通用的数据库API,名为DB-API. 7.1基于数据库的web应用 之前我们把日志数 ...

  8. 数据库技术丛书:SQL Server 2016 从入门到实战(视频教学版) PDF

    1:书籍下载方式: SQL Server2016从入门到实战 PDF 下载  链接:https://pan.baidu.com/s/1sWZjdud4RosPyg8sUBaqsQ 密码:8z7w 学习 ...

  9. 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)

    转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...

  10. Linux实战教学笔记29:MySQL数据库企业级应用实践

    第二十九节 MySQL数据库企业级应用实践 一,概述 1.1 MySQL介绍 MySQL属于传统关系型数据库产品,它开放式的架构使得用户选择性很强,同时社区开发与维护人数众多.其功能稳定,性能卓越,且 ...

随机推荐

  1. pinpoint:查看hbase表和修改数据过期时间

    先做个记录,监控数据量过大时可以设置表的数据过期时间来清理数据. 1. 查找本地数据表大小 [root@ZWZF-CWY-LZY-12 ~]# cd /home/pinpoint/hbase/data ...

  2. Vue3实现动态导入Excel表格数据

    1.  前言 在开发工作过程中,我们会遇到各种各样的表格数据导入,大部分我们的解决方案:提供一个模板前端进行下载,然后按照这个模板要求进行数据填充,最后上传导入,这是其中一种解决方案.个人认为还有另外 ...

  3. 【题解】CF631B Print Check

    题面传送门 解决思路: 首先考虑到,一个点最终的情况只有三种可能:不被染色,被行染色,被列染色. 若一个点同时被行.列染色多次,显示出的是最后一次被染色的结果.所以我们可以使用结构体,对每一行.每一列 ...

  4. Window使用PowerShell改文件时间戳

    We cross infinity with every step; we meet eternity in every second. 我们每一步都跨过无穷,每一秒都遇见永恒. Window使用Po ...

  5. i春秋象棋

    这是一道非常有意思的一道题,打开后就是一个pve的象棋游戏,我觉得下赢了就应该会出现flag,可惜多次尝试后失败了(果真有点厉害,我一时兴起就玩了好几把,有空试试拿更厉害的电脑跟他对下,如果赢了会怎么 ...

  6. C温故补缺(三):存储类声明符(auto,register,extern,static)

    auto,register,extern,static 四个存储类声明符,用于定义变量/函数的作用域和声明周期 ① auto:自动变量,即普通变量,在平时定义变量时会自动赋予其auto类型 被auto ...

  7. Linux 系统环境监测

    Linux系统环境监测 Linux系统环境主要监测CPU.内存.磁盘I/O和网络流量. 1. CPU (1) 查看CPU的负载情况:uptime 可以通过uptime查看系统整体的负载情况. 如果服务 ...

  8. 【Java EE】Day11 BootStrap、响应式布局、栅格系统、CSS样式、案例

    一.BootStrap介绍 https://v3.bootcss.com/css/#overview 1.概念 基于三剑客开发的前端开发框架 定义了许多css样式和js插件,从而得到丰富的页面效果 依 ...

  9. K8s 超详细总结

    一个目标:容器操作:两地三中心:四层服务发现:五种Pod共享资源:六个CNI常用插件:七层负载均衡:八种隔离维度:九个网络模型原则:十类IP地址:百级产品线:千级物理机:万级容器:相如无亿,K8s有亿 ...

  10. OpenAI 推出超神 ChatGPT 注册教程来了

    前几天,OpenAI 推出超神 ChatGPT,非常火爆.但是呢,因为不可抗力原因,大部分人无法体验到.这里我分享一下注册的攻略. 准备 首先能能访问 Google(前置条件,不能明确说,懂得都懂) ...