mysql数据库

数据库

最早期我们要存数据,是要通过多个 Excel 表格实现,而此操作会带来大量的管理和分类, 并且程序员的工作量
也会变得十分繁琐. 所以, 后期通过把数据的具体操作交由一个数据库软件去管理, 程序员只需要学习如何使用该软件即可, 而这个软件就是存储和管理数据的仓库, 简称数据库
		-- 数据库软件运行后会转为一个后台的 DBMS
			DB: DATABASE --数据库
			M: Management --管理
			S: System --系统

主流的 DBMS 有哪些

1. MySQL:  开源产品
	--注: MySQL8及其以上的版本被收购后进行的维护更新,变成了闭源产品
	--MariaDB 是MySQL低版本的一种整合改良版

2. Oracle: Oracle(甲骨文)公司的闭源产品, 效率最好, 安全性最高, 市场占比第二

3. SQLServer: 微软公司的闭源产品, 常见于微软成套开发中

4. DB2: IBM 公司旗下的闭源产品, 常见于银行项目开发

SQL

S: Structured --结构化
Q: Query	  --查询
L: Language   --语言
	--作用: 用于程序员和数据库软件进行交流的一门通用性语言

MySQL 的环境检查及软件连接

1. 检查是否安装了MySQL
		(右键)此电脑->管理->(展开)服务和应用程序->服务
			-- 检查所有的服务项中,是否有 MySQL 或者 MariadDB

2. 打开运行窗体
	WIN + R, 输入cmd, 弹出终端小黑窗

3. 数据库的启动指令
	完整指令: mysql.exe -uroot -proot -hlocalhost -P 3306
			-u user 用户名		--mysql默认只有一个管理员用户: root
			-p password 密码	--安装mysql数据库的过程自行设置
			-h host 服务器主机  --本机: localhost/127.0.0.1
			-P port 端口号		--mysql默认端口号为:3306
	简化指令: (数据库就在本机,其他设置都默认的情况下)
			方式一: --密码明文式
				mysql -uroot -proot
			方式二: --密码暗文式
				mysql -uroot -p --回车
				再输入密码 root --回车
	
	-- 注: 如果小黑窗的最后一行显示 "mysql>" 或者 "MariaDB [(none)]>" 表示成功进入mysql数据库
	-- 注:如果小黑窗显示'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件. 说明没有做"环境变量"的配置,访问数据库服务器失败

4. 不配置环境变量的登录方式
	1) Win + R, 输入 cmd 回车, 在小黑窗输入指令 "cd 数据库安装目录的bin目录" (如: "cd C:\Program Files\MariaDB 10.6\bin") 回车,然后再输入mysql的启动指令 "mysql -uroot -proot" 回车即可

	2) 直接按win键, 在开始菜单中找到MySQL或者MariaDB 的快捷终端, 点击运行直接输入密码回车即可

	
5. 配置环境变量
		-- 注: 配置环境变量, 等同于告诉计算机中的"Path"数据库软件所在的位置,可以实现无论在计算机任何位置, 都能直接访问到数据库软件, 因为"Path" 会帮忙跳转到该位置
		1) (右键)此电脑->属性->高级系统设置->环境变量(N)-> 在系统变量(S)下的列表中找到"Path"

		2) 双击"Path"或者选中"Path"点击编辑, 点击新建(N), 将"数据库安装目录的bin目录"添加到列表中

		3) 优化操作
			在"系统变量(S)"下的列表中, 新建一个变量
				变量名:SQL_HOME
				变量值:"C:\Program Files\MariaDB 10.6"
			
			"Path"中的改动:
				由原来的:
					C:\Program Files\MariaDB 10.6\bin
				变更为:
					%SQL_HOME%\bin

MySQL 部署架构

一个完整的 MySQL DBMS 分为两大部分:
	1) 客户端:为用户提供操作界面, 以便于向服务器发送 "增删改查" 操作
	2) 服务器端:服务于客户端, 接收并处理用户发送的请求, 以此对数据进行存储, 管理和分类

