文章目錄
- 一、關于SQL
- 1.1、SQL概述
- 1.2、SQL分類
- 二、數據庫操作
- 2.1、查看數據庫
- 2.2、切換數據庫
- 2.3、查詢當前使用的數據庫
- 2.4、創建數據庫
- 2.5、查看數據庫創建信息
- 2.6、修改數據庫
- 2.7、刪除數據庫
- 三、表的操作
- 3.1、數據類型
- 3.1.1、數值類型
- 3.1.2、字符串類型
- 3.1.3、日期時間類型
- 3.2、創建表
- 3.3、查看表
- 3.4、修改表
- 3.5、刪除表
一、關于SQL
1.1、SQL概述
SQL:Structured Query Language(結構化查詢語言),客戶端使用SQL來操作數據庫,可以應用到所有關系型數據庫中。
SQL語言標準由ISO(國際標準化組織)發布,ISO定義了很多SQL標準(例如SQL99)對RDBMS進行統一的操作,相同的語句可以操作Oracle,MySQL。各個數據庫廠商有自己的標準,類似于方言,MySQL中的limit。
SQL語法:
- SQL語句可以在單行或多行書寫,以分號結尾;
- 可使用空格和縮進來增強語句的可讀性;
- MySQL不區分大小寫,建議大寫。
經驗:通常執行對數據庫的“增刪改查”,簡稱C(Create)R(Read)U(Update)D(Delete)。
1.2、SQL分類
DDL(Data Definition Language)數據定義語言:創建、刪除、修改庫與表結構;
DML(Data Manipulation Language)數據操作語言:增、刪、改表記錄;
TPL(Transaction Process Language)事務處理語言:用于對事務進行處理;
DQL(Data Query Language)數據查詢語言:用來查詢記錄;
DCL(Data Control Language)數據控制語言:用來定義訪問權限和安全級別。
二、數據庫操作
2.1、查看數據庫
# 查看所有的數據庫
mysql> SHOW DATABASES;
數據庫名稱 | 描述 |
---|---|
information_schema | 信息數據庫,其中保存著關于所有數據庫的信息(元數據),元數據是關于數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。 |
mysql | 核心數據庫,主要負責存儲數據庫的用戶、權限設置、關鍵字等,以及需要使用的控制和管理信息,不可以刪除。 |
performance_schema | 性能優化的數據庫,MySQL 5.5版本中新增的一個性能優化的引擎。 |
sys | 系統數據庫,MySQL5.7版本中新增的可以快速的了解元數據信息的系統庫,便于發現數據庫的多樣信息,解決性能瓶頸問題。 |
2.2、切換數據庫
# 切換到想要操作的數據庫
mysql> USE sys;
2.3、查詢當前使用的數據庫
mysql> select database();
2.4、創建數據庫
#創建名字為mydb1數據庫
mysql> CREATE DATABASE mydb1;
#創建數據庫并設置編碼格式為utf8
mysql> CREATE DATABASE mydb2 CHARACTER SET utf8;
#如果mydb3數據庫不存在,則創建;如果存在,則不創建。
mysql> CREATE DATABASE IF NOT EXISTS mydb3;
2.5、查看數據庫創建信息
mysql> SHOW CREATE DATABASE mydb1;
2.6、修改數據庫
#修改數據庫的字符集
mysql> ALTER DATABASE mydb1 CHARACTER SET gbk;
2.7、刪除數據庫
#刪除數據庫mydb1
mysql> DROP DATABASE mydb1;
#如果存在數據庫mydb2就刪除
mysql> DROP DATABASE IF EXISTS mydb2;
三、表的操作
3.1、數據類型
MySQL支持多種類型,大致可以分為三類:
- 數值;
- 字符串(字符)類型;
- 日期時間。
數據類型對于我們約束數據的類型有很大的幫助。
3.1.1、數值類型
類型 | 大小 | 范圍(有符號) | 范圍(無符號) | 用途 |
---|---|---|---|---|
INT | 4 字節 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整數值 |
DOUBLE | 8 字節 | (-1.797E+308,-2.22E-308) | (0,2.22E-308,1.797E+308) | 雙精度浮點數值 |
DOUBLE(M,D) | 8個字節,M表示長度,D表示小數位數 | 同上,受M和D的約束 DOUBLE(5,2) -999.99-999.99 | 同上,受M和D的約束 | 雙精度浮點數值 |
DECIMAL(M,D) | DECIMAL(M,D) | 依賴于M和D的值,M最大值為65 | 依賴于M和D的值,M最大值為65 | 小數值,和錢相關,不會出現精度缺失的問題 |
3.1.2、字符串類型
類型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字符 | 定長字符串CHAR(10)10個字符 |
VARCHAR | 0-65535 字節 | 變長字符串VARCHAR(10)10個字符 |
BLOB(binary large object) | 0-65535字節 | 二進制形式的長文本數據 |
TEXT | 0-65535字節 | 長文本數據 |
關于CHAR和VARCHAR:
- CHAR(255) 數據長度不足指定長度,補足到指定長度,用于身份證號,手機號,時間固定長度的內容;
- VARCHAR(65535) 數據長度不足指定長度,不補足到指定長度,用于用戶名,備注不固定長度的內容;
- VARCHAR單獨至少花一個字節保存數據長度,如果長度超過一個字節,就要花費兩個字節。
3.1.3、日期時間類型
類型 | 大小 | 范圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 時間值或持續時間 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 結束時間是第 2147483647 秒北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和時間值,時間戳 |
3.2、創建表
語法:
CREATE TABLE [IF NOT EXISTS] 表名(列名 數據類型 [約束],列名 數據類型 [約束],列名 數據類型 [約束] //最后一列的末尾不加逗號
)[CHARSET=utf8]; //可根據需要指定表的字符編碼集
關于約束后面會講到,這里可以暫時不關注。
舉例:
學生表(student)
列名 | 數據類型 | 說明 |
---|---|---|
id | INT | 編號 |
name | VARCHAR(20) | 姓名 |
age | INT | 年齡 |
birthday | TIMESTAMP | 生日 |
phonenum | CHAR(11) | 手機號 |
address | VARCHAR(20) | 住址 |
CREATE TABLE student (id INT,name VARCHAR(20),age INT,birthday TIMESTAMP,phonenum CHAR(11),address VARCHAR(20)
);
3.3、查看表
# 查看當前數據庫中所有表名稱
SHOW TABLES;
# 查看指定表的創建語句
SHOW CREATE TABLE 表名;
# 查看表結構
DESC 表名;
3.4、修改表
# 添加列
ALTER TABLE 表名 ADD (列名 列類型,列名 列類型
)# 修改列類型(如果被修改的列已存在數據,那么新的類型可能會影響到已存在數據), 修改表中的某列時,也要寫全列的名字,數據類型,約束
ALTER TABLE 表名 MODIFY 列名 列類型; # 修改列名, 在給定列新名稱時,要指定列的類型和約束
ALTER TABLE 表名 CHANGE 原列名 新列名 列類型;# 刪除列, 刪除列時,每次只能刪除一列
ALTER TABLE 表名 DROP 列名;# 修改表名稱
ALTER TABLE 原表名 RENAME TO 新表名;
ALTER TABLE 原表名 RENAME 新表名;
3.5、刪除表
DROP TABLE 表名;