一、數(shù)據(jù)庫(kù)使用流程
- 用戶在客戶端輸入SQL語(yǔ)句
- 客戶端會(huì)把SQL通過(guò)網(wǎng)絡(luò)發(fā)送給服務(wù)器
- 服務(wù)器會(huì)執(zhí)行這個(gè)SQL,把結(jié)果返回給客戶端
- 客戶端接收到結(jié)果后,顯示到界面上
二、數(shù)據(jù)庫(kù)的操作
1.創(chuàng)建數(shù)據(jù)庫(kù)
1.1 語(yǔ)法
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
1.2 解析
-
已經(jīng)有了數(shù)據(jù)庫(kù),為何還要?jiǎng)?chuàng)建
- 計(jì)算機(jī)中,不同的詞有不同的含義,如一門(mén)學(xué)科、一類(lèi)軟件、某個(gè)具體的數(shù)據(jù)庫(kù)軟件、某個(gè)部署了數(shù)據(jù)庫(kù)的服務(wù)器的主機(jī)、某個(gè)具體的正在運(yùn)行的數(shù)據(jù)庫(kù)服務(wù)器程序、一個(gè)數(shù)據(jù)庫(kù)集合……
- 我們現(xiàn)在有的準(zhǔn)確的說(shuō)是 數(shù)據(jù)庫(kù)服務(wù)器 ,在這個(gè)數(shù)據(jù)庫(kù)服務(wù)器上,可以根據(jù)邏輯劃分出多個(gè)不同的數(shù)據(jù)集合,每個(gè)數(shù)據(jù)集合就稱為是一個(gè)‘?dāng)?shù)據(jù)庫(kù)’,我們要?jiǎng)?chuàng)建的就是一個(gè) 數(shù)據(jù)集合
-
基礎(chǔ)語(yǔ)法
- create ,database……相當(dāng)于關(guān)鍵字,即無(wú)法充當(dāng)變量名
- SQL的關(guān)鍵字是不區(qū)分大小寫(xiě)的
- 創(chuàng)建的數(shù)據(jù)庫(kù)的名字不能重復(fù)(可以通過(guò)if not exists 來(lái)判斷)
- 單詞之間至少有一個(gè)空格,不能沒(méi)有
- 在命令行客戶端中輸入的SQL語(yǔ)句必須以 ;(英文) 作為結(jié)尾
-
MYSQL的效率問(wèn)題
- (0.01 sec):sec是second(秒)的意思,0.01s即10毫秒,0.00sec 小于10毫秒。數(shù)據(jù)庫(kù)的很多操作,都是并不高效的
-
說(shuō)明
- [] 是可選項(xiàng)
CHARACTER SET: 指定數(shù)據(jù)庫(kù)采用的字符集
COLLATE: 指定數(shù)據(jù)庫(kù)字符集的校驗(yàn)規(guī)則
- [] 是可選項(xiàng)
1.3 使用
創(chuàng)建名為test 的數(shù)據(jù)庫(kù)
當(dāng)我們創(chuàng)建數(shù)據(jù)庫(kù)沒(méi)有指定字符集和校驗(yàn)規(guī)則時(shí),系統(tǒng)使用默認(rèn)字符集:utf8,校驗(yàn)規(guī)則時(shí):utf8_general_ci
create database test;
如果系統(tǒng)沒(méi)有test數(shù)據(jù)庫(kù),則創(chuàng)建一個(gè)名為test的數(shù)據(jù)庫(kù),有則不創(chuàng)建
如果是單行SQL沒(méi)有什么問(wèn)題,但是如果是批量執(zhí)行SQL(把很多SQL寫(xiě)到一個(gè)文件中),如果中間某個(gè)SQL報(bào)錯(cuò),就會(huì)執(zhí)行停止
create database if not exists test;
如果系統(tǒng)沒(méi)有test數(shù)據(jù)庫(kù),則創(chuàng)建一個(gè)使用utf8mb4字符集的名為test的數(shù)據(jù)庫(kù),有則不創(chuàng)建
如果是單行SQL沒(méi)有什么問(wèn)題,但是如果
說(shuō)明:MySQL的utf8編碼不是真正的utf8,沒(méi)有包含某些復(fù)雜的中文字符。MySQL真正的utf8是使用utf8mb4,建議大家都使用utf8mb4
create database if not exists test character set utf8mb4;
# 或
create database if not exists test charset utf8mb4;
-
字符集
-
mysql的字符集
- mysql 默認(rèn)字符集是拉丁文(沒(méi)法表示中文的),所以手動(dòng)設(shè)定一個(gè)字符集是十分關(guān)鍵的,后續(xù)如果要插入一些中文,如果不是utf8/gbk之類(lèi)的中文就會(huì)出現(xiàn)亂碼
-
字符集:針對(duì)漢字進(jìn)行編碼
- VS 使用的編碼方式是跟隨系統(tǒng),Windows 系統(tǒng)編碼就是gbk。java 的字符集是在編譯運(yùn)行的時(shí)候,通過(guò)命令行參數(shù)顯示指定的,一般默認(rèn)都是utf8
- 英文字母在計(jì)算機(jī)中通過(guò)ASCII表示,ASCII使用數(shù)字表示字符,且只能表示英文字母和標(biāo)點(diǎn)符號(hào)以及阿拉伯?dāng)?shù)字。漢字要表示的內(nèi)容特別多,但我們依舊是采用ASCII的編寫(xiě)思路,搞一個(gè)更大的表,來(lái)表示漢字。對(duì)于中文來(lái)說(shuō),最常見(jiàn)的表示方式是gbk和utf8
- gbk:使用兩個(gè)字節(jié),表示一個(gè)漢字。????utf8:使用三個(gè)字節(jié),來(lái)表示一個(gè)漢字(更加主流,除了漢字之外,各種其他國(guó)家的語(yǔ)言文字符號(hào)都能表示)。????utf8mb4:是完整版utf8,MySQL的utf8是殘缺的,缺少了一些emoji表情
-
mysql的字符集
2.顯示數(shù)據(jù)庫(kù)
因?yàn)轱@示的數(shù)據(jù)庫(kù)可能有多個(gè),所以要加后綴s
系統(tǒng)自帶的數(shù)據(jù)庫(kù),如information_schema、mysql、performance_schema、sys,不要亂改
cmd 上允許把一個(gè)SQL分成多行來(lái)寫(xiě),如果沒(méi)有;這表示換行,而不是“確認(rèn)執(zhí)行”
show databases;
3.使用數(shù)據(jù)庫(kù)
后續(xù)操作的大前提(一旦選中了某個(gè)指定的數(shù)據(jù)庫(kù),后續(xù)操作就都是針對(duì)該數(shù)據(jù)庫(kù)展開(kāi)了)
use 數(shù)據(jù)庫(kù)名
4.刪除數(shù)據(jù)庫(kù)
注意,一旦刪掉數(shù)據(jù)庫(kù),里面的數(shù)據(jù)就都沒(méi)有了,很難恢復(fù)
DROP DATABASE [IF EXISTS] db_name;
- 如何避免刪除數(shù)據(jù)庫(kù)
- 權(quán)限,不同的用戶,能進(jìn)行的操作是不一樣的
- 備份,一旦不小心誤刪除了某些重要數(shù)據(jù),可以通過(guò)之前的備份數(shù)據(jù),恢復(fù)回來(lái)
- 檢查,在執(zhí)行某些重要操作的時(shí)候,拉上其他人幫忙一起檢查
三、常用數(shù)據(jù)類(lèi)型
3.1 數(shù)值類(lèi)型
數(shù)值類(lèi)型可以指定為無(wú)符號(hào)(unsigned),表示不取負(fù)數(shù)。
DECIMAL能夠精確表示小數(shù),但是float和double是不行的,但是DECIMAL存儲(chǔ)空間占用的更多,計(jì)算速度也更慢
數(shù)據(jù)類(lèi)型 | 大小 | 說(shuō)明 | 對(duì)應(yīng)Java類(lèi)型 | 對(duì)應(yīng)C類(lèi)型 |
BIT[ (M) ] | M指定位數(shù),默認(rèn)為1 | 二進(jìn)制數(shù),M范圍從1到64,存儲(chǔ)數(shù)值范圍從0到2^M-1 | 常用Boolean對(duì)應(yīng)BIT,此時(shí)默認(rèn)是1位,即只能存0和1 | char[] |
TINYINT | 1字節(jié) | Byte | signed char | |
SMALLINT | 2字節(jié) | Short | short int | |
INT | 4字節(jié) | Integer | int | |
BIGINT | 8字節(jié) | Long | long long int | |
FLOAT(M, D) | 4字節(jié) | 單精度,M指定長(zhǎng)度(有效數(shù)字的長(zhǎng)度),D是小數(shù)點(diǎn)后的位數(shù)。會(huì)發(fā)生精度丟失 | Float | float |
DOUBLE(M,D) | 8字節(jié) | Double | double | |
DECIMAL(M,D) | M/D最大值+2 | 雙精度,M指定長(zhǎng)度,D表示小數(shù)點(diǎn)位數(shù)。精確數(shù)值 | BigDecimal | char[] |
NUMERIC(M, D) | M/D最大值+2 | 和DECIMAL一樣 | BigDecimal | char[] |
3.2 字符串類(lèi)型
數(shù)據(jù)類(lèi)型 | 大小 | 說(shuō)明 | 對(duì)應(yīng)Java類(lèi)型 | 對(duì)應(yīng)C類(lèi)型 |
VARCHAR (SIZE) | 0-65,535字節(jié) | 可變長(zhǎng)度字符串,SIZE表示最大長(zhǎng)度,單位是字符,不是字節(jié),即varchar(10)就表示最多十個(gè)字 | String | char[] |
TEXT | 0-65,535字節(jié) | 長(zhǎng)文本數(shù)據(jù) | String | char[] |
MEDIUMTEXT | 0-16 777 215字節(jié) | 中等長(zhǎng)度文本數(shù)據(jù) | String | char[] |
BLOB | 0-65,535字節(jié) | 二進(jìn)制形式的長(zhǎng)文本數(shù)據(jù) | byte[] | char[] |
3.3 日期類(lèi)型
數(shù)據(jù)類(lèi)型 | 大小 | 說(shuō)明 | 對(duì)應(yīng)Java類(lèi)型 | 對(duì)應(yīng)C類(lèi)型 |
DATETIME | 8字節(jié) | 范圍從1000到9999年,不會(huì)進(jìn)行時(shí)區(qū)的檢索及轉(zhuǎn)換 | java.util.Date、java.sql.Timestamp | MYSQL_TIME |
TIMESTAMP | 4字節(jié) | 時(shí)間戳,范圍從1970到2038年,自動(dòng)檢索當(dāng)前時(shí)區(qū)并進(jìn)行轉(zhuǎn)換 | java.util.Date、java.sql.Timestamp | MYSQL_TIME |
四、數(shù)據(jù)表操作
關(guān)系型數(shù)據(jù)庫(kù)中,數(shù)據(jù)是以“表”的方式來(lái)進(jìn)行組織的,每個(gè)數(shù)據(jù)庫(kù)中,里面就可以有很多個(gè)數(shù)據(jù)表,每個(gè)表可以有很多行,每一行又可以有很多個(gè)列(字段)
所有的和表相關(guān)的操作,都需要選中數(shù)據(jù)庫(kù)再進(jìn)行
1.創(chuàng)建表
CREATE TABLE table_name (
field1 datatype, -- field 類(lèi)型 datatyoe 結(jié)構(gòu)
field2 datatype,
field3 datatype
);
2.查看當(dāng)前數(shù)據(jù)庫(kù)中的所有表
show tables;
3.查看指定表的結(jié)構(gòu)
desc 表名 -- desc == describe(描述)
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-468611.html
4.刪除表文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-468611.html
drop table 表名;
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
到了這里,關(guān)于MYSQL數(shù)據(jù)庫(kù)基礎(chǔ)(數(shù)據(jù)庫(kù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!