Mysql上_学习总结

数据库:
	MySQL: 基础, 单表.
	MySQL: 表设计, 多表.
	
	JDBC: 核心7步, 工具类(Properties). 
	DBCP(效率), DBUtils
	
1. 你知道的存储数据的方式有几种?
	变量, 常量, 数组, 集合: 可以对数据进行临时性存储, 程序执行结束后数据就丢失了.
	IO流: 可以对数据进行永久性存储, 不方便用户进行精细化管理.
	数据库: 就是存储数据的仓库, 其本质是一个文件系统, 可以有规律的对数据进行存储, 方便用户进行增删改查.
		//增删改查: CURD(create, update,read,delete)
		//数据库才是实际开发中我们真正存储数据的地方.
	
	
2. 我们常说的数据库其实指的是数据库管理系统(DBMS), 数据库管理系统和数据库之间有什么关系?
	数据库管理系统: DataBase Management System
		类似于: Eclipse
	数据库:
		类似于:	Eclipse中的项目
	
	数据表:
		类似于: Java(项目)中的类
	
	数据表中的数据: 
		类似于: Java中的实体对象.


3. 常见的数据库管理系统(DBMS)有哪些?
	MySQL, Oracle, SQLServer, DB2, SyBase, SQLite.
	
	
4. 我们常用的这些数据库管理系统都是: 关系型数据库, 那么什么是关系型数据库呢?
	所谓的关系型数据库: 其实描述的就是实体与实体之间的关系.
		
	ER模型图(Entity Relational Model)
		实体: 矩形
		属性: 椭圆形
		关系: 菱形
	
	
5. MySQL的安装和卸载:
	安装:
		A: 安装之前关闭防火墙.
		B: 最好不要直接安装到盘符根目录下.
		C: 安装路径最好不要出现中文, 空格, 特殊符号等.
	
	卸载:
		A: 卸载之前一定要备份数据.
			//直接把data文件夹给复制一遍即可.
		B: 不要直接删除MySQL文件夹.
		C: 可以采用MYSQL自带的卸载程序进行卸载.
		D: 在控制面板中进行删除.			//推荐
		

6. MySQL的登陆
	方式一:
		window徽标键 + 字母r --> cmd --> mysql -u root -p --> 回车 --> 录入密码 --> 回车
	
	方式二:
		window徽标键 + 字母r --> cmd --> mysql -u用户名 -p密码 --> 回车
		
	登陆数据库的时候有可能遇到的问题:
		using password yes:  录入的用户名或者密码错误. 
		错误提示:10061 -- mysql服务没有开启. 如果开启不了,用管理员身份执行命令窗口
			开启MySQL服务:	net start mysql
			关闭MySQL服务:  net stop mysql
			
			打开"服务"界面: services.msc

7. SQL语句
	概述:
		SQL: Structured Query Language, 结构化查询语言.
			//人和数据库之间进行交互的语言.
	分类:
		DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.
			//关键字:create, drop, alter
			
		DML: 数据操作语言. 主要指的是操作数据, 增删改.
			//SQL语句中,把对数据的增删改操作合称为: 更新语句.
			//关键字:insert, delete, update
			//记忆:DML语句可以和 事务 相结合使用.
			事务:
				佳乐10000, 凤姐10000
				
				开启事务
					佳乐 - 1000
					sop(1/0);
					凤姐 + 1000
				提交事务: commit
				事务回滚: rollback
			
		DCL: 数据控制语言. 主要指的是 创建用户, 设置权限, 设置安全级别.
			
		DQL: 数据查询语言. 主要指的是操作数据: 查询.
			//关键字:select, from, where  
			
	使用SQL语句时的注意事项:
		A: SQL语句不区分大小写, 建议关键字大写,其他小写.
		B: 我们今天写数据类型的时候要注意, Java中的String类型, 对应的是数据库中的 varchar(长度).
		C. 值的个数必须和列的个数对应.
		D. 值的类型和列的类型也必须对应.
		E. 如果是数字类型可以直接写, 其他类型用''括起来.
		F. SQL语句的结束标记是: 分号;
		G. 进行删除和修改操作之前, 一定一定一定要备份.
	
8. SQL语句操作数据库(CURD)
	增:
		创建数据库:  create database 数据库名;
			create database 数据库名称 character set 字符集;  等价于 create database 数据库名称 charset 字符集;
			create database 数据库名称 character set 字符集 collate 字符集校对规则;
		
	删:
		删除数据库:  drop database 数据库名;
	改:
		修改数据库的码表:
			alter database 数据库名 charset 指定的字符集;
			alter database 数据库名 character set 指定的字符集;
	查:
		查询所有的数据库
			show databases;
		查询指定数据库(字符集)
			show create database 数据库名;
	使用指定的数据库(切换库):
		use 数据库名;
		查看当前使用的数据库	
			* select database();  
		查询当前数据库中的所有表:
			* show tables;

