前言:本文系統梳理MySQL核心操作語句。內容覆蓋建庫建表、結構調整、數據遷移全流程(包含創建/修改/刪除/備份場景)。希望它們能幫你快速解決問題。
庫結構操作
一、庫的創建
一個庫的簡單創建:
create database 庫名;
注意:database是單數,不要寫成databases。?
比如創建一個名為d1的庫:
直接創建:
create database d1;
判斷該庫是否存在,不存在則創建:
create database if not exists d1;
如下:?
除此之外在shell命令行中對應mysql目錄下創建文件夾,同樣相當于創建庫:?
使用show databases;指令同樣能查到:?
這里只是說明庫的本質就是文件夾,但千萬不要以這種方式創建庫。
以下是刪除庫的語句,我們對d2進行刪除:
drop database d2;
最后我們來看庫創建的語法:
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: 指定數據庫字符集的校驗規則
1.編碼與校驗
????????在創建庫時可以在庫名后面指定字符集和校驗集。如果不帶則默認使用配置文件中所設的字符集和校驗集。
字符集,校驗集的關系:
字符集:
-
相當于"字典":定義所有可用字符的集合
-
為每個字符分配唯一的代碼點(Code Point)
-
例如:ASCII字符集包含128個字符,Unicode字符集包含14+萬字符
校驗集:
-
相當于"使用規則":定義字符的比較、排序和匹配規則
-
解決如何對文本數據進行查詢、排序等操作
-
例如:是否區分大小寫、重音符號如何處理。
查看數據庫支持的字符集:
show charset;
查看數據庫支持的校驗集:
show collation;
創建庫后,庫的字符集和校驗集會在文件db.opt中存儲,如下:
utf8_general_ci:utf8格式,不區分大小寫。
utf8_bin:utf8格式,區分大小寫。
通常在查找指定數據或排序時體現出它們的區別。?
創建庫時指明字符集和校驗集的兩種方式:
2.庫的備份和恢復
2.1.備份
????????數據庫通常會帶有備份工具,在shell命令行創建一個目錄,這里命名為MySQL。在MySQL目錄下使用以下指令進行備份:
mysqldump -P3306 -uroot -B 庫名 > 生成備份文件名.sql
- mysqldump:備份指令
- -P3306:指定端口號
- -uroot:指定用什么用戶身份
- -B:填寫-B選項后恢復數據庫時不用先創建該庫。
- >: 重定向
對d1庫在MySQL目錄下進行備份:
事實上它備份的不是數據而是操作,我們可以把d1.sql打開查看。?
2.2.恢復
恢復庫的語句:
source 備份文件的路徑;
二、庫的查改
查看一共有哪些庫:
show databases;
查看某個庫的詳細信息(即創建庫時帶的信息)
show create database 庫名;
修改庫結構:
alter database 庫名 選項(如編碼集,校驗集);
與創建相比只是把create改成了alter。?
表結構操作
進行表操作首先要進入庫,使用use進入庫:
use 庫名;
查看當前所在的庫:?
select database();
三、表的創建
語法:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校驗規則 engine 存儲引擎;
說明:
- field:表示列名。
- datatype:表示列的類型。
- character set:字符集,如果沒有指定字符集,則以所在數據庫的字符集為準。
- collate:校驗規則,如果沒有指定校驗規則,則以所在數據庫的校驗規則為準。
在/var/lib/mysql/d1中新增了對應的兩個文件。
表的備份:
mysqldump -P3306 -uroot 庫名 表名1,表名2,... > 備份的文件;
表的恢復和庫的恢復相同。?
四、表的刪改查
查看表結構
查看庫中有哪些表:
show tables;
查看指定表信息:?
desc 表名;
查看指定表的詳細信息(即創建時的信息):
show create table 表名;
?或:
show create table 表名 \G
修改表結構
重命名:
alter table 原表名 rename to 新表名;
這里to可以省略。
新增列:
alter table 表名 add 新增列的屬性(列名,類型,...) after 列1;
?after選項可不加,表示把新增列放在列1后面。
改列屬性:
alter table 表名 modify 列名 列的其他屬性(類型,...);
注意它是把原來的列信息丟棄,新增列信息。而不是做局部修改,所以需要把列信息寫全。?
改列名:
alter table 表名 change 原列名 新的列屬性(新列名,類型,...);
刪除列:
alter table 表名 drop 列名;
刪除表:?
drop table 表名;