MySQL数据库开发学习中,想满足一些需求,无疑需要经常与数据打交道,例如,我们在使用IO的一些技术的时候,常常需要将一些数据存储到外部文件,可能大家会问,我们初学的时候常常会简单的保存一些数据到 .txt 文件中,为什么还需要数据库呢?

(一) 为什么使用数据库?

(1) 查询速度

假定我们将数据全部存储在一个普通文件中(data.txt)_(以逗号间隔)

......

"Eminem",male,1972,"USA"

"Rihanna",female,1988,"Barbados"

"Taylor Swift",1989,female,"USA"

"Aavril Lavigne",1984,female,"Canada"

......

如果在我们的数据极为庞大的情况下,我们需要查询其中的一些数据,例如,查询Eminem的国籍,我们一般会使用遍历,但是毫无疑问,这个响应时间会变得极其缓慢,但是使用数据库后,它所提供的一些索引技术等就可以解决这样的问题

(2) 保证数据完整有效

"Rihanna",female,1988,"Barbados"

"Rihanna",female,1995,"USA"

如果数据中出现了重名的情况,又如何判断是不是同一个人呢?

如果data.txt文件中的数据被错误的修改,例如出生年份被修改为其他类型字符串这种无效表达怎么办?

或许你可以在程序中写一些逻辑判断语句进而筛选处理这些问题,但是仍旧在数据较为庞大的情况下,会出现各种各样的问题,增加了开发者的开发难度,而数据库本身就制定了一些约束,从而保证了数据的完整且,有效,从而使开发者只需要更加注重于程序本身的设计,而不用花费过多的时间去处理数据上的一些细节问题

(3) 数据共享

常用来简单存储数据的 txt/excel 等均属于单一文件,并且都是无法共享的,只支持当前用户使用并且修改

而数据库则允许用户共享,不同的用户可以同时存取数据库中的数据,用户也可以用各种方式通过接口使用数据库,并提供数据共享

(4) 数据的安全性

在我们前者中,数据的修改是很随意的

但是在实际开发中,我们有时候需要面临,多个用户检索、修改同一文件中的数据,或者在并发情况下,写同一文件或者记录,而数据库基于锁等的一些技术便可以帮助我们解决这些问题

(5) 故障恢复

由于逻辑或者物理上的错误,导致了系统的错误操作,从而使得数据被皮怀,如何快速恢复数据,我们上面的单一文件系统显然无法帮助我们解决问题,而数据库却有相关机制去弥补、处理相关问题

上面我们仅仅从几个常见的点分析了为什么使用数据库,当然远远不止这些,所以总的来说就是数据库其特殊的存储以及管理方式,既提高了效率,也极大的减少了开发人员的负担

(二) 数据库的基本概念

(1) 概述

数据库(DateBase,简称DB)是一种用于存储和管理数据的仓库,简单的说就是一个容器内,内部按照一定方式存储着一些数据

(2) 特点持久化存储数据的。其实数据库就是一个文件系统

数据独立存储,且集中控制,方便存储和管理数据

使用了统一的方式操作数据库 -- SQL

实现数据共享

数据一致性和可维护性,保证数据安全可靠

(三) MySQL数据库的基本操作

MySQL服务启动(两种方式)

1. cmd--> services.msc 打开服务的窗口

2. 使用管理员打开cmd

A: net start mysql : 启动mysql的服务

B: net stop mysql : 关闭mysql服务

MySQL登录

1. 点击 MySQL 5.7 Command Line Client,输入密码即可

2. 命令行登录(配置好环境变量)

A: mysql -uroot -p密码 //root为用户名

B: mysql -hip -uroot -p连接目标的密码

C: mysql --host=ip --user=root --password=连接目标的密码

MySQL退出

1. exit

2. quit

(四) SQL简单认识

(1) 什么是SQL?

Structured Query Language:结构化查询语言

SQL就是访问和处理关系数据库的计算机标准语言,它定义了操作所有关系型数据库的规则

大部分数据库在SQL的标准上进行了扩展。而每一种数据库操作的方式存在不一样的地方,称为方言。

但凡涉及到关系型数据库就离不开SQL,例如在电商网站中存入商品信息,游戏中存储装备道具信息等

补充:

常见的关系型数据库:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL

商用:Oracle、DB2、Microsoft SQL Server

开源:MySQL

桌面:Microsoft Access

常见的非关系型数据库:NoSql、Cloudant、MongoDb、redis、HBase