MySQL 层级架构

数据库服务器(DBServer) -> 子数据库(DataBase) -> 数据表(Table) -> 数据(Data)

1) 数据库服务器:在安装好数据库软件之后, 数据库服务器会自行搭建完毕
	-- 数据库服务器中的操作的是 子数据库
	-- 操作 子数据库 要学习 库相关的SQL

2) 子数据库:mysql 数据库服务器搭建好之后, 系统默认会自带一些子数据库
	-- 子数据库中操作的是数据表
	-- 操作 数据表 要学习 表相关的SQL

3) 数据表:系统不会自带数据表, 所以使用前要自行创建
	-- 数据表中操作的是 数据
	-- 操作 数据 要学习 数据相关的SQL
大文件夹 -> 分类文件夹 -> 数据表 -> 数据  

库相关的SQL(库 database)

1. 查询所有数据库
	格式: show databases;

2. 创建数据库
	格式: CREATE DATABASE 库名;
	案例: CREATE DATABASE db1;
		
	拓展1:当指定创建的数据库"不存在"时, 才执行创建
	格式: CREATE DATABASE IF NOT EXISTS 库名;
	案例: CREATE DATABASE IF NOT EXISTS db1;	
	
	-- 性能 安全性

	扩展2: 创建的同时指定字符集编码  
	格式: CREATE DATABASE 库名 character SET latin1/gbk/utf8;
	案例: CREATE DATABASE db2 character SET utf8;
	
	-- 注: 数据库服务器默认使用 latin1 作为字符集编码, 如果后期在创建子数据库时, 没有设置子字符编码, 那该子数据库会沿用数据库服务器的字符集编码
		-- latin1 1个中文字符 对应1个字节
		-- gbk    1个中文字符 对应2个字节
		-- utf8   1个中文字符 对应3个字节

	latin1:  拉丁码/欧洲编码 里面收录了英文

	gbk:  国标编码 里面收录了中文和英文

	utf-8: 国际编码 里面收录了世界各国语言

3. 查询库详情(查询创建时的库)
	格式: show CREATE DATABASE 库名;
	案例: show CREATE DATABASE db2;
	
4. 删除数据库
	格式: DROP DATABASE 库名;
	案例: DROP DATABASE db1;

	拓展:当指定删除的数据库"存在"时, 才执行删除
	格式: DROP DATABASE IF  EXISTS 库名;
	案例: DROP DATABASE IF  EXISTS db1;	

5. 使用数据库
	格式: USE 库名;
	案例: USE db1;
		-- 该语言可以不写 ";"

6. 修改数据库编码
	格式: alter database 数据库名 character set 编码方式 //修改数据库编码方式
	案例: alter database db1 character set utf8;

表相关的SQL(表 TABLE )

-- 注: 为了避免创建的是一张无用表, 所以在创建表格时, 要求必须有"字段"
-- 网页表格中的表头 等同于 java中的属性 等同于 数据库中的字段
1. 创建表
	格式: CREATE TABLE 表名(字段1 字段1类型, 字段2 字段2类型...);
	案例: CREATE TABLE t1(name varchar(10), age int, salary double);
	
	扩展: 创建表的同时指定表引擎和字符集编码
		-- 引擎:
		--1) myisam: 只支持最基本的增删改查, 不具备任何SQL 高级的功能
		--2) innoDB(mysql默认): 除了支持基本的增删改查外, 还具备事务, 外键等SQL高级特性

	格式1: CREATE TABLE 表名(字段1 字段1类型, 字段2 字段2类型...)charset=latin1/gbk/utf8;
	格式2: CREATE TABLE 表名(字段1 字段1类型, 字段2 字段2类型...)engine=myisam/innoDB;
	格式3: CREATE TABLE 表名(字段1 字段1类型, 字段2 字段2类型...)engine=myisam/innoDB charset=latin1/gbk/utf8;

	案例1: CREATE TABLE t2(name varchar(10), age int, salary double)charset=gbk;
	案例2: CREATE TABLE t3(name varchar(10), age int, salary double)engine=myisam;
	案例3: CREATE TABLE t4(name varchar(10), age int, salary double)engine=myisam charset=utf8;

