• MySQL之基础认识与操作


    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添加外键的4种方式
    时序分析(1):时序约束原理(旧版、可能有错)
    SignalTap II——基本使用和高级技巧
    Testbench编写技巧
    异步复位同步释放
    协议——SCCB与IIC的区别
    协议——IIC
    Modelsim——显示状态机名称的方法
    亚稳态
    计数器(2):递增再递减,不断循环
  • 原文地址:https://www.cnblogs.com/ideal-20/p/11257988.html
Copyright © 2020-2023  润新知