开发学习中,想知足一些需求,无疑须要常常与数据打交道,例如,咱们在使用IO的一些技术的时候,经常须要将一些数据存储到外部文件,可能你们会问,咱们初学的时候经常会简单的保存一些数据到 .txt 文件中,为何还须要数据库呢?
假定咱们将数据所有存储在一个普通文件中(data.txt)_(以逗号间隔)mysql
...... "Eminem",male,1972,"USA" "Rihanna",female,1988,"Barbados" "Taylor Swift",1989,female,"USA" "Aavril Lavigne",1984,female,"Canada" ......
若是在咱们的数据极为庞大的状况下,咱们须要查询其中的一些数据,例如,查询Eminem的国籍,咱们通常会使用遍历,可是毫无疑问,这个响应时间会变得极其缓慢,可是使用数据库后,它所提供的一些索引技术等就能够解决这样的问题redis
"Rihanna",female,1988,"Barbados" "Rihanna",female,1995,"USA"
若是数据中出现了重名的状况,又如何判断是否是同一我的呢?sql
若是data.txt文件中的数据被错误的修改,例如出生年份被修改成其余类型字符串这种无效表达怎么办?数据库
或许你能够在程序中写一些逻辑判断语句进而筛选处理这些问题,可是仍旧在数据较为庞大的状况下,会出现各类各样的问题,增长了开发者的开发难度,而数据库自己就制定了一些约束,从而保证了数据的完整且,有效,从而使开发者只须要更加注重于程序自己的设计,而不用花费过多的时间去处理数据上的一些细节问题安全
经常使用来简单存储数据的 txt/excel 等均属于单一文件,而且都是没法共享的,只支持当前用户使用而且修改并发
而数据库则容许用户共享,不一样的用户能够同时存取数据库中的数据,用户也能够用各类方式经过接口使用数据库,并提供数据共享函数
在咱们前者中,数据的修改是很随意的
可是在实际开发中,咱们有时候须要面临,多个用户检索、修改同一文件中的数据,或者在并发状况下,写同一文件或者记录,而数据库基于锁等的一些技术即可以帮助咱们解决这些问题学习
因为逻辑或者物理上的错误,致使了系统的错误操做,从而使得数据被皮怀,如何快速恢复数据,咱们上面的单一文件系统显然没法帮助咱们解决问题,而数据库却有相关机制去弥补、处理相关问题网站
上面咱们仅仅从几个常见的点分析了为何使用数据库,固然远远不止这些,因此总的来讲就是数据库其特殊的存储以及管理方式,既提升了效率,也极大的减小了开发人员的负担ui
数据库(DateBase,简称DB)是一种用于存储和管理数据的仓库,简单的说就是一个容器内,内部按照必定方式存储着一些数据
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
Structured Query Language:结构化查询语言
SQL就是访问和处理关系数据库的计算机标准语言,它定义了操做全部关系型数据库的规则
大部分数据库在SQL的标准上进行了扩展。而每一种数据库操做的方式存在不同的地方,称为方言。
但凡涉及到关系型数据库就离不开SQL,例如在电商网站中存入商品信息,游戏中存储装备道具信息等
补充:
常见的关系型数据库:Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQL
商用:Oracle、DB二、Microsoft SQL Server
开源:MySQL
桌面:Microsoft Access
常见的非关系型数据库:NoSql、Cloudant、MongoDb、redis、HBase
1. SQL语句 单行或多行书写,以分号结尾,而且可使用空格和缩进来加强语句的可读性 2. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写 3. 3 种注释 A: 单行注释: -- 注释内容 或 # 注释内容(mysql 特有) B: 多行注释: /* 注释 */
数据定义语言——DDL(Data Definition Language)
容许用户定义 (建立) 数据库对象:数据库,表,列等
数据操做语言——DML(Data Manipulation Language)
容许用户对数据库中表的数据进行增删改
数据查询语言——DQL(Data Query Language)
容许用户查询数据库中表的记录(数据)
数据控制语言——DCL(Data Control Language)
用来定义数据库的访问权限和安全级别,及建立用户
-- 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 数据库名称;
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 表名;
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 条件]; -- 注意: 若不限定条件,则会修改表中的全部记录
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技术的公众号:理想二旬不止