9. SQL语句操作数据表
	增:		
		创建数据表:			//掌握
			create table 数据表名(
				列名1 数据类型 [约束],
				列名2 数据类型 [约束],
				列名3 数据类型 [约束]
			
			);
			数据类型:
				Java中的数据类型			MySQL中的数据类型
				byte/short/int/long			tinyint/smallint/int/bigint
				float/double				float/double
				char/String					char/varchar(长度)
				Date						Date/Time/DateTime/StampDate
											DateTime: 可以自定义时间.
											StampDate: 时间戳, 采用当前系统的默认时间.
				boolean						bit
											
				File						BLOB/TEXT(CLOB)
				
			约束
				作用: 用来保证数据的完整性和安全性.
				分类: 
					单表约束:
						主键约束: primary key		//auto_increment(自动增长)
						唯一约束: unique
						非空约束: not null
					多表约束:	
						外键约束: foreign key
							foreign key(表内外键属性) references 表名(连接外表的属性)
					
					拓展:
						* 默认赋值并:sex char(2) default '男'
						* 设置自动增长 id int primary key auto_increment,
		
		创建用户表: 
			create table users(
				uid int primary key auto_increment,
				uname varchar(20),
				pw varchar(20)
			);

			
	删:
		删除数据表: drop table 数据表名;
	改:		//了解,一般不用
		给表增加一列字段
			alter table 表名 add 列名 数据类型 约束;
		修改某列字段的约束和类型
			alter table 表名 modify 列名 数据类型 约束;
		修改某列字段的名字,约束,类型
			alter table 表名 change 旧列名 新列名 数据类型 约束;
		删除指定的列
			alter table 表名 drop 列名;
		修改表名
			rename table 旧表名 to 新表名;
		修改表的码表
			alter table 表名 character set 指定的码表;
			alter table 表名 charset 指定的码表;
		
	查:
		查询所有的数据表
			show tables;
			
		查询指定数据表的码表
			show create table 表名;
		
		查询指定数据表(表结构)
			desc 数据表名;