2. 查询所有表
	格式: show tables;

3.查询表详情(查询创建时的表)
	格式: show CREATE TABLE 表名;
	案例: show CREATE TABLE t2;

4. 查询表字段信息
	格式: DESC 表名;
	案例: DESC t4;

5.修改表名 --rename 不属于修改的通用关键字, 只专属于改名
	格式: rename TABLE 原表名 TO 新表名;
	案例: rename TABLE t1 TO t001;


6.修改表字符集和引擎
	格式: ALTER TABLE 表名 engin=myisam/innoDB charset=latin1/gbk/utf8;
	案例: ALTER TABLE t2 engine=innodb charset=utf8;

7.修改(添加)表字段
	格式: ALTER TABLE 表名 ADD 字段名 字段类型;
	案例: ALTER TABLE t4 ADD gender varchar(2); --追加

	格式: ALTER TABLE 表名 ADD 字段名 字段类型 first;
	案例: ALTER TABLE t4 ADD id INT first;

	格式: ALTER TABLE 表名 ADD 字段名 字段类型 after xx字段;
	案例: ALTER TABLE t4 ADD phone varchar(20) after age;

8. 修改(修改)字段名和字段类型
	格式: ALTER TABLE 表名 change 原字段名 新字段名 新字段类型;
	案例: ALTER TABLE t4 change gender sex int;

9.修改(修改)字段类型和位置
	格式: ALTER TABLE 表名 modify 字段名 新字段类型 first /after xx字段;
	案例: ALTER TABLE t4 modify sex varchar(5) after name;

10. 修改(删除)表字段
	格式: ALTER TABLE 表名 DROP 字段名;
	案例: ALTER TABLE t4 DROP sex;

11. 删除表
	格式: DROP TABLE 表名;
	案例: DROP TABLE t4;

-- 总结: 库表相关的通用关键字
	 增: CREATE 
	 查: show
	 改: ALTER 
	 删: DROP 
-- 注: 数据相关的通用关键字与库表相关不同

show databases;
CREATE DATABASE db3;
USE db3;
CREATE TABLE t1(name VARCHAR(10),age INT,salary double);
show tables;
show CREATE TABLE t1;
DESC t1;

数据相关的sql

