Java知識點——MySQL

MySQL

1. 爲什麼要使用數據庫

	Java程序在運行的過程中對於數據進行存儲操作,變量,對象,數組,集合,雙邊隊列...數據是保存到內存中,數據存儲是瞬時的,程序退出,電腦異常。都會導致數據丟失並且不可逆。
	文件存儲數據,XML,JSON,其他文件。可操作性比較差,API繁瑣,不同的文件有不同的解析方式,而且在內存佔用和效率問題上很難達到兩全程度。
	
存在的一些問題:
	1. 文件保存的數據沒有數據類型區分,都是字符串。
	2. 數據存儲量是較小的,有一定限制的。
	3. 沒有安全限制。
	4. 文件操作沒有備份,回滾,數據保護機制

2. 什麼是數據庫

	數據庫按照特定的數據結構,來進行數據的組織,存儲,管理和查詢,數據庫軟件。可以長期存儲,有安全限制,數據恢復,並且數據存儲可拓展
	
	數據庫分類:
		網狀結構數據庫
		層次結構數據庫
		關係結構數據庫【重點】
			Oracle,MySQL,DB2,SQL Server
			通過表結構方式來進行數據的存儲操作。--> XLS表格
		非關係型數據庫
			MongDB Redis
			使用哈希表結構方式,Key-Value數據存儲方式
		ES
			ElastecSearch

3. 數據庫管理系統

數據庫管理系統
	DataBase Management System
	DBMS
	操作和管理數據大型軟件,用於管理,建立,使用和查詢數據。

Oracle
	賊牛皮,安全性,穩定性,數據存儲複雜程度....可以完全符合工業要求
	貴
DB2
	IBM公司,不是很多見
SQL Server
	MS公司推出的關係型數據庫
SQLite
	輕量級數據庫,源碼1W行C語言,手機通訊錄

4. MySQL

4.1 MySQL歷史簡介
	MySQL數據庫默認編碼集 Latin1 ==> 西歐
	瑞典的一個公司開發的!! MySQL AB公司
	MySQL支持插件!!!
	社區
		InnoDB跨時代的存儲引擎
	MySQL性能是非常不錯的!!!
		美國小鷹號航空母艦數據存儲都是使用MySQL
		
	MySQL 隸屬於Oracle公司,免費提供使用的數據庫軟件。目前流行的版本是 MySQL 5.5 5.6 5.7,最新版本是8.0
	實際開發中我們要考慮穩定性,兼容性,普適性
4.2 MySQL獲取和安裝
【詳見】 Windows下安裝MySQL5.7

5. SQL

5.1 SQL語句概述
	SQL是數據庫通用查詢數據,不管是MySQL,Oracle,SQL Server都是支持標準SQL語句。不同數據庫都會有自己特定的一些SQL語言。
	SQL簡單來分類
		C Create
		R Read
		U Update
		D Delete
5.2 MySQL基本操作
cmd > mysql -hlocalhost -uroot -p123456
# mysql指目前需要操作連接的數據庫
# -hlocalhost -h host端口,當前數據庫所處的服務器ip地址,域名或者主機名
# localhost 表示本地,如果是本地連接可以省略
# -uroot -u user用戶 root表示用戶
# -p -password 密碼

# 推薦方式
cmd > mysql -uroot -p
Enter password: ******
-- 展示當前數據庫中所有的數據表
mysql > show databases;

-- 創建數據庫
-- CREATE DATABASE DBName;
mysql > create database nzgp2001;
-- 創建數據庫過程修改編碼集
mysql > create database nzgp2002 character set latin1;
mysql > create database nzgp2003 character set gbk;

-- 查看創建數據庫的詳細內容
mysql > show create database nzgp2001;

-- 修改數據庫的編碼集
mysql > alter database nzgp2002 character set gbk;

-- 刪除對應數據庫
mysql > drop database nzgp2002;

-- 選擇使用數據庫
mysql > use nzgp2001;

-- 讓MySQL告知當前使用的數據庫是哪一個
# 讓MySQL告知當前使用的數據庫是哪一個
mysql > select database();

6. MySQL開發工具使用

Navivcat for MySQL 非常不錯
SQLyog 小海豚
MySQL WorkBench 免費,MySQL官網提供
IDEA Java IDE提供了數據庫操作支持

7. 查詢語句【重點】DQL

7.1 基本格式
select 查詢內容 from 從哪裏查;
-- 查詢內容 字段名 列明
-- 從哪裏查 表名
7.1.1 基本查詢,字段表名
-- * 所有字段全部展示
-- 不建議,如果採用select * 方式整個數據庫數據的時間非常長,浪費資源
select * from t_employees;

-- 查詢指定的字段
select EMPLOYEE_ID, FIRST_NAME, LAST_NAME from t_employees;
7.1.2 查詢結果字段進行數據計算
-- 查詢員工ID號,員工的名字(FristName LastName) 用戶年限
select EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY * 12
from t_employees;

-- 這裏允許使用+ - * / 可以完成字段和字段直接的算術運算
-- %在SQL語句中不是取餘,而是佔位符!!
7.1.3 去重查詢 distinct
-- 查詢結果中存在相同內容,第二個數據不要
select distinct MANAGER_ID
from t_employees;

-- 不去重
select MANAGER_ID
from t_employees;
7.1.4 字段別名
-- 字段名 as '別名'
select EMPLOYEE_ID as 'ID', FIRST_NAME as '名', LAST_NAME  as '姓', SALARY * 12 as '年薪'
from t_employees;
7.2 排序查詢 order by
規則 效果
asc 指定條件升序
desc 指定條件降序
-- 基本格式
select fieldName from tbName order by fieldName asc/desc;
-- 在查詢結果展示中,按照執行的字段作爲標記完成升序和降序
7.2.1 單一條件排序
select EMPLOYEE_ID, FIRST_NAME, SALARY -- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY asc ; -- order by 指定字段要求排序 升序

select EMPLOYEE_ID, FIRST_NAME, SALARY -- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY desc ; -- order by 指定字段要求排序 降序
7.2.2 多字段條件排序
-- 第一條件是工資降序,當第一條件出現一致情況下,使用第二條件進行二次排序
select EMPLOYEE_ID, FIRST_NAME, SALARY -- 查詢展示的字段有哪些
from t_employees -- 從哪裏查詢
order by SALARY desc, EMPLOYEE_ID desc; -- order by 指定字段要求排序 工資降序 ID降序
7.3 條件查詢 where
7.3.1 基本格式
select fieldName from tbName where condition;
-- 從指定數據表中,按照where之後指定條件,查詢對應的字段數據
-- where條件是一個是一個boolean類型結果
7.3.2 等值判斷 =
-- Java等於判斷是用的是 == 或者更嚴謹的情況,會使用 equals
-- 數據庫中使用 = 在where條件之後是一個等值判斷

-- 查詢在員工表內容,工資等於11000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY = 11000;
7.3.3 不等值判定(> < >= <= != <>)
-- 查詢在員工表內容,工資大於10000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY > 10000;

-- 查詢在員工表內容,工資大於10000 對應的id號,名,和工資
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY >= 10000;

-- 查詢在員工表內容,部門ID不等於80 對應的id號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID <> 80;

-- 查詢在員工表內容,部門ID不等於80 對應的id號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID != 80;
7.3.4 邏輯判斷(and, or, not)
-- 查詢在員工表內容,要求工資大於10000並且部門編號爲80 對應的ID號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where SALARY > 10000 and DEPARTMENT_ID = 80;

-- 查詢在員工表內容,要求工資小於2500或者部門編號爲90 對應的ID號,名,工資和部門ID
select EMPLOYEE_ID, FIRST_NAME, SALARY, DEPARTMENT_ID
from t_employees
where SALARY < 2500 or DEPARTMENT_ID = 90;
7.3.5 區間 between and
-- 要求between min and max 在min <==> max範圍以內,而且要求小值之前,大值不然會報
-- 錯,這裏區間範圍是包含指定的邊界

-- 區間範圍
select EMPLOYEE_ID, FIRST_NAME, SALARY
from t_employees
where SALARY between 8000 and 10000;
7.3.6 NULL值判斷
-- is null 指定當前的字段是null
-- is not null 指定當前字段不是null

-- 找出所有提成爲null的數據
select FIRST_NAME, COMMISSION_PCT
from t_employees
where COMMISSION_PCT is null;

-- 找出所有提成不是null的數據
select FIRST_NAME, COMMISSION_PCT
from t_employees
where COMMISSION_PCT is not null;
7.3.7 枚舉查詢 in
-- 查詢部門編號爲60, 70, 90員工名字和對應部門編號
-- in查詢效率較低,推薦使用多條件拼接完成查詢操作
select FIRST_NAME, DEPARTMENT_ID
from t_employees
where DEPARTMENT_ID in(70, 60, 90);
7.3.8 模糊查詢 like
-- LIKE
-- _ 匹配一個字符
-- % 匹配任意長度字符

-- 查詢FIRST_NAME,要求FIRST_NAME字段D字母開頭後面有4個字符
select FIRST_NAME
from t_employees
where FIRST_NAME like 'D____';

-- -- 查詢FIRST_NAME,要求FIRST_NAME字段帶有D字母就可以,而且不區分大小寫
select FIRST_NAME
from t_employees
where FIRST_NAME like '%D%';
7.3.9 分支結構查詢
case
	when condition1 then ret1
	when condition2 then ret2
	when condition3 then ret3
end
-- 從case開始,到end結束。滿足條件對應一個結果,類似於Java中的switch case

-- 查詢姓名,工資已經對應工資劃分的等級LEVEL
select FIRST_NAME, SALARY,
case
    when SALARY >= 10000 then 'A'
    when SALARY >= 8000 and SALARY < 10000 then 'B'
    when SALARY >= 6000 and SALARY < 8000 then 'C'
    when SALARY >= 4000 and SALARY < 6000 then 'D'
    else 'E'
end as 'LEVEL'
from t_employees;
7.4 時間查詢
-- 語法
select 時間函數([參數列表]);
-- 查詢時間情況下,得到的是一個單列單表(虛表)
時間函數 功能描述
sysdate() 當前系統時間(年,月,日, 時,分,秒)
CURRENT_TIMESTAMP() 當前系統時間(日,月,年,時,分,秒)
curdate() 當前日期
curtime() 當前時間
week() 指定日期是這一年的第幾周
hour() 指定日期是今天第幾個小時
minite() 指定日期是小時的第幾分鐘
second() 指定日期是分鐘的第幾秒
select sysdate();
select CURRENT_TIMESTAMP();
select curdate();
select curtime();
select week('2019-11-23');
select now();
select second(sysdate());
select minute(sysdate());
select hour(sysdate());
7.5 字符串應用
方法 功能描述
concat(str1, str2, str3…) 拼接多個字符串
insert(str, pos, len, newStr) 在指定字符串位置pos,長度限制len,插入新字符串
lower(str) 大寫轉小寫
upper(str) 小寫轉大寫
substring(str,pos, len) 指定字符串,從pos位置開始,長度限制len
select concat('你好', ' MySQL', ' Oracle公司產品');
select insert('ABCDEFG', 3, 3, '你好');
select upper('abcdefg');
select lower('ABCDEF');
select substring('ABCDEFG', 2, 5);
7.6 內置方法
方法 功能描述
sum() 指定字段一列總會
avg() 指定字段一列平均值
max() 指定字段一列中的最大值
min() 指定字段一列中的最小值
count() 指定字段有多少行
-- 工資總和
select sum(SALARY)
from t_employees;

-- 工資平均數
select avg(SALARY)
from t_employees;

-- 工資最大值
select max(SALARY)
from t_employees;

-- 工資最小值
select min(SALARY)
from t_employees;

-- 當前有多少員工計數
select count(*)
from t_employees;

-- 當前有多少員工計數
-- count(1) 蜜汁比count(*) 快一點
select count(1)
from t_employees;

-- 統計有多少人有績效
select count(COMMISSION_PCT)
from t_employees;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章