(2) SQL通用语法

1. SQL语句 单行或多行书写,以分号结尾,并且可以使用空格和缩进来增强语句的可读性

2. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写

3. 3 种注释

A: 单行注释: -- 注释内容 或 # 注释内容(mysql 特有)

B: 多行注释: /* 注释 */

(五) SQL分类

数据定义语言——DDL(Data Definition Language)

允许用户定义 (创建) 数据库对象:数据库,表,列等

数据操作语言——DML(Data Manipulation Language)

允许用户对数据库中表的数据进行增删改

数据查询语言——DQL(Data Query Language)

允许用户查询数据库中表的记录(数据)

数据控制语言——DCL(Data Control Language)

用来定义数据库的访问权限和安全级别,及创建用户

(1) DDL:操作数据库、表

1. 操作数据库 —— CRUE

-- CURE ---> C(Create):创建 + R(Retrieve):查询 + U(Update):修改 + D(Delete):删除

1. C(Create):创建

-- 创建数据库

CREATE DATABASE 数据库名称;

-- 创建数据库,判断不存在,再创建

CREATE DATABASE IF NOT EXISTS 数据库名称;

-- 创建数据库,并且制定字符集

CREATE DATABASE 数据库名称 CHARACTER SET 字符集名;

2. R(Retrieve):查询

-- 查询所有数据库名称

SHOW DATABASES

-- 查询某个数据库的字符集 : 查询某个数据库的创建语句

SHOW CREATE DATABASE 数据库名称;

3. U(Update):修改

-- 修改数据库的字符集

ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;

4. D(Delete):删除

-- 删除数据库

DROP DATABASE 数据库名称;

-- 判断数据库存在,存在再删除

DROP DATABASE IF EXISTS 数据库名称;

5. 使用数据库

-- 查询当前正在使用的数据库名称

SELECT DATABASE();

-- 使用数据库

USE 数据库名称;

2. 操作表

1. C(Create):创建

-- 语法 * 注意最后一行不需要加逗号(,)

CREATE TABLE 表名(

列名1 数据类型1,

列名2 数据类型2,

......

列名n 数据类型n

);

-- 数据类型

1. INT:整数类型

2. DOUBLE:小数类型

3. DATE:日期,只包含年月日,yyyy-MM-dd

4. DATETIME:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss

5. TIMESTAMP:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss

6. VARCHAR:字符串

-- 注意:time如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间来自动赋值

-- DOUBLE(6,3) 代表共保留6位数字,小数点后保留3位

-- 复制表

CREATE TABLE 表名 LIKE 被复制的表名;

2. R(Retrieve):查询

-- 查询某个数据库中所有的表名

SHOW TABLES;

-- 查询表结构

DESC 表名;

3. U(Update):修改

-- 修改表名

ALTER TABLE 表名 RENAME TO 新表名

-- 修改表的字符集

ALTER TABLE 表名 CHARACTER SET 字符集名称;

-- 添加一列

ALTER TABLE 表名 ADD 列名 数据类型

-- 修改列名称 类型

ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

ALTER TABLE 表名 MODIFY 列名 新数据类型;

-- 删除列

DROP TABLE 表名;

DROP TABLE IF EXISTS 表名;

4. D(Delete):删除

DROP TABLE 表名;

Drop TABLE IF EXISTS 表名;

(2) DML:增删改表中的数据

1. 表中添加数据

-- 语法:

INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);

-- 注意:

A: 列名和值要一一对应。

B: 如果表名后,不定义列名,则默认给所有列添加值

Eg:INSERT INTO 表名 Values(值1,值2,...值n);

C: 除了数字类型,其他类型需要使用引号(单双都可以)引起来

2. 删除表中数据

-- 语法:

DELETE FROM 表名 [WHERE 条件]

-- 注意:

若不加条件,则删除表中所有记录

-- 删除所有记录的两种方式

A: DELETE FROM 表名; -- 不推荐使用,有多少条记录就会执行多少次删除操作

B: TRUNCATE TABLE 表名; -- 推荐使用,先删除表,然后再创建一张一样的表,效率更高

3. 修改表中数据

-- 语法:

UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2,... [WHERE 条件];

-- 注意:

若不限定条件,则会修改表中的所有记录

(3) DQL:查询表中的记录

SELECT * FROM 表名;

1. 语法:

SELECT

字段列表

FROM

表名列表

WHERE

条件列表

GROUP BY

分组字段

HAVING

分组之后的条件

