mysql基礎
數據模型:
數據模型:層次模型、網狀模型、關系模型、……
關系模型:
二維關系:表 行:row, entity 列:colume, attribution 索引:數據結構,輔助完成數據查找; 較少的代價,完成數據查找 但是帶來的副作用時,導致數據修改速度變慢。 原始數據發送改變,索引也要改變。
數據庫管理系統
DMBS:DataBase Management System RDBMS:Relational DBMS
關系型數據庫: SQL引擎:向用戶提供邏輯視圖 存儲引擎:Storage Engine 將數據以塊級別存儲在磁盤設備上。一定程度上有類似文件系統的功能。 注:關系型數據提供兩種視圖,向用戶提供邏輯布局,存儲上提供物理布局。并能夠將物理布局完美的映射到邏輯布局 邏輯布局:邏輯上是表結構 物理布局:物理上存儲上的數據流
SQL接口(SQL引擎):
客戶端要與SQL交互,就能夠與SQL的API交互。交互的方式使用SQL協議進行交互。 SQL解釋用戶的SQL語句,交給存儲引擎處理。
SQL:Structure Query Language 結構化查詢語言 ANSI:SQL-標準,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, ... SQL代碼:支持腳本 存儲例程:storage routing 存儲過程:storage procedure 過程沒有返回值 過程調用使用call 存儲函數:storage function 函數有返回值 函數調用使用select 觸發器:trigger 有一個監視器,監視對象一旦滿足某個條件或動作就執行某個行為。 事件調度器:event scheduler 類似系統計劃任務,定期或周期性的執行某個代碼
SQL引擎和存儲引擎的關系像shell和內核之間的關系。
事務:一個由單個或多個SQL語句組成的不可分割原子操作(一般為寫入語句),Transaction;
A:20000 B: 3000 A給B轉賬5000,A要減去5000,B要加上5000 關系型數據庫是否滿足事物,要通過ACID測試 ACID: A: 原子性;不可分割,要么都執行,要么都不執行。 C:一致性;從一個一致狀態轉到另一個一致狀態。 I:隔離性;只有一個事物結束,才能執行另一個事物 比如一個人用A的賬戶給B轉賬10000,另一個人在異地取款1500.兩個事物不能交叉進行。 D:持久性;存儲到設備中,不能事物結束后,還沒寫入設備。否則斷電數據丟失。
滿足事物性的數據庫,并發性較低。隔離是有級別的,隔離級別低并發較高,隔離級別高并發則較低。
博客作業:amp的各種部署方式;
回顧: fpm、amp編譯安裝、MariaDB fpm: pm=static|dynamic /pm-status ?json, ?xml, ?html, ?full
amp編譯安裝: 考慮:如何做到服務開機自啟? Unit File, Init Script? MariaDB: 事務:ACID
基礎概念:
數據類型: 作用:存儲格式、數據范圍、所能參與的運算、排序方式
字符型: 定長字符型:CHAR(#),BIARNY(#) 變長字符型:VARCHAR(#),VARBINARY(#) 對象存儲: TEXT BLOB 建類型:ENUM,SET 數值型: 精確數值型: INT:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 近似數值型: FLOAT DOUBLE 日期時間型: DATE TIME DATETIME TIMESTAMP YEAR 修飾符:NOT NULL, DEFAULT, 類型符:UNSIGNED
數據庫的設計范式:
第一范式:字段是原子性的; 第二范式:存在可用的主鍵; 第三范式:任何字段都不應該依賴于其它表的非主鍵字段; 數據約束:向數據表中插入數據時要遵守的限制規則 主鍵:primary key,表上一個或多個字段的組合,填入主鍵字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,而且也不能為空;一個表只能存一個主鍵; 惟一鍵:unique key,表上一個或多個字段的組合,填入其中字段中的數據,必須不同于已經存在的其它行的相同字段上的數據,但可以為空;一個表可以有多個惟鍵; 外鍵:foreign key,一個表中的外鍵字段中所能夠插入的數據取值范圍,取決于引用的另一個表上主鍵字段上的已經存在數據集合; 檢查條件約束:check,自定義的邏輯表達式;
MariaDB的基礎應用:
MariaDB程序組成:
C:Client mysql mysqladmin mysqldump mysqlbinlog ... S:Server mysqld mysqld_safe mysqld_multi
管理工具程序:
myisampack myisamchk ...
基于套接字通信
IPv4:PORT IPv6:PORT Unix_Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock
命令行客戶端程序mysql
mysql [OPTIONS] [database] 常用選項: -uUSERNAME -hHOST -pPASSWORD -Ddb_name -S sock_file_path -P port -e 'STATEMENT'
命令:
客戶端命令:在客戶端執行; mysql> help \?:獲取可用的命令幫助; \q:退出客戶端程序; \d CHAR:自定義語句結束符; \g:語句結束標記; \G:語句結束標記,豎排顯示結果; \! SHELL_CMD:運行shell命令; \s:當前連接及服務器相關的狀態信息; \. 服務端命令:SQL語句,發往服務端運行,并取回結果;需要顯式的語句結束符; DDL:數據定義語言,主要用于數據庫組件,例如數據庫、表、索引、視圖、觸發器、事件調度器、存儲過程、存儲函數; CREATE, ALTER, DROP DML:數據操縱語言,CRUD操作,主要用于操作表中的數據; INSERT,DELETE,UPDATE,SELECT DCL:數據控制語言 GRANT, REVOKE
SQL語句:
獲取幫助: mysql> help KEYWORD mysql> help contents
數據庫管理:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name DROP {DATABASE | SCHEMA} [IF EXISTS] db_name 相關命令: SHOW CHARACTER SET SHOW COLLATION SHOW CREATE DATABASE db_name
表管理:
表創建: CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] create_definition:由逗號分隔的列表 字段定義: column_name column_defination 約束定義: PRIMARY KEY(col1[,col2, ....]) UNIQUE KEY FOREIGN KEY CHECK(expr) 索引定義: {INDEX|KEY} {FULLTEXT|SPATIAL} column_definition: data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] table_option: ENGINE [=] engine_name 查看數據庫支持的存儲引擎種類: SHOW ENGINES; 查看表狀態信息: SHOW TABLE STATUS [WHERE CLAUSE] [LIKE CLAUSE] 表修改: ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] alter_specification: (1) 表選項 ENGINE=engine_name ... (2) 表定義 (a) 字段 ADD DROP CHANGE MODIFY (b) 鍵和索引 ADD {PRIMARY|UNIQUE|FOREIGN} key (col1, col2, ...) ADD INDEX(col1, col2, ...) DROP {PRIMARY|UNIQUE|FOREIGN} KEY key_name; DROP INDEX index_name; 查看表上的索引信息: SHOW INDEXES FROM tbl_name; 表刪除: DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ... 查看表創建語句: SHOW CREATE TABLE tbl_name
索引管理:
創建: CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC] 刪除: DROP INDEX index_name ON tbl_name 查看: SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]
DML語句:
INSERT,SELECT,DELETE,UPDATE INSERT: INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),... SELECT: (1) SELECT * FROM tbl_name; (2) SELECT col1, col2, ... FROM tbl_name; 字段別名:col1 AS ALIAS (3) ELECT col1, col2, ... FROM tbl_name WHERE CLUASE; WHERE expr:布爾表達式; col_name OPERATOR value|col_name; 操作符: >, <, <=, >=, =, != BETWEEN ... AND ... LIKE 'PATTERN': 通配符: _:匹配任意單個字符; %:任意長度的任意字符; RLIKE 'PATTERN': IN(list) 組合條件: and, or, not (4) SELECT col1, ... FROM tbl1_name [WEHRE CLAUSE] ORDER BY col1, col2, ... [ASC|DESC] DELETE: DELETE FROM tbl_name [WHERE where_condition] UPDATE: UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
圖形管理工具:
phpMyAdmin Navicat mysql-front SQLyog ToadForMySQL
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56571