概念
簡單一句話概括,數據庫(DataBase)是按照數據結構來組織、管理和存儲數據的倉庫。
常見的數據庫
- Oracle
- DB2
- SQL Server
- Postgre SQL
- MySQL
相關術語
數據庫系統(DataBase System)DBS
- 數據庫(DataBase)
- 數據庫管理系統(DataBase Management System)DBMS
- 應用開發工具
- 管理員及用戶 DBA
SQL 語言–Stuctured Query Language:結構化查詢語言
- DDL 數據定義語言
- DML 數據操作語言
- DQL 數據查詢語言
- DCL 數據控制語言
MySQL 相關操作
配置文件
my.cnf 是 MySQL 的配置文件
登錄/退出 MySQL
- 登錄
mysql -u root -p
mysql -u root -proot 直接加上密碼
- 獲取版本號:
mysql -V
mysql --version
- 登錄的同時打開數據庫
mysql -u root -p -D db_name
- 退出:exit/quit
注意 :
- 命令行結束符默認使用
;'
或\g
結束; - 可以通過
help
或者\h
或者?
加上相關關鍵字來查看手冊。
例如:help create database
SQL 語句語法規範
常用 MySQL 的關鍵字需要大寫, 庫名、表名、字段名等使用小寫;SQL 語句支持拆行操作,拆分的時候不能把完整的單詞拆開;數據庫名稱、表名稱、字段名稱不要使用 MySQL 的保留字。
常用的 SQL 語句
SELECT USER() --得到登錄用戶
SELECT VERSION() --得到 MySQL 版本信息
SELECT NOW() --得到當前的日期時間
SELECT DATABASE() --得到當前打開的數據庫
SHOW WARNINGS --查看上一步操作產生的警告信息
SHOW DATABASES --查看所有的數據庫
mysql 中的註釋:# 或 -- 註釋內容
數據庫相關操作
創建數據庫
- 創建數據庫
1. CREATE (DATABASE|SCHEMA) db_name;
注意:數據庫名稱最好有意義;名稱不要包含特殊字符或者 MySQL 關鍵字。
2. 檢查數據庫是否存在,不存在則創建
CREATE DATABASE [IF NOT EXISTS] db_name;
3. 創建數據庫的同時指定編碼方式
CREATE DATABASE [IF NOT EXISTS] db_name
DEFAULT CHARACTER SET 'charset';
- 查看當前服務器下的全部數據庫
SHOW DATABASES|SCHEMAS;
- 查看指定數據庫的詳細信息
SHOW CREATE DATABASE db_name;
- 修改指定數據庫的編碼方式
ALTER DATABASE db_name [DAFAULT] CHARACTER SET 'charset';
- 打開指定數據庫
USE db_name;
數據表的相關操作
- 數據表
- 是數據庫的重要組成部分之一,數據時保存在數據表中。
- 數據表由行 (row) 和列 (column) 來組成。
- 每個數據表至少有一列,行可以有零行、一行或多行。
- 表名要求唯一,不要包含特殊字符,最好是有意義的。
- 創建數據表
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名稱 字段類型 [完整性約束],
字段名稱 字段類型 [完整性約束],
....
)ENGINE=存儲引擎(默認INNODB) CHARSET=編碼方式;
CREATE TABLE IF NOT EXISTS user(
id INT,
username VARCHAR(20),
password CHAR(32),
age TINYINT,
tel CHAR(11),
sex ENUM('男','女','保密')
)ENGINE=INNODB CHARSET=UTF8;
- 查看當前數據庫下已有的數據表
SHOW TABLES;
SHOW FULL TABLES [FROM|IN] db_name [LIKE 'pattern'|WHERE expr];
- 查看錶的詳細信息
SHOW CREATE TABLE tbl_name;
- 查看錶的結構
DESC tbl_name;
DESCRIBE tbl_name;
SHOW COLUMNS FROM tbl_name;
- 刪除表
DROP TABLE IF EXISTS tbl_name;
- 向表中添加數據
INSERT INTO tbl_name(字段1,字段2...)
VALUES(值1,值2...); -- 字段名省略時默認全部字段添加數據
- 表結構的相關操作
1. 添加字段
ALTER TABLE tbl_name ADD 字段名稱 字段屬性
[完整性約束條件] [FIRST|AFTER 字段名稱];
2. 刪除字段
ALTER TABLE tbl_name DROP 字段名稱;
3. 添加默認值
ALTER TABLE tbl_name ALTER 字段名稱
SET DEFAULT 默認值;
4. 刪除默認值
ALTER TABLE tbl_name ALTER 字段名稱
DROP DEFAULT;
5. 修改字段類型
ALTER TABLE tbl_name MODIFY 字段名稱 字段類型
[FIRST|AFTER 字段名稱];
6. 修改字段名、字段類型
ALTER TABLE tbl_name CHANGE 原字段名稱 新字段名稱
字段類型 [FIRST|AFTER 字段名稱]
7. 添加主鍵
ALTER TABLE tbl_name ADD PRIMARY KEY(字段名稱);
8. 刪除主鍵
ALTER TABLE tbl_name DROP PRIMARY KEY;
如果有AUTO_INCREMENT,應先去掉它,再刪除主鍵。
9. 添加唯一索引
ALTER TABLE tbl_name ADD UNIQUE KEY|INDEX index_name(字段名稱);
10. 刪除唯一索引
ALTER TABLE tbl_name DROP INDEX index_name;
11. 修改數據表的名稱
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name;
或
RENAME TABLE tbl_name TO new_tbl_name;
12. 修改 AUTO_INCREMENT 的值
ALTER TABLE tbl_name AUTO_INCREMENT=值;
MySQL 數據類型
-
數值型
整數型
浮點型
-
字符串類型
注意:
-
CHAR
的查詢效率高於VARCHAR
,CHAR
相當於是拿空間換時間,VARCHAR
是拿時間換空間。 -
CHAR
存儲的時候,會用空格填充到指定的長度,但在檢索的時候會去掉後面的空格;VARCHAR
存儲的時候不會進行填充,檢索時後面的空格會留下。 -
TEXT
列不能有默認值,檢索時不存在大小寫轉換。
- 日期時間類型
MySQL 完整性約束
UNSIGNED
無符號,沒有負數,從 0 開始;ZEROFILL
零填充,當數據的顯示長度不夠的時候使用前補 0 的效果填充至指定長度;NOT NULL
非空約束,也就是插入值的時候該字段必須給值;DEFAULT
默認值,如果插入記錄的時候沒有賦值,則使用默認的;PRIMARY KEY
主鍵,標識記錄的唯一性,值不能重複,一個表只能有一個主鍵;UNIQUE KEY
唯一性,一個表中可以有多個字段是唯一索引,同樣的值不能重複,但是 null 值除外;AUTO_INCREMENT
自增長,只能用於數值列,而且配合索引使用用,默認起始值是 1,每次增長 1;FOREIGN KEY
外鍵約束;
MySQL 存儲引擎
MyISAM 存儲引擎
-
默認
MyISAM
的表會在磁盤中產生 3 個文件:.frm 表結構文件、.MYD 數據文件、.MYI 索引文件 。 -
可以在建表的時候指定數據文件和索引文件的存儲位置,只有
MyISAM
表支持:DATA DIRECTORY [=] 數據保存的絕對路徑、INDEX DIRECTORY [=] 索引文件保存的絕對路徑 。 -
MyISAM
的單表最大支持的數據量是 2 的 26 次方記錄。 -
每個表最多可以建立 64 個索引。
-
如果是複合索引,每個複合索引最多包含 16 個列,索引值最大長度是 1000B。
-
MyISAM
引擎的存儲格式SHOW TABLE STATUS LIKE ‘表名’\G – 查看存儲格式
a. 定長(FIXED靜態)是指字段中不包含
VARCHAR/TEXT/BLOB
。
特點:靜態表的查詢速度很快;當數據出現異常時,也很容易恢復b. 動態(DYNAMIC) 只要字段中包含
VARCHAR/TEXT/BLOB
。
特點:處理數據複雜,性能很低,但佔用空間小。c. 壓縮(COMPRESSED) myisampack 創建 。
InnoDB 存儲引擎
- 設計遵循 ACID 模型,支持事務,具有從服務崩潰中恢復的能力,能夠最大限度保護用戶的數據。
- 支持行級鎖,可以提升多用戶併發時的讀寫性能。
- 支持外鍵,保證數據的一致性和完整性。
- InnoDB 擁有自己的緩衝池,常用的數據和索引都在緩存中。
- 在 INSERT、uPDATE、DELETE 操作,InnoDB 會使用一種 change buffering 的進制來自動優化,還可以提供一致性的讀,並且還能夠緩存變更的數據,減少磁盤 I/O,提高性能。
- 創建 InnoDB 表後會產生兩個文件:.frm 表結構文件、.ibd 數據和索引存儲表空間中。
- 所有的表都需要創建主鍵,最後配合 AUTO_INCREMENT,也可以放到經常查詢的列作爲主鍵。