MySQL 詳解教程4 - SQL 基本操作
SQL基本操作
基本操作:CRUD
,即增刪改查。
根據操作對象的不同,咱們可以將SQL的基本操作分爲三類,分別爲:庫操作、表(字段)操作和數據庫操作。
庫操作
1.新增數據庫
基本語法:create database
+ 數據庫名稱 + 【庫選項】;
其中,庫選項是用來約束數據庫的,爲可選項(有默認值),共有兩種,分別爲:
- 字符串設定:
charset/ character set
+ 具體字符集,用來表示數據的存儲的編碼格式,常用的字符集包括GBK
和UTF8
等。 - 校對集設定:
collate
+ 具體校對集,表示數據比較的規則,其依賴字符集。
示例:create database TBL_ERROR_CODE character utf8
;
其中數據庫的名字不能用關鍵字(已經被佔用的字符,例如 update
和 insert
等)或者保留字(將來可能會用的,例如 access
和 cast
等)。
如果非要使用數據庫的關鍵字或者保留字作爲數據庫名稱,那麼必須用反引號將其括起來,例如:
create database access charset utf8
;
如果還想使用中文作爲數據庫的名稱,那就得保證數據庫能夠識別中文(強烈建議不要用中文命名數據庫的名稱),例如:
-- 設置中文名稱的方法,其中 gbk 爲當前數據庫的默認字符集
set names gbk;
create database 北京 charset gbk;
2 查詢數據庫
查看全部 --> 基本語法:show databases
;
查看部分(模糊查詢)–> 基本語法:show databases like 'pattern'
;
其中,pattern是匹配模式,有兩種,分別爲:
%
:表示匹配多個字符;_
:表示匹配單個字符。
此外,在匹配含有下劃線_的數據庫名稱的時候,需要在下劃線前面加上反斜線_進行轉義操作。
此外,在匹配含有下劃線_的數據庫名稱的時候,需要在下劃線前面加上反斜線_進行轉義操作。
示例:show databases like 'TBL%'
;表示匹配所有TBL開頭的數據庫。
查看數據庫的創建語句 --> 基本語法:show create database
+ 數據庫名稱;
在這裏,查看的結果有可能與咱們書寫的 SQL 語句不同,這是因爲數據庫在執行 SQL 語句之前會優化 SQL,系統保存的是優化後的結果。
3 更新數據庫
在這裏,需要注意:數據庫的名字不可以修改。
數據庫的修改僅限庫選項,即字符集和校對集(校對集依賴字符集)。
基本語法:alter database
+ 數據庫名稱 + [庫選項];
charset/character set[=]
字符集;
collate[=]
校對集;
示例:alter database TBL_ERROR_CODE charset gbk
;表示修改此數據庫的字符集爲gbk.
4 刪除數據庫
基本語法:drop database
+ 數據庫名稱;
在這裏,需要注意:在刪除數據庫之前,應該先進行備份操作,因爲刪除爲不可逆操作,所以不要隨意刪除數據庫。
表操作
1 新增表
基本語法:
create table [if not exists] + 表名(
字段名稱 數據類型,
……
字段名稱 數據類型 /* 最後後一行,不需要加逗號 */
)[表選項];
其中,if not exists表示
- 如果表名不存在,就執行創建代碼;如果表名存在,則不執行創建代碼。
表選項則是用來控制表的表現形式的,共有三種,分別爲:
- 字符集設定:charset/ character set+ 具體字符集,用來表示數據存儲的編碼格式,常用的字符集包括GBK和UTF8等。
- 校對集設定:collate+ 具體校對集,表示數據比較的規則,其依賴字符集。
- 存儲引擎:engine+具體存儲引擎,默認爲InnoDB,常用的還有MyISAM.
由於任何表都歸屬於某個數據庫,因此在創建表的時候,都必須先指定具體的數據庫。在這裏,指定數據庫的方式有兩種,分別爲:
- 第 1 種:顯式的指定表所屬的數據庫,示例
create table if not exists test.student(
name varchar(10),
age int, /* 整型不需要指定具體的長度 */
grade varchar(10) /* 最後後一行,不需要加逗號 */
)charset utf8;
- 第 2 種:隱式的指定表所屬的數據庫,示例
use test; /* use + 數據庫名稱,表示切換到指定的數據庫,這句命令其實不加分號也可以,但不建議這麼做 */
create table if not exists student(
name varchar(10),
age int, /* 整型不需要指定具體的長度 */
grade varchar(10) /* 最後後一行,不需要加逗號 */
)charset utf8;
2 查詢表
查看全部 --> 基本語法:show tables
;
查看部分(模糊查詢)–> 基本語法:show tables like 'pattern'
;
其中,pattern
是匹配模式,有兩種,分別爲:
%
:表示匹配多個字符;_
:表示匹配單個字符。
此外,在匹配含有下劃線_的表名的時候,需要在下劃線前面加上反斜線_進行轉義操作。
示例:show tables like '%t'
;表示匹配所有以t結尾的表。
查看錶的創建語句 --> 基本語法:show create table
+ 表名;
在這裏,咱們也可以用\g
和\G
代替上述語句中的;
分號,其中\g
等價於分號,\G
則在等價於分號的同時,將查的表結構旋轉90度,變成縱向結構。
查看錶中的字段信息 --> 基本語法:desc/describe/show columns from
+ 表名;
3 更新表
在這裏,需要注意:表的修改,分爲修改表本身和修改表中的字段。
-
第 1 類:修改表本身
- 修改表名,基本語法:
rename table 舊錶名 to 新表名
; - 修改表選項,基本語法:
alter table + 表名 + 表選項[=] + 值
;
- 修改表名,基本語法:
-
第 2 類:修改表中的字段,新增、修改、重命名和刪除
-
新增字段,基本語法:
alter table + 表名 + add + [column] + 字段名 + 數據類型 + [列屬性][位置]
;- 其中,位置表示此字段存儲的位置,分爲
first
(第一個位置)和after + 字段名
(指定的字段後,默認爲最後一個位置). - 示例:
alter table student add column id int first
;
- 其中,位置表示此字段存儲的位置,分爲
-
修改字段,基本語法:
alter table + 表名 + modify + 字段名 + 數據類型 + [列屬性][位置]
;- 其中,位置表示此字段存儲的位置,分爲
first
(第一個位置)和after + 字段名
(指定的字段後,默認爲最後一個位置 - 示例:
alter table student modify name char(10) after id
;
- 其中,位置表示此字段存儲的位置,分爲
-
重命名字段,基本語法:
alter table + 表名 + change + 舊字段名 + 新字段名 + 數據類型 + [列屬性][位置]
;- 其中,位置表示此字段存儲的位置,分爲
first
(第一個位置)和after + 字段名
(指定的字段後,默認爲最後一個位置). - 示例:
alter table student change grade class varchar(10)
;
- 其中,位置表示此字段存儲的位置,分爲
-
刪除字段,基本語法:
alter table + 表名 + drop+ 字段名
;- 示例:
alter table student drop age
; - 注意:如果表中已經存在數據,那麼刪除該字段會清空該字段的所有數據,而且不可逆,慎用。
- 示例:
-
4 刪除表
基本語法:
-- 可以一次刪除多張表
drop table + 表1, 表2 ... ;
在這裏,需要注意:此刪除爲不可逆操作,希望大家謹慎使用。
數據操作
1 新增數據
對於數據的新增操作,有兩種方法。
第 1 種:給全表字段插入數據,不需要指定字段列表,但要求數據的值出現的順序必須與表中的字段出現的順序一致,並且凡是非數值數據,都需要用引號(建議使用單引號)括起來。
基本語法:insert into + 表名 + values(值列表)[,(值列表)]
;
示例:insert into test valus('charies',18,'3.1')
;
第 2 種:給部分字段插入數據,需要選定字段列表,字段列表中字段出現的順序與表中字段的順序無關,但值列表中字段值的順序必須與字段列表中的順序保持一致。
基本語法:insert into + 表名(字段列表) + values(值列表)[,(值列表)
;
示例:insert into test(age,name) valus(18,'guo')
;
2 查詢數據
查看全部 --> 基本語法:select * from + 表名 + [where 條件]
;
示例:select * from test
;
查看部分 --> 基本語法:select + 字段名稱[,字段名稱] + from + 表名 + [where 條件]
;
示例:select name,age,grade from test where age = '18'
;
3 更新數據
基本語法:update + 表名 + set + 字段 = 值 + [where 條件]
;
示例:update test set age = 20 where name = 'guo'
;
在這裏,建議儘量加上where條件,否則的話,操作的就是全表數據。
此外,判斷更新操作是否成功,並不是看 SQL 語句是否執行成功,而是看是否有記錄受到影響,即affected的數量大於1時,纔是真正的更新成功。
4 刪除數據
基本語法:delete from + 表名 + [where 條件]
;
示例:delete from test where grade = '3.1'
;
當然,我們也可以用drop
來實現刪除操作,不過與delete
相比,drop
的威力更強,其在執行刪除操作的時候,不僅會刪除數據,還會刪除定義並釋放存儲空間;而delete
在執行刪除操作的時候,僅會刪除數據,並不會刪除定義和釋放存儲空間。