10. SQL语句操作数据表中的数据
	增:
		添加一条数据:
			insert into 数据表名(列名1,列名2,列名3) values(值1,值2,值3);
			//insert into users(uid,uname,pw) values(1,'jiale','a123');
		
		批量添加: //添加多条数据
			insert into 数据表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3);
			insert into users(uid,uname,pw) values(1,'jiale','a123'),(2,'fengjie','a123'),(3,'furongjiejie','a123');
			
		实际开发中的写法:
			insert into users values(null,'jiale','a123');
			
		通过"DOS命令窗口"往MySQL中添加中文, 然后查看的时候发现会出现乱码情况, 为什么?		//面试题
			因为控制台默认码表是: GBK, MySQL的服务器端和客户端的默认码表都是: UTF8, 所以会出现乱码.
			
			解决方案:
				方式一:  临时性的把 MySQL的客户端的码表设置为: gbk
					set names 'gbk';
				
				方式二:  永久性设置, 在mysql的安装目录的my.ini配置文件中, 将client的码表改为: GBK.
						 重启mysql生效  		cmd --> services.mcs -->找到MySQL服务重新启动即可
			
	删:
		delete from 数据表名 where 条件;
		truncate table 表名;
		
		delete from 和 truncate table 都可以删除表中的数据, 这两种删除方式之间有什么区别?
			delete from: 
				清空表中的数据, id不会重置.
				属于DML语句, 可以和 事务 结合使用.
			truncate table:
				相当于把表给删除, 然后再创建一张一模一样的表出来.		//可以理解为: id会重置.
				属于DDL语句, 不可以和 事务 结合使用.
		
	改:
		update 数据表名 set 列名1=值,列名2=值,列名3=值 where 条件;
		
		备份数据: 			//理解, 只能备份数据, 不能备份主键.
			备份表不存在:
				create table 备份表名 select * from 要备份的表名;
			
			备份表已经存在:
				insert into 备份表名 select * from 要备份的表名;
			
	查: **
		最基本的查询:
			select * from 数据表名;
			select 列名1,列名2,列名3 from 数据表名;
			
		标准格式:
			select [distinct] [top(n)] <列名1,列名2...或者 *或者目标表达式>
			from <表名1,表名2...>  [[as]<别名>]
			[where 条件]
			[group by <列名2> [having<条件表达式>]]
			[order by <列名1> [asc|desc] [,<列名1> [asc|desc]...]]
			
				[]为可选项 <>为必选项 
				* distinct:去重复
				* top(n) 显示前n个数据,mysql中用limit
				* where 后常用的运算符:
					> < >= <= <>(不等于)
					in 在一组中查找
					like 模糊查询 配合_ %
					is null 找出null的数据
					and or not:与或非
				
				* 聚合函数:
					count():统计满足条件的行数
						select count(*) from ...where ...
					sum():求某一列满足条件各行数据的和
					avg():求平均值
					min():最小
					max():最大
				* group by:分组
				* having:分组统计
				* order by 排序:默认升序,dsc升序,desc降序
				
				limit	---mysql中的关键字
					select * from exam limit 3; 	---显示3条记录.默认从0-3相当于select * from exam limit 0-3; 
				SQL		---oracle中的关键字
				top		---sql server中的关键字
		
		
		带别名的查询:  别名最好加'',排序不支持中文别名
			关键字 as.	(可省略)
		
		带条件的查询:
			需求: 成绩表exam(eid,ename,chinese,math,english)
			create table exam(
				eid int primary key auto_increment,
				ename varchar(20) not null,
				chinese int  not null,
				math int  not null,
				english int  not null
				
			);
			insert into exam values(null,'佳乐', 59,59,59),(null,'佳乐', 59,59,59),(null,'佳乐', 59,59,59);
			
			分类:
				1. 条件运算符
					>,<, >=, <=, =, !=(<>)
					select * from exam where eid>=2;
				2. 区间(范围)运算符
					between 值1  and 值2;
					select * from exam where eid between 3 and 5;
				3. 逻辑运算符
					and or not
					select * from exam where eid=3 or eid=4 or eid=5;
				4. 固定值的查询
					in (值1,值2,值3)
					select * from exam where eid in (1,3,5);
					select * from exam where eid%2 != 0;
				5. 模糊查询
					like 条件.
					//一般会结合占位符使用.
					//_占一个位置  %占多个位置
					select * from exam where ename like '张_';
					select * from exam where ename like '张%';
					select * from exam where ename like '%张%';
		
		排序查询:
			关键字: order by 要排序的列 [asc/desc]; (注:排序的列别名不能用中文)
			//asc表示升序, 但是程序默认是升序, 所以asc可以省略不写. desc表示降序.
			//无论一个SQL语句简单还是复杂, 排序语句必须放在整个SQL语句的最后边.
			
			//需求: 查找所有语文成绩及格的学生信息, 并且按照语文成绩进行降序排列,
			//	    如果语文成绩一样, 按照数学成绩升序排列.
			select * from exam where chinese >= 60 order by chinese desc,math asc;
		
		聚合函数:
			count()	//一般用于计算数据一共有多少条.
				 select count(*) from exam;
			max()
			min()
			avg()	//平均值有可能是一个小数.
			sum()
			
			//where 条件后边不能跟 聚合函数
		
		分组查询:
			关键字: group by 要分组的列.
			已知: 创建一个商品表: product
				create table product(
					pid int primary key auto_increment,
					pname varchar(20),
					price double
				);
				insert into product values(null,'冰箱',2000),
				(null,'冰箱',1000),
				(null,'冰箱',1500),
				(null,'洗衣机',2000),
				(null,'电视机',3000),
				(null,'洗衣机',1000),
				(null,'电视机',10000);
	
			需求:
				1. 统计每类商品的个数.
					select pname,count(*) from product group by pname;
				2. 统计每类商品的总金额.
					select pname,sum(price) from product group by pname;
				3. 统计每类商品的总金额, 并且总金额大于4000	
					select pname,sum(price) from product group by pname having sum(price)>4000;
					select pname,sum(price) as sp from product group by pname having sp > 4000;
					select pname,sum(price) sp from product group by pname having sp > 4000;
				4. 统计每类商品的总金额, 并且总金额大于4000, 然后按照总金额进行降序排列.	
					select pname,sum(price) sp from product group by pname having sp > 4000 order by sp desc;
					
					
					
					
				5. 统计每类商品的总金额, 并且总金额大于2000, 然后按照总金额进行降序排列,
				   只统计单价在1500(包括)以上的商品.
					 select pname,sum(price) sp from product where price>=1500 
					 group by pname having sp >2000 order by sp desc;
				
				一个完整的SQL查询语句的格式:
					select 列名1,列名2,列名3 from 数据表名 
					where 分组前的条件筛选 
					group by 要分组的列 having 分组后的条件筛选 
					order by 排序的列 [asc/desc];
					
	
面试题:
	1. delete from 和 truncate table 都可以删除表中的数据, 这两种删除方式之间有什么区别?
		delete from: 
			清空表中的数据, id不会重置.
			属于DML语句, 可以和 事务 结合使用.
		truncate table:
			相当于把表给删除, 然后再创建一张一模一样的表出来.		//可以理解为: id会重置.
			属于DDL语句, 不可以和 事务 结合使用.

	2. where 和 having 之间有什么区别?
		where: 用于做分组前的条件筛选, 后边不能跟聚合函数.
		having: 用于做分组后的条件筛选, 后边可以跟聚合函数.

		

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值