目錄
一、SQL 基礎知識
(一)SQL 通用語法
(二)SQL 分類
二、DDL ——?數據庫操作
1、查詢所有數據庫
2、查詢當前數據庫
3、創建數據庫
4、刪除數據庫
5、切換數據庫
三、DDL —— 表操作
(一)查詢創建
1、查詢當前數據庫所有表
2、查看指定表結構
3、查詢指定表的建表語句
4、創建表結構
(二)數據類型
1、數值類型
2、字符串類型
3、日期時間類型
(三)修改
1、添加字段
2、修改數據類型
3、修改字段名和字段類型
4、刪除字段
5、修改表名
(四)刪除
1、刪除表?
2、刪除指定表,并重新創建表
????????SQL 全稱 Structured Query Language,結構化查詢語言。操作關系型數據庫的編程語言,定義了一套操作關系型數據庫統一標準 。
一、SQL 基礎知識
(一)SQL 通用語法
????????在學習具體的SQL語句之前,先來了解一下SQL語言的通用語法。
① SQL語句可以單行或多行書寫,以分號結尾。
② SQL語句可以使用空格/縮進來增強語句的可讀性。
③ MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。
④ 注釋:單行注釋為?“-- 注釋內容”?或 “# 注釋內容”;多行注釋為 “/* 注釋內容 */”
(二)SQL 分類
????????SQL語言,根據其功能,主要分為四類:DDL、DML、DQL、DCL。
????????1、DDL:全稱為 Data Definition Language,即數據定義語言。用來定義數據庫對象(數據庫、表、字段)
? ? ? ? 2、DML:全稱為 Data Manipulation Language,即數據操作語言。用來對數據庫表中的數據進行增刪改。
? ? ? ? 3、DQL:全稱為Data Query Language,即數據查詢語言。用來查詢數據庫中表的記錄。
? ? ? ? 4、DCL:全稱為Data Control Language,即數據控制語言。用來創建數據庫用戶、控制數據庫的訪問權限。
二、DDL ——?數據庫操作
1、查詢所有數據庫
show databases;
2、查詢當前數據庫
select datebase();
3、創建數據庫
create database [ if not exists ] 數據庫名 [ default charset 字符集 ] [ collate 排序規則 ] ;
? ? ? ? 這條指令的基本形式是 create database 數據庫名,方括號中的部分可加可不加。
? ? ? ? if not exists:同一個數據庫服務器中,不能創建兩個名稱相同的數據庫,否則會報錯。可以通過 if not exists 參數來解決這個問題,數據庫不存在,則創建該數據庫,如果存在,則不創建。
? ? ? ? default charest 字符集:如果不指定,則使用默認的字符集utf8mb4,建議使用這個。
create database my123;
4、刪除數據庫
drop database [ if exists ] 數據庫名 ;
????????如果刪除一個不存在的數據庫,將會報錯。此時,可以加上參數 if exists ,如果數據庫存在,再執行刪除,否則不執行刪除。
drop database my123;
5、切換數據庫
use 數據庫名 ;
????????我們要操作某一個數據庫下的表時,就需要通過該指令,切換到對應的數據庫下,否則是不能操作的。 比如,切換到itcast數據庫,執行如下SQL:
use itcast;
三、DDL —— 表操作
(一)查詢創建
1、查詢當前數據庫所有表
show tables;
????????比如,我們可以切換到 sys 這個系統數據庫,并查看系統數據庫中的所有表結構。
use sys;
show tables;
2、查看指定表結構
desc 表名;
????????通過這條指令,我們可以查看到指定表的字段,字段的類型、是否可以為NULL,是否存在默認值等信息。
3、查詢指定表的建表語句
show create table 表名 ;
????????通過這條指令,主要是用來查看建表語句的,而有部分參數我們在創建表的時候,并未指定也會查詢到,因為這部分是數據庫的默認值,如:存儲引擎、字符集等。
4、創建表結構
CREATE TABLE 表名(
????字段1 字段1類型 [COMMENT 字段1注釋 ],
????字段2 字段2類型 [COMMENT 字段2注釋 ],
????字段3 字段3類型 [COMMENT 字段3注釋 ],
????......
????字段n 字段n類型 [COMMENT 字段n注釋 ]?
) [ COMMENT 表注釋 ] ;?
????????注意:[...] 內為可選參數,最后一個字段后面沒有逗號,因為這就是一條SQL語句,一條SQL語句只有一個逗號。
????????比如,我們創建一張表 tb_user,對應的結構如下,那么建表語句為:
create table tb_user(id int comment '編號',name varchar(50) comment '姓名',age int comment '年齡',gender varchar(1) comment '性別'
) comment '用戶表';
(二)數據類型
????????在上述的建表語句中,我們在指定字段的數據類型時,用到了int,varchar,那么在MySQL中除了以上的數據類型,還有哪些常見的數據類型呢?
????????接下來,我們詳細介紹一下MySQL的數據類型。 MySQL中的數據類型有很多,主要分為三類:數值類型、字符串類型、日期時間類型。
1、數值類型
? ? ? ? 對表格進行歸納,前 5 個數據類型 tinyint、smallint、mediumint、int/integer、bigint 表示整型數據,僅僅是取值范圍不同。接下來?2 個數據類型 float、double 表示浮點型數據。
????????最后一個 decimal 是精確的浮點型數據,其中的?M 表示小數的位數有多少位,D 表示小數點后面有多少位。例如,decimal(10,2),即小數的整體位數是 10?位,小數點后面有 2?位。
????????同時,float 與 double 也可以對位數進行規定,如double(4,1),但是我們常用的精確的浮點型數據類型還是decimal。
? ? ? ? 同時如果希望是無符號數,則可在數據類型后面加上 unsigned,如 age tinyint unsigned。
2、字符串類型
????????char 與 varchar 都可以描述字符串。char 表示定長字符串,指定長度多長,就占用多少個字符,和字段值的長度無關,例如char(10)。而?varchar 表示變長字符串,指定的長度為最大占用長度,例如varchar(10)。
? ? ? ? char 中未占用的字符,會用空格來補位;varchar 則是存多少個字符就占用多少個空間。即varchar在規定具體長度的同時,還需要根據當前字符串修改長度,所以相對而言char的性能會更高一些,用空間換時間。
? ? ? ? 還有兩個就是blob與text,只是前綴的不同導致長度的不同,其前綴為tiny、無、medium、long。blob中存儲的文本形式是二進制形式的、而?text?中的就是文本。
3、日期時間類型
--例如:
-- 1). 生日字段 birthdaybirthday date-- 2). 創建時間 createtimecreatetime datetime
(三)修改
1、添加字段
alter table?表名 add?字段名 類型 [ comment?注釋 ] [ 約束 ];
? ? ? ?其中 “alter table 表名” 是選中具體的表,“add 字段名 類型” 是具體的操作,“comment 注釋” 是給代碼添加注釋。代碼中方括號的部分可以省略。
? ? ? ? 添加字段的意思,就是在一張表中,再加一列。如為 emp 表增加一個新的字段”昵稱”為 nickname,類型為varchar(20)。代碼與執行結果如下:
alter table emp add nickname varchar(20) comment '昵稱';
2、修改數據類型
alter table 表名 modify 字段名 新數據類型;?
3、修改字段名和字段類型
alter table 表名 change 舊字段名 新字段名 類型 (長度) [ comment 注釋 ] [ 約束 ];?
????????將 emp 表的 nickname 字段修改為 username,類型為varchar(30)。代碼與執行結果如下:
alter table emp change nickname username varchar(30) comment '昵稱';
4、刪除字段
alter table?表名 drop?字段名;
????????將 emp 表的字段 username 刪除,代碼與執行結果如下:
alter table emp drop username;
5、修改表名
alter table?表名 rename to?新表名;
????????將emp表的表名修改為 employee,具體代碼如下:
alter table emp rename to employee;
(四)刪除
1、刪除表?
drop table?[ if exists ] 表名;
????????可選項 if exists代表,只有表名存在時才會刪除該表,表名不存在,則不執行刪除操作(如果不加該參數項,刪除一張不存在的表,執行將會報錯)。
????????如果tb_user表存在,則刪除tb_user表,具體代碼如下:
drop table?if exists tb_user;
2、刪除指定表,并重新創建表
truncate table 表名;
????????注意: 在刪除表的時候,表中的全部數據也都會被刪除;這個操作就是將這張表進行重置。