1. 插入数据(增: INSERT INTO)
	1) 全表插入
		-- 所谓全表插入, 就是该表有多少个字段, 就必须对应插入多少个值
		格式: INSERT INTO 表名 VALUES(值1, 值2, 值3...);
			--注: value和values 的效果在mysql中是完全一致的, 官方建议用values
		案例: 
			INSERT INTO 
				t1
			VALUES(
				'a', 18, 2345.21
			);

			INSERT INTO 
				t1
			VALUES(
				'a1', 22, 2222
			);

			-- 注: 在数据库中的文本类型的数据建议使用单引号, 后期便于对接java服务器
			String sql = "INSERT INTO t1 VALUES ('a', 18, 2745.21)"
			String sql = "INSERT INTO t1 VALUES ("a", 18, 2745.21)"

			INSERT INTO 
				t1
			value(
				'a', 18, 2745.21
			);

			INSERT INTO 
				t1
			value(
				'c', '19', 5945.21
			);
			INSERT INTO 
				t1
			VALUES(
				'c1', '19', 3945.21
			),(
				'c2', '19', 4945.21
			),(
				'c3', '19', 6945.21
			);
		-- 注: mysql 的优化 使用该方式插入数据时, 要按照字段的顺序进行插入(即: 插入顺序要与表字段顺序一致), 而一致的要求不是绝对的, 因为有些数据可以进行转换, 如: 字符串的'18'可以转成int类型的18. 但有些数据不能转换就会出现error从而导致程序强制关闭, 如: 字符串的'十八'不能转成int类型的18


	2) 指定字段插入
		格式: INSERT INTO 表名(字段1, 字段3) VALUES(值1, 值3);
		案例: 
			INSERT INTO 
				t1(
				name, salary
				)VALUES(
					'd', 5555
				);

			INSERT INTO 
				t1(
				name, age
				)VALUES(
					'e', 18.6
				);
			INSERT INTO
				t1(
				 name, salary
				)VALUES(
					'a4',2659	
				),(
					'a5',3659
				),(
					'a6',4659
				);
			--注: 在插入数据的过程中, 如果类型不一致, mysql可能会对数据进行转换, 如: double类型的35.7转成int类型的36, 虽然没有出现error, 但数据产生了误差也是要绝对避免的

	3) 批量全表插入
		格式: 
			INSERT INTO 
				表名
			VALUES(
				值1, 值2....
				),(
				值1, 值2....
				);

		案例: 
			INSERT INTO 
				t1
			VALUES(
				"f1", 21, 2313
			),(
				"f2", 22, 2821
			);

	4) 批量指定字段插入
		格式: 
		INSERT INTO 
			表名(
			字段1, 字段3
			)VALUES(
			值1, 值3
			),(
			值1, 值3
			);
		案例: 
		INSERT INTO 
			t1(
			name, salary
			)VALUES(
			"f3", 5648
			),(
			"f4", 6423
			);
		--总结: 凡是提到全表的, 表名后面直接跟values; 凡是提到指定字段的, 表名后面先跟"()", 再加values
	

2. 查询数据(查: SELECT )
	1) 查询所有数据
		格式: SELECT * FROM 表名;
		案例: SELECT * FROM t1;

	2) 条件查询(WHERE 是条件过滤筛选的关键字)
		格式: 
			SELECT
				* 
			FROM 
				表名
			WHERE 
				普通条件;
		--注: where 后面决定"行数", select 后面决定"列数"

		案例: 
			SELECT
				name, salary 
			FROM 
				t1
			WHERE 
				salary > 10000;

3.修改数据(改 UPDATE )
	1) 修改给定字段的值 --应用于给定字段的所有数据, 极少用
		格式: UPDATE 表名 SET 字段=xxx;
		案例: 
			UPDATE 
				t1
			SET 
				salary=4000;

	2) 条件修改
		格式:
			UPDATE 
				表名
			SET 
				字段名=xxx
			WHERE 
				普通条件;
		案例: 
			UPDATE 
				t1
			SET 
				salary=4000
			WHERE 
				salary<3000;


			UPDATE 
				t1
			SET 
				salary=4000
			WHERE 
				salary IS null;

4. 删除数据(删 DELETE )
	1) 删除表中的所有数据 --清空表数据, 极少用
		格式: DELETE FROM 表名;
	
	2) 条件删除
		格式: 
			DELETE FROM 
				表名
			WHERE 
				普通条件;

		案例:
			DELETE FROM 
				t1
			WHERE 
				age IS NULL;
		-- 注: 对于null值, 删除的条件不能使用"=", 因为"="比较的是数值, 要使用is
			-- 错误: delete from t1 where age = null; 
				-- 此处的错误表示语法不生效, 不会出现error
			-- 正确: delete from t1 where age is null;

数据类型(常用)

