1.MySQL 版本
Oracle MySQL 8.0
MariaDB
PerconaDB
主流版本
mysql 5.6 5.6.36 5.38 5.6.40
mysql 5.7 5.7.18 5.7.20 5.7.22
企業版本選擇: 6-12月之間的GA
2.MySQL的體系結構
2.1 MySQL C/S結構
兩種鏈接方法: TCP/IP (遠程,本地),SOCKET(本地)
mysql -uroot -poldboy123 -h 10.0.0.200 -P3306
mysql -uroot -poldboy123 -S /tmp/mysql.sock
2.2 MySQL實例
實例=mysqld+內存結構
MySQL實例======> mysqld(董事長)---->master thread(經理)---->N Thread(員工) ------>內存結構(辦公區)
2.3 mysqld三層結構
連接層
1.提供連接協議(TCP ,Socket)
2.用戶驗證
3.提供專用鏈接線程
SQL層
1.接收上層的命令
2.語法檢測
3.語義(SQL類型),權限
SQL類型:DDL數據定義語言 DCL數據控制語言 DML數據操作語言 DQL數據查詢
4.專用解析器解析SQL,解析成多種執行計划
5.優化器:幫我們選擇一個代價最低的執行計划(cpu,IO,MEM)
6.執行器:按照優化器的選擇,執行SQL語句,得出獲取數據方法
7.查詢緩存:默認是關閉的. 一般會使用redis產品替代 Tair
8.記錄日志:二進制日志
存儲引擎層
按照SQL層結論,找相應數據,結構化成表的形式
3. MySQL的邏輯結構
庫(schema):存儲表的地方(庫名,屬性)
表(Table):二維表
元數據
表名字
表的屬性(表的大小,權限,存儲引擎,字符集等)
列:列名字,列屬性(數據類型,約束,其他定義)
==============================================
記錄:數據行
==============================================
4.SQL 語句(SQL92)
4.1 SQL 種類
DDL數據定義語言
DCL數據控制語言
DML數據操作語言
DQL數據查詢語言
4.2 SQL語句的操作對象
庫
表
4.3 不同分類語句作用
DDL :
庫
CREATE DATABASE
DROP DATABASE
ALTER DATABSE
SQL語句規范第一條:
CREATE DATABASE oldboy CHARSET utf8mb4;
1.關鍵字大寫(非必須),字面量小寫(必須)
2.庫名字,只能是小寫,不能有數字開頭,不能是預留關鍵字
3.庫名字必須和業務名有關,例如his_user;
4.必須加字符集.
表
CREATE TABLE
DROP TABLE
ALTER TABLE
CREATE TABLE t1 (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '用戶ID',
sname VARCHAR(20) NOT NULL COMMENT '用戶姓名',
gender ENUM('f','m','u') NOT NULL DEFAULT 'u' COMMENT '用戶性別',
telnum CHAR(11) NOT NULL UNIQUE COMMENT '手機號',
tmdate DATETIME NOT NULL DEFAULT NOW() COMMENT '錄入時間'
)ENGINE INNODB CHARSET utf8mb4;
SQL語句規范第二條:
1.關鍵字大寫(非必須),字面量小寫(必須)
2.表名必須小寫,不能有數字開頭,不能是預留關鍵字
3.表名字必須和業務名有關
4.必須加存儲引擎和字符集
5.適合的數據類型
6.必須要有主鍵
7.盡量非空選項
8.字段唯一性
9.必須加注釋
10.避免使用外鍵
11.建立合理的索引
DCL:
grant
revoke
lock
DML :
insert
update
delete
SQL語句規范第三條:
1.insert語句按批量插入數據
2.update必須加where條件
3.delete盡量替換為update
4.如果有清空全表需求,不要用delete,推薦使用truncate
DQL :
select
show
SQL語句規范第四條:
1. select語句避免使用 select * from t1; ----> select id,name from t1;
2. select語句盡量加等值的where條件.例如 select * from t1 where id=20;
3. select 語句對於范圍查詢,例如 ;select * from t1 where id>200; 盡量添加limit或者 id>200 and id<300 union all id>300 and id<400
4. select 的where 條件 不要使用 <> like '%name' not in not exist
5. 不要出現3表以上的表連接,避免子查詢
6. where條件中不要出現函數操作.