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