1. 整数
	TINYINT -- 较常用
		占1个字节, 相当于java中的byte  -- -128~127
	
	SMALLINT -- 极少用
		占2个字节, 相当于java中的short -- -32768~32767
	
	INT -- 最常用
		占4个字节, 相当于java中的int -- -21亿多~21亿多
		-- int(m) m表示显示长度, 如: m=4 插入18时, 结果显示0018
			-- 上述的补零操作, 必须是在创建表时, 给字段类型后加上 zerofill 关键字
	
	BIGINT -- 最常用
		占8个字节, 相当于java中的long
	
	案例:
		CREATE TABLE 
			t2(
				tint TINYINT,
				sint SMALLINT,
				int01 INT(4) zerofill,
				bint BIGINT
			);
		INSERT INTO 
			t2(
				tint,
				sint,
				int01,
				bint
			)VALUES(
				127,
				32767,
				18,
				2200000000
			);
		-- 低版本: error, 超出了tinyint的取值范围
		-- 最新版: 不报错! 将超出的值删掉替换为该类型的最大值(优化操作)

		SELECT * FROM t2;

		DROP TABLE t2;

2. 浮点数
	FLOAT(m,d)
		占4个字节, 相当于java中的float

	DOUBLE(m,d) --最常用
		占8个字节, 相当于java中的double
			-- 注: float和double都是不安全的, 容易出现精度偏移

	DECIMAL(m,d) -- 精度安全
		-- 注: m表示总长, d为小数点后的个数 金融行业

		案例:
			CREATE TABLE t3(salary DOUBLE(4,2));

			INSERT INTO t3 VALUES(12.233); -- 正确, mysql做了优化, 小数位上超出的部分四舍五入
			INSERT INTO t3 VALUES(12.23);  -- 正确
			INSERT INTO t3 VALUES(122.3);  -- error

			SELECT * FROM t3;

3. 字符串(文本)
	CHAR(n): 定长字符串, 最长不超过255个字符, n表示字符数. 所谓定长是指当"插入的字符长度"小于"给定长度n"时, 剩余的空间会用空格填充. -- 浪费空间, 运行效率高于VARCHAR

	VARCHAR(n): 变长字符串, 最长不超过65523个字符, n表示字符数. 所谓定长是指当"插入的字符长度"小于"给定长度n"时, 剩余的空间会截取掉留给后面数据使用. -- 节省空间, 运行效率低于CHAR

	TEXT(n): 大本文/长文本类型, 一般超过255个字符时建议使用该类型
		tinytext	最大长度 256 字节 -- 字符集latin1
		TEXT		最大长度 64 kb
		mediumtext	最大长度 64 mb
		longtext	最大长度 4 gb

4. 日期
	DATE(保存年月日)	'xxxx-xx-xx' --注:插入时, 中间支持"-"衔接, 也支持"/", 但最终数据库都会同意转为"-"

	TIME(保存时分秒)	'xx:xx:xx'

	timestamp(保存年日月时分秒)	'xxxx-xx-xx xx:xx:xx'
		-- 最大值为 2038-1-19

	DATETIME(保存年月日时分秒)
		-- 最大值为 9999-12-31

SQL分类

1. 数据定义语言 DDL
	1) 负责数据库"结构"的定义与修改
	2) 常见: CREATE ALTER DROP

2. 数据操纵语言 DML
	1) 负责对数据库中的"数据"进行操作
	2) 常见: INSERT SELECT UPDATE DELETE 
			--注: 把"增查该删"称为"CRUD"
	3) 由于使用频繁, select后期被单独划分为一类

3. 数据查询语言 DQL
	1) 用于查询表内的数据
	2) 常见: SELECT 
			-- 注: DQL 其实也是DML的一部分











-- 其他:  
-- select now(); 查看当前时间
-- select version(); 查看当前版本
-- select user(); 查看当前用户
-- select database(); 查看当前数据库
-- show variables like '%connections%'; 查看最大连接数
-- show variables like '%datadir%'; 查看数据库储存路径
-- status 查看当前配置
-- set password for root@localhost=password('root'); 修改密码
-- grant all on  *.* to lll@localhost; grant 高级 lll 管理 MySQL 中所有数据库的权限。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值