mysql innodb臨時表btmp1檔案太大
技術標籤:Java Web
1.資料庫概述
1.1 什麼是資料庫
所謂的資料庫就是指儲存和管理資料的倉庫
擴充套件內容1:資料庫有哪些分類?(瞭解)
早期: 層次式資料庫、網路型資料庫
現在:關係型資料庫、非關係型資料庫
1.2 什麼是關係型資料庫
底層以二維表的形式儲存資料的庫就是關係型資料庫
stu-學生表
學生編號 | 姓名 | 年齡 |
---|---|---|
1001 | 劉沛霞 | 35 |
1002 | 陳子樞 | 18 |
擴充套件內容2:常見的關係型資料庫有哪些?(瞭解)
sql Server:微軟提供,收費,適用於一些中型或大型的專案中,在java中的使用佔比不高(.net中使用的較多)
Oracle:甲骨文公司提供,收費,適用於一些大型或者超大型的專案中,在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;