ORDER BY

排序

LIMIT

分页限定

2. 基础查询

-- 多个字段的查询

SELECT 字段名1,字段名2... FROM 表名;

注意:

如果查询所有字段,则可以使用*来替代字段列表。

-- 去除重复:

DISTINCT

-- 计算列

一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

IFNULL(表达式1,表达式2):null参与的运算,计算结果都为null

表达式1:哪个字段需要判断是否为null

如果该字段为null后的替换值。

-- 起别名:

as:as也可以省略

3. 条件查询

1. where子句后跟条件

2. 运算符

> 、< 、<= 、>= 、= 、<>

BETWEEN...AND

IN( 集合)

LIKE:模糊查询

占位符:

_:单个任意字符

%:多个任意字符

IS NULL

AND 或 &&

OR 或 ||

NOT 或 !

-- 查询年龄不等于20岁

SELECT * FROM student WHERE age != 20;

SELECT * FROM student WHERE age <> 20;

-- 查询年龄大于等于20 小于等于30(三种方式)

SELECT * FROM student WHERE age >= 20 && age <=30;

SELECT * FROM student WHERE age >= 20 AND age <=30;

SELECT * FROM student WHERE age BETWEEN 20 AND 30;

-- 查询年龄22岁,18岁,25岁的信息

SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25

SELECT * FROM student WHERE age IN (22,18,25);

-- 查询英语成绩为null

-- 下面第一句是错误的,null值不能使用 = 和(!=) 判断

SELECT * FROM student WHERE english = NULL; (×)

SELECT * FROM student WHERE english IS NULL; (√)

-- 查询英语成绩不为null

SELECT * FROM student WHERE english IS NOT NULL;

-- 查询姓张的有哪些? like

SELECT * FROM student WHERE NAME LIKE '张%';

-- 查询姓名第二个是杰的人

SELECT * FROM student WHERE NAME LIKE "_杰%";

-- 查询姓名是3个字的人

SELECT * FROM student WHERE NAME LIKE '___';

-- 查询姓名中包含文的人

SELECT * FROM student WHERE NAME LIKE '%文%';

DQL:查询语句

1. 排序查询

-- 语法:

ORDER BY 子句

* ORDER BY 排序字段1 排序方式1 ,排序字段2 排序方式2...

-- 排序方式:

ASC:升序,默认的。

DESC:降序

-- 注意:如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。

COUNT:计算个数

-- 一般选择非空的列:主键

-- count(*)

MAX:计算最大值

MIN:计算最小值

SUM:计算和

AVG:计算平均值

-- 注意:聚合函数的计算,排除null值。

解决方案:

1. 选择不包含非空的列进行计算

2. IFNULL函数

3. 分组查询:

-- 语法:

group BY 分组字段;

-- WHERE 和 HAVING 的区别?

WHERE 在分组之前进行限定,不满足则不分组

HAVING在分组之后进行限定,不满足则查不到

WHERE 后不可以跟聚合函数,having可以进行聚合函数的判断

-- 常见举例,巩固一下语法

-- 按照性别分组,分别查询男、女同学的平均分

SELECT sex , AVG(math) FROM student GROUP BY sex;

-- 按照性别分组,分别查询男、女同学的平均分,人数

SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;

-- 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数低于60分的人,不参与分组

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex;

-- 按照性别分组,分别查询男、女同学的平均分,人数

-- 要求:分数低于60分的人,不参与分组或分组之后,人数要大于2个人

SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 60 GROUP BY sex HAVING COUNT(id) > 2;

SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 60 GROUP BY sex HAVING 人数 > 2;

4. 分页查询

-- 语法:

limit 开始的索引,每页查询的条数;

-- 公式:

开始的索引 = (当前的页码 - 1) * 每页显示的条数

每页显示5条记录

SELECT * FROM student LIMIT 0,5; -- 第1页

SELECT * FROM student LIMIT 5,5; -- 第2页

SELECT * FROM student LIMIT 10,5;-- 第3页

-- LIMIT 是一个MySQL"方言"

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^

如果能帮到你的话,那就来关注我吧!

我是小架,我们下篇文章见!

从mysql学起_MySQL学习从这里出发!相关推荐

  1. 0基础能学mysql数据库吗_mysql学习入门:零基础如何使用mysql创建数据库表?

    零基础如何自学Mysql创建数据库,是Mysql学习者必经之路,Mysql是受欢迎的关系数据库管理系统,WEB应用方面MySQL是很好的RDBMS应用软件之一.如何使用Mysql创建数据库表,打开My ...

  2. MySQL数据类型特征_Mysql学习(三)数据类型_mysql

    mysql学习(3)数据类型 数据类型 数据类型是指.存储过程参数.表达式和局部变量的数据特征, 它决定了数据的存储格式,代表了不同的信息类型. 整型 Tinyint      有符号位 -128到1 ...

  3. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  4. mysql ddl脚本_MySQL学习之路(1):SQL脚本语言

    使用MySQL数据库,首先安装MySQL数据库,本文所有SQL脚本在MySQL上测试和执行. 安装Mysql服务器: 安装Mysql workbench客户端,可以以图形化界面管理mysql: 安装p ...

  5. mysql 取年月日 语句_MySQL学习从这里出发!

    MySQL数据库 开发学习中,想满足一些需求,无疑需要经常与数据打交道,例如,我们在使用IO的一些技术的时候,常常需要将一些数据存储到外部文件,可能大家会问,我们初学的时候常常会简单的保存一些数据到 ...

  6. mysql分页概念_MySQL学习笔记之数据定义表约束,分页方法总结

    本文实例讲述了MySQL学习笔记之数据定义表约束,分页方法.分享给大家供大家参考,具体如下: 1. primary key 主键 特点:主键是用于唯一标识一条记录的约束,一张表最多只能有一个主键,不能 ...

  7. mysql 临时表 事务_MySQL学习笔记十:游标/动态SQL/临时表/事务

    逆天十三少 发表于:2020-11-12 08:12 阅读: 90次 这篇教程主要讲解了MySQL学习笔记十:游标/动态SQL/临时表/事务,并附有相关的代码样列,我觉得非常有帮助,现在分享出来大家一 ...

  8. mysql学习应用_MySQL学习从这里出发!

    最近我重新整理了这部分 MySQL 的入门知识,更加详细与梳理,大家可以去看看喔~ MySQL数据库 开发学习中,想满足一些需求,无疑需要经常与数据打交道,例如,我们在使用IO的一些技术的时候,常常需 ...

  9. Mysql成语数据库_mysql学习笔记

    今天开始学习mysql数据库了,也是第一次在这里写技术笔记,相信好记忆不如烂笔头,就以此来见证自己的成长吧! 首先安装mysql服务器的过程这里就不啰嗦啦,相信大家都懂的,直接进入主题吧,欢迎那些也是 ...

最新文章

  1. 推荐|5种商业AI产品的技术架构设计!
  2. swift_018(Swift 的结构体)
  3. 基于Seam+Carving和显著性分析的图像缩放方法MATLAB仿真
  4. boost::histogram::algorithm::project用法的测试程序
  5. java如何显示当天世界_Java学习笔记——显示当前日期的三种方式
  6. 中小企业上云多地域办公组网,建立高质量云上内网环境
  7. ubuntu配置硬盘开机自动挂载
  8. Semaphore 里面居然有这么一个大坑!
  9. html前端开发作品,Web前端开发(HTML5+CSS3)
  10. 提供一个文档下载接口,用httpclient下载文件
  11. 基于系统的软件测试报告,软件系统测试报告模板.doc
  12. JAVA调用方法 万年历
  13. 中国移动日渐步履蹒跚,中国电信在5G商用上取得领先优势
  14. 74HC573芯片介绍
  15. 解决win10没Wifi功能了,无线网卡驱动异常代码56的问题
  16. 联想服务器AR系列,联想沉浸式AR游戏设备Mirage AR现场实拍图赏
  17. 高等数学(第七版)同济大学 习题6-2 (后18题)个人解答
  18. 【转】systemd环境变量的小坑
  19. 一年站长经历后的感悟
  20. FPGA图像工程师的六脉神剑——“选扫掌仿习练”

热门文章

  1. 使用 opencv 画 五角星
  2. php 继承 父类使用子类,在PHP中使用 来 实现子类和父类之间的继承 。
  3. 【拓展】腾讯十大最受欢迎的开源项目!
  4. Ubuntu16.04安装NCCL
  5. 【云和恩墨业务介绍】之数据库性能优化服务
  6. MySQL教程——2 中级篇(索引、视图、存储过程)
  7. 书单丨流量成本越来越高,6本书带你实现爆发式增长!
  8. Docker创建私有仓库
  9. 购物车中选择物品结算功能的实现
  10. Pandas数据类型——Series