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) 特点

  1. 持久化存储数据的。其实数据库就是一个文件系统
  2. 数据独立存储,且集中控制,方便存储和管理数据
  3. 使用了统一的方式操作数据库 -- SQL
  4. 实现数据共享
  5. 数据一致性和可维护性,保证数据安全可靠

(三) 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 AccessMySQL

商用: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"方言"

结尾:

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

如果能帮到你的话,那就来关注我吧!(系列文章均会在公众号第一时间更新)

在这里的我们素不相识,却都在为了自己的梦而努力 ❤

一个坚持推送原创Java技术的公众号:理想二旬不止

MySQL之基础认识与操作的更多相关文章

  1. Mysql常用基础操作(备忘录)

    常常忘记mysql的一些命令行操作,甚至于说,比较复杂的sql格式记不住或忘记了,也可能根本不会考虑去记,因此,做一下汇总,当下次出现恍惚时不至于去百度挨个找,有时就是记不起来,但是只要给点药引子,立 ...

  2. 着重基础之—MySql 不能遗忘的索引操作

    着重基础之—MySql 不能遗忘的索引操作 关于MySql索引的基础知识我就不在这里写了,我不太想当信息的搬运工. 技巧分享:Workbench 作为一款专为MySQL设计的ER/数据库建模工具.除了 ...

  3. (2.7)Mysql之SQL基础——表的操作与查看

    (2.7)Mysql之SQL基础——表的操作与查看 搜索关键字:mysql表操作,comment注释操作,mysql临时表 0.临时表 create temporary table 1.创建表(在in ...

  4. Mysql数据库基础操作

    Mysql数据库基础操作 在mysql数据库中开启使用tab键补全功能 1)修改主配置文件/etc/mysql/my.cnf(mysql和mariadb目录有些不同) vim /etc/mysql/m ...

  5. mysql使用基础 sql语句(一)

    csdn博文地址:mysql使用基础 sql语句(一)  点击进入 命令行输入mysql -u root -p,回车再输入密码,进入mysql. 终端命令以分号作为一条语句的结束,可分为多行输入,只需 ...

  6. Mysql索引基础

    Mysql索引基础 基本概念: 索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录.索引是提高数据库性能的重要方式.索引创建在表上,是对数据库表中一列或多列的值进行排序的一种结构.可以提 ...

  7. MySQL数据库基础

    MySQL数据库基础 本文的所有操作是基于CMD环境,MySQL通过在命令行中输入SQL语句对数据库进行操作.配置问题可参考<打通MySQL的操作权限>中的内容,该文算是针对前期的环境配置 ...

  8. python之路--MySQL 库,表的详细操作

    一 库操作 数据库命名规则 可以由数字,字母,下划线,@, #, $ 区分大小写 唯一性 不能使用关键字如 create  select 不能单独使用数字 最长128位 # 这些是对上次的补充. 二 ...

  9. MySQL之库、表操作

    一.库操作 创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母.数字.下划线.特殊字符,要区分大小写,唯一性,不能使用关键字, ...

随机推荐

  1. PhpStorm 使用 Stylus 回车自动缩进的问题

    如图所示,取消勾选即可换行自动缩进,不用再一个个打空格了! 

  2. List根据某字段去重,以及compareTo 浅解

    原文链接:https://blog.csdn.net/qq_35788725/article/details/82259013 Collections.sort可对集合进行排序 根据List里面某个字 ...

  3. STS创建spring boot项目,pom.xml文件第一行报错

    亲测能用url地址:https://blog.csdn.net/jrx1995/article/details/100008552

  4. CF768F Barrels and boxes

    嘟嘟嘟 此题不难. 这种题做几道就知道些套路了:我们枚举酒有几堆,这样就能算出食物有多少堆以及他们的排列数,那么概率就是合法方案数 / 总方案数. 设酒有\(i\)堆,那么就有\(C_{w - 1} ...

  5. Break Standard Weight (ZOJ 3706)

    Problem The balance was the first mass measuring instrument invented. In its traditional form, it co ...

  6. gitlab高可用模式

    高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...

  7. (转)Git操作

    本地修改了许多文件,其中有些是新增的,因为开发需要这些都不要了,想要丢弃掉,可以使用如下命令: git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash # ...

  8. 二十三、Linux任务计划及周期性任务执行:at、crontab命令

    一.概述 未来的某时间点执行一次某任务:at, batch周期性运行某任务:crontab 这两个任务的执行结果:会通过邮件发送给用户 (本地终端用户之间的邮件通知) centos 5,6,7默认开启 ...

  9. Codeforces 812E Sagheer and Apple Tree ——(阶梯博弈)

    之前在bc上做过一道类似的阶梯博弈的题目,那题是移动到根,这题是移动到叶子.换汤不换药,只要和终态不同奇偶的那些位置做nim即可.因此这题给出了一个条件:所有叶子深度的奇偶性相同.同时需要注意的是,上 ...

  10. PyTricks-Differebt ways to test multiple flags at once in

    x, y, z = 0, 1, 0 if x == 1 or y == 1 or z == 1: print('passed') if 1 in (x, y, z): print('passed') ...