數(shù)據(jù)庫操作過程:
1.用戶在客戶端輸入 SQL
2.客戶端會把 SQL 通過網(wǎng)絡(luò)發(fā)送給服務(wù)器
3.服務(wù)器執(zhí)行這個(gè) SQL,把結(jié)果返回給客戶端
4.客戶端收到結(jié)果,顯示到界面上
數(shù)據(jù)庫的操作
這里的數(shù)據(jù)庫不是代表一個(gè)軟件,而是代表一個(gè)數(shù)據(jù)集合。
顯示當(dāng)前的數(shù)據(jù)庫
show databases;
創(chuàng)建數(shù)據(jù)庫
語法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
- 大寫的表示關(guān)鍵字
- [] 是可選項(xiàng)
- CHARACTER SET: 指定數(shù)據(jù)庫采用的字符集
- COLLATE: 指定數(shù)據(jù)庫字符集的校驗(yàn)規(guī)則
create database 數(shù)據(jù)庫名
CREATE DATABASE 數(shù)據(jù)庫名
注意:
1.create,database … 相當(dāng)于"關(guān)鍵字
2.SQL 的關(guān)鍵字 不區(qū)分大小寫的
3.創(chuàng)建的數(shù)據(jù)庫的名字,可以隨便起,但是不能重復(fù)!!
4.單詞之間至少有一個(gè)空格.也可以是多個(gè)空格,不能沒有!!
5.在 命令行 中輸入的 sql 必須以;作為結(jié)尾!!
創(chuàng)建名稱為my_database的數(shù)據(jù)庫
create database my_database;
-- 數(shù)據(jù)庫已經(jīng)存在,再創(chuàng)建就會報(bào)錯(cuò)
-- 如果一條一條執(zhí)行 SQL,不報(bào)錯(cuò)影響不大。如果是批量執(zhí)行 SQL(把很多 SQL 寫到一個(gè) 文件 中)如果中間某個(gè) SQL 報(bào)錯(cuò), 就會執(zhí)行停止。
-- 使用了 IF NOT EXISTS 就不會報(bào)錯(cuò)了!!
create database if not exists my_database;
-- 創(chuàng)建數(shù)據(jù)庫同時(shí)指定數(shù)據(jù)庫的 字符集utf8
create database my_database character set utf8;-- 一般形式
create database my_database charset utf8;-- 簡寫形式
英文字母,是如何在計(jì)算機(jī)中表示的?
ascii :使用 數(shù)字 表示字符。
ascii 中,只能表示 英文字母 和 標(biāo)點(diǎn)符號,以及阿拉伯?dāng)?shù)字。漢字要表示的內(nèi)容特別多,y有幾萬個(gè),很明顯ascii是不夠用的。
其他的字符集思路是一致的,可以搞一個(gè)更大的表,來表示漢字。演化出了很多套這樣的表示方式~~ (不像 ascii只有一套)。對于中文來說,當(dāng)前最常見的表示方式,有兩種:
-
gbk:使用兩個(gè)字節(jié),表示一個(gè)漢字的
-
utf8:使用三個(gè)字節(jié),表示一個(gè)漢字的
在這兩個(gè)表上,同一個(gè)漢字,表示的數(shù)字不同。同一個(gè)數(shù)字,對應(yīng)漢字也不同。VS 使用的編碼方式是跟隨系統(tǒng)windows 簡體中文版,系統(tǒng)編碼就是 gbk。目前更主流的還是 utf8,這個(gè)東西能表示的內(nèi)容特別多除了漢字之外,各種其他國家的語言文字符號都能表示。java 的字符集是在編譯運(yùn)行的時(shí)候,通過命令行參數(shù)顯式指定的.一般默認(rèn)都是 utf8 。
mysql 默認(rèn)字符集是拉丁文(沒法表示中文的)。手動設(shè)定一個(gè)字符集是非常關(guān)鍵的,后續(xù)如果要插入一些中文,如果不是 utf8 / gbk 之類的中文就會亂碼。
mysgl 的 utf8 是殘缺的.(殘缺了一些 emoji 表情),完整版utf8就是:utf8mb4,一般情況下兩種字符集是都可以設(shè)置的。
使用數(shù)據(jù)庫
使用my_database數(shù)據(jù)庫
use my_database;
1.4 刪除數(shù)據(jù)庫
DROP DATABASE [IF EXISTS] db_name;
drop database 數(shù)據(jù)庫名;
-- 刪除 刪除my_database數(shù)據(jù)庫:
drop database my_database;
-- 如果存在 my_database數(shù)據(jù)庫,刪除my_database數(shù)據(jù)庫:
drop database if exists my_database;
刪庫操作時(shí)非常危險(xiǎn)的,一旦刪掉數(shù)據(jù)庫,數(shù)據(jù)庫中的所有數(shù)據(jù)就沒了.很難恢復(fù)。
如何針對上述危險(xiǎn)操作,防患于未然:
1.權(quán)限不同的用戶,能進(jìn)行的操作是不一樣的(有效避免失誤)
2.備份 。一旦不小心誤刪除了數(shù)據(jù), 通過之前的備份數(shù)據(jù),恢復(fù)回來
3.重要操作的時(shí)候,拉上其他人幫忙一起檢查。
2. 常用數(shù)據(jù)類型
數(shù)字:
數(shù)據(jù)類型 | 大小 | 說明 | 對應(yīng)java類型 |
---|---|---|---|
BIT[ (M) ] | M指定位 數(shù),默認(rèn) 為1 | 二進(jìn)制數(shù),M范圍從1到64, 存儲數(shù)值范圍從0到2^M-1 | 常用Boolean對應(yīng)BIT,此時(shí) 默認(rèn)是1位,即只能存0和1 |
TINYINT | 1字節(jié) | Byte | |
SMALLINT | 2字節(jié) | Short | |
INT | 4字節(jié) | Integer | |
BIGINT | 8字節(jié) | Long | |
FLOAT(M, D) | 4字節(jié) | 單精度,M 是有效數(shù)字的長度,D是小數(shù)點(diǎn)后的位數(shù)。會發(fā)生精度丟失 | Float |
DOUBLE(M, D) | 8字節(jié) | Double | |
DECIMAL(M, D) | M/D最大 值+2 | 雙精度,M指定長度,D表示 小數(shù)點(diǎn)位數(shù)。精確數(shù)值 | BigDecimal |
NUMERIC(M, D) | M/D最大 值+2 | 和DECIMAL一樣 | BigDecimal |
DECIMAL 能夠精確表示小數(shù)float 和 double 是不能精確表示小數(shù)的!!
0.1 + 0.2 != 0.3
因此,DECIMAL 這個(gè)類型就是為了解決上述問題的。雖然能精確存儲,精確計(jì)算了,但是存儲空間占用的更多計(jì)算速度也是更慢的。
字符串:
數(shù)據(jù)類型 | 大小 | 說明 | 對應(yīng)java類型 |
---|---|---|---|
VARCHAR (SIZE) | 0-65,535字節(jié) | 可變長度字符串 | String |
TEXT | 0-65,535字節(jié) | 長文本數(shù)據(jù) | String |
MEDIUMTEXT | 0-16 777 215字節(jié) | 中等長度文本數(shù)據(jù) | String |
BLOB | 0-65,535字節(jié) | 二進(jìn)制形式的長文本數(shù)據(jù) | byte[] |
varchar(SIZE) 屬于可變長的字符串SIZE 表示最大長度.單位是 字符(不是字節(jié)!!)
varchar(10) => 最多十個(gè)字.哪怕是漢字,也是十個(gè)。
日期:
數(shù)據(jù)類型 | 大 小 | 說明 | 對應(yīng)java類型 |
---|---|---|---|
DATETIME | 8 字 節(jié) | 范圍從1000到9999年,不會進(jìn)行時(shí)區(qū)的 檢索及轉(zhuǎn)換。 | java.util.Date、 java.sql.Timestamp |
TIMESTAMP | 4 字 節(jié) | 范圍從1970到2038年,自動檢索當(dāng)前時(shí) 區(qū)并進(jìn)行轉(zhuǎn)換。 | java.util.Date、 java.sql.Timestamp |
TIMESTAMP 時(shí)間戳:計(jì)算機(jī)表示時(shí)間的一種經(jīng)典方式以1970年1月1日0時(shí)0分0秒為基準(zhǔn),計(jì)算當(dāng)前時(shí)刻和基準(zhǔn)時(shí)刻的秒數(shù)/毫秒數(shù) 之差。范圍從1970到2038年,這個(gè)類型最大的問題是 4 個(gè)字節(jié),表示的范圍太小了。
小結(jié):
上述這么多類型,不必全都掌握,大概熟悉幾個(gè)常用的就可以了int, bigint, varchar, double, decimal, datetime。
數(shù)據(jù)表操作
關(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)是以"表”的方式來進(jìn)行組織的(類似于 excel)。每個(gè)數(shù)據(jù)庫中,里面就可以有很多個(gè)數(shù)據(jù)表,每個(gè)表可以有很多行,每一行又可以有很多個(gè)列(字段)。
所有的和表相關(guān)的操作,都是需要選中數(shù)據(jù)庫再進(jìn)行: use my_database;
3.1 創(chuàng)建表
create table 表名(
列名 類型,
列名 類型,
列名 類型......
);
創(chuàng)建表的時(shí)候,就需要先把表的類型確定好,后續(xù)插入的數(shù)據(jù)也要遵守當(dāng)前的這個(gè)類型。
-- 創(chuàng)建學(xué)生表,有id和name兩個(gè)字段
create table student(
id int,
name varchar(20) comment '姓名'
);
comment 是注釋屬于是在創(chuàng)建表的時(shí)候的一種專屬注釋
SQL 中如果想用注釋,可以使用 # 或者 –
3.2 查看數(shù)據(jù)庫中的所有表
show tables;
3.3 查看指定表的表結(jié)構(gòu)
desc 表名;
desc => describe(描述)
-- 查看student表的結(jié)構(gòu)
desc student;
int(11): 表示的是該列在打印的時(shí)候,顯示的時(shí)候,最多占11 個(gè)字符這么寬和存儲范圍是無關(guān)的。
查看的表結(jié)構(gòu)中的含義:
Field:字段.表一行里有幾列.
Type:每一列的類型
Null:該列是否允許為空yes 就是允許為空(不填)
Key: 索引類型
Default:默認(rèn)值.
Extra:額外補(bǔ)充信息
3.4 刪除表
語法格式:文章來源:http://www.zghlxwxcb.cn/news/detail-658218.html
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
-- 刪除 student 表
drop table student;
-- 如果存在 stu_test 表,則刪除 stu_test 表
drop table if exists student;
上述操作是數(shù)據(jù)庫和數(shù)據(jù)表的最基礎(chǔ)的操作文章來源地址http://www.zghlxwxcb.cn/news/detail-658218.html
到了這里,關(guān)于1.MySQL數(shù)據(jù)庫的基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!