1. 程式人生 > 其它 >mysql innodb臨時表btmp1檔案太大

mysql innodb臨時表btmp1檔案太大

技術標籤:Java Web

1.資料庫概述

1.1 什麼是資料庫

所謂的資料庫就是指儲存和管理資料的倉庫
擴充套件內容1:資料庫有哪些分類?(瞭解)

早期: 層次式資料庫、網路型資料庫
現在:關係型資料庫、非關係型資料庫

1.2 什麼是關係型資料庫

底層以二維表的形式儲存資料的庫就是關係型資料庫
stu-學生表

學生編號姓名年齡
1001劉沛霞35
1002陳子樞18

擴充套件內容2:常見的關係型資料庫有哪些?(瞭解)
sql Server:微軟提供,收費,適用於一些中型或大型的專案中,在java中的使用佔比不高(.net中使用的較多)
Oracle:甲骨文公司提供,收費,適用於一些大型或者超大型的專案中,在java中的使用佔比非常高

mysql:瑞典MySQLAB公司提供,免費開源,適用於一些小型或者中型的專案中,在java中的使用佔比較高(小巧輕量)
mariadb其實就是MySQL的一個分支,用法和MySQL完全一樣
DB2:IBM公司提供,收費,在一些銀行,金融等行業中使用較多。在java中的使用佔比也不高
Sqlite:迷你資料庫,嵌入式裝置中(安卓、蘋果手機、pad)

1.3 資料庫相關概念

1.3.1 什麼是資料庫伺服器

資料庫伺服器就是一個軟體(比如mysql軟體)將資料庫軟體安裝在電腦上,當前電腦就是一個數據庫伺服器。就可以對外提供存取資料的服務
在一個數據庫伺服器中可以建立多個數據庫(dataBases),每一個數據庫都是一個單獨的倉庫

1.3.2 什麼是資料庫

資料庫就是儲存和管理資料的倉庫,通常情況下,一個網站的中的所有資料會存放在一個數據庫中。例如:

jd.com                db_jd(資料庫)
taobao.com        db_taobao(資料庫)

1.3.3 什麼是表

一個數據庫中可以建立多張表,每張表用於儲存一類資訊(資料庫),例如:
jd.com中的使用者資料 tb_user(表)
jd.com中的商品資料 tb_product(表)
jd.com中的訂單資料 tb_order(表)

1.3.4 什麼是表記錄

一張表中可以包含多行表記錄,每一行表記錄用於儲存某一個具體的資料

學生編號姓名年齡
1001劉沛霞35
1002陳子樞18

1.4 什麼是SQL語言

SQL是一門用於操作關係型資料庫的通用的語言(使用SQL可以操作所有的關係型資料庫)
使用SQL可以操作資料庫、表、表記錄
(1)建立資料庫、刪除資料庫、修改資料庫、查詢資料庫
(2)建立表、刪除表、修改表、查詢表
(3)新增表記錄、刪除表記錄、修改表記錄、查詢表記錄
使用SQL也可以操作儲存過程/檢視/索引等。
提示:SQL是一個標準通用的操作關係型資料庫的語言(普通話),每個資料庫廠商為了增強自己資料庫的功能,都提供了支援自己資料庫的語言,稱之為資料庫的方言。方言不通用!

2.連線mysql伺服器

通過命令列工具可以登入MySQL客戶端,連線MySQL伺服器,從而訪問伺服器中的資料

2.1 連線mysql伺服器

mysql -uroot -p密碼

**-u:**後面的root是使用者名稱,這裡使用的是超級管理員root
**-p:(小寫的p)**後面的root是密碼,這裡在安裝MySQL時就已經指定的密碼

2.2 連線mysql伺服器並指定ip和埠

mysql -uroot -proot -h127.0.0.1 -P3306

**-h:**後面給出的127.0.0.1是伺服器主機名或ip地址,可以省略的,預設連線本機
**-P:(大寫的P)**後面的3306是連線埠,可以省略,預設連線3306埠

2.3 退出客服端命令

quit或exit或\q

2.4 FAQ:常見問題

在這裡插入圖片描述
解決方法:複製mysql安裝目錄下的bin目錄的路徑,將bin目錄的路徑新增到path環境變數中!!
可以在cmd中通過 echo %path% 檢查path環境變數的值。
擴充套件內容3:
(1)在cmd中連線mysql伺服器之後,可以使用 #、/**/、-- 等符號添加註釋,例如:
在這裡插入圖片描述
(2)在cmd中連線mysql伺服器之後,在書寫SQL語句時,可以通過 \c 取消當前語句的執行。例如:
在這裡插入圖片描述

3.資料庫及表操作

3.1 建立、刪除、檢視資料庫

提示: (1)SQL語句對大小寫不敏感。推薦關鍵字使用大寫,自定義的名稱(庫名,表名,列名等)使用小寫

show databases; -- 檢視當前資料伺服器中的所有庫
create database mydb1; -- 建立mydb1庫

(2)並且在自定義名稱時,針對多個單詞不要使用駝峰命名,而是使用下劃線連線。(例如:tab_name,而不是 tabName )

3.1.1 檢視mysql伺服器中所有資料庫

show databases; -- 檢視所有的資料庫
show tables; -- 檢視所有的表

3.1.2 進入某一資料庫(進入資料庫後。才能操作庫中的表和表記錄)

語法:use 庫名;

use test; -- 進入/選中test庫
use mysql; -- 進入/選中mysql庫

檢視已進入的庫

select database();

3.1.3 檢視當前資料庫中的所有表

show tables;

3.1.4 刪除test庫

語法:drop database 庫名;

drop database test; -- 刪除test庫

思考:當刪除的庫不能存在時,如何避免錯誤產生

drop database mydb1; -- 刪除的庫不存在會報錯
drop database if exists mydb1; -- 如果存在,則刪除mydb1庫

3.1.5 重新建立mydb1庫,指定編碼為utf8

語法:create database 庫名 charset 編碼;
需要注意的是,mysql中不支援橫槓(-),所以utf-8要寫成utf8

create database mydb1 charset utf8;

如果不存在則建立mydb1

create database if not exists mydb1 charset utf8;

3.1.6 檢視建庫時的語句(瞭解,並驗證資料庫庫使用的編碼)

語法:show create database 庫名;

show create database mydb1;

3.2 建立、刪除、查看錶

3.2.1 進入mydb1庫,刪除stu學生表(如果存在)

語法:drop table 表名;

use mydb1;
drop table if exists stu;

3.2.2 建立stu學生表(編號[數值型別]、姓名、性別、出生年月、考試成績[浮點型]),建表的語法:

create table 表名(
	列名 資料型別,
	列名 資料型別,
	...
	列名 資料型別
);

sql語句:

use mydb1;
create table stu(
	id int,
	name varchar(20), -- 20表示該列中最多存20個字元
	gender varchar(10),
	birthday date,
	score double
);

3.2.3 檢視stu學生表結構

語法:desc 表名;

desc stu;

在這裡插入圖片描述

4.新增、更新、刪除表記錄

4.1 往學生表(stu)中插入記錄(資料)

語法:insert into 表名(列名1,列名2,列名3…) values(值1,值2,值3…);

insert into stu(id,name,gender,birthday,score)
values(1,'tom','male','1985-3-4',90);
/* 插入中文資料前,先 set names gbk; (只對當前視窗有效) */
insert into stu values(2,'王海濤','male','1995-4-5',85);
insert into stu values(3,'劉沛霞','female','1985-6-7',80);
-- 查詢stu表中的所有記錄
select * from stu;

提示:

(1)當為所有列插入值時,可以省寫列名,但值的個數和順序必須和宣告時列的個數和順序保持一致!
(2)SQL語句中的值為字串或日期時,值的兩邊要加上單引號(有的版本的資料庫雙引號也可以,但推薦使用單引號)。
(3)(針對cmd視窗)在插入資料之前,先設定編碼:set names gbk;
或者用以下命令連線mysql伺服器:
	mysql --default-character-set=gbk -uroot -proot
等價於:
	mysql -uroot -proot
	set names gbk;

4.2 查詢stu表所有學生的資訊

語法:select 列名 | * from 表名

select * from stu;

4.3 修改stu表中所有成績,加10分特長分

修改語法:update 表名 set 列=值,列=值,列=值…[where 子句];

update stu set score=score+10; -- mysql中不支援++

4.4 修改stu表中編號為1的學生成績,將成績改為83分

update stu set score=83 where id=1;

提示:where子句用於對記錄進行篩選過濾,保留符合條件的記錄,將不符合條件的記錄剔除

4.5 刪除stu表中所有的記錄

刪除記錄語法:delete from 表名 [where 子句]

delete from stu; -- 預設刪除表中的所有記錄

僅刪除符合條件的

delete from stu where id>1; -- 刪除id大於1的

5.查詢表記錄

準備資料:以下練習將使用db10庫中的表及表記錄,請先進入db10資料庫

5.1 基礎查詢

select語句用於從表中選取資料。結果別儲存在一個結果表中(稱為結果集)
語法:select 列名稱 | * from 表名
提示:(1) *(星號)為萬用字元,表示查詢所有列
(2)但使用 *(星號)有時會把不必要的列也查出來了,並且效率不如直接指定列名

5.1.1 查詢emp表中的所有員工,顯示姓名,薪資,獎金

select name,sal,bonus from emp;

5.1.2 查詢emp表中的所有部門和職位

select dept,job from emp;

思考:如果查詢的結果中,存在大量重複的記錄,如何剔除重複記錄,只保留一條?
在select之後、列名之前,使用distinct剔除重複的記錄

select distinct dept,job from emp;

5.2 where子句查詢

where子句查詢語法;select 列名稱 | * from 表名稱 where 列 運算子 值
where子句後面跟的是條件,條件可以有多個,多個條件之間用連線詞(or | and)進行連線
下面的運算子可在where子句中使用

操作符描述
=等於
<>或!=不等於
>大於
<小於
>=大於等於
<=小於等於
between在某個範圍內
like搜尋某種模式

5.2.1 查詢emp表中[薪資大於3000]的所有員工,顯示員工姓名、薪資

select name,sal from emp
where sal>3000;

5.2.2 查詢emp表中[總薪資(薪資+獎金)大於3500]的所有員工,顯示員工姓名、總薪資

select name,sal+bonusfrom emp
where sal+bonus>3500;

ifnull(列名, 值)函式: 判斷指定的列是否包含null值,如果有null值,用第二個值替換null值

select name,sal+ifnull(bonus,0) from emp
where sal+ifnull(bonus,0)>3500;

注意檢視上面查詢結果中的表頭,如何將表頭中的 sal+bonus 修改為 “總薪資”
使用as可以為表頭指定別名

select name as 姓名,sal+ifnull(bonus,0) as 總薪資
from emp
where sal+ifnull(bonus,0)>3500;

另外as可以省略

select name 姓名,sal+ifnull(bonus,0) 總薪資
from emp
where sal+ifnull(bonus,0)>3500;