1 mysql原理

基於文件存儲的數據庫特點
1)數據冗餘和一致性(同一個文件,存儲爲多處,難以保持一致性)
2)數據訪問困難(大文件)
3)數據是孤立的(格式不統一)
4)數據完整性
5)併發訪問異常(是否鎖住文件)

文件系統可以理解爲存儲引擎
表示層(文件,表)<-->邏輯層(文件系統,存儲引擎)<-->物理層(元數據,數據塊)

DBMS:層次型,網狀型,關係型

數據存儲模型(結構化數據模型)
1)關係模型
2)E-R實體-關係模型,將有冗餘的數據拆分出來,獨立做成單獨的實體
3)對象關係模型
4)半結構化數據模型(標籤和數據),XML(擴展標記語言)
    <name>Jerry</name>

DML:增刪查改    INSERT,DELETE,SELECT,UPDATE
DDL:數據定義語言    CREATE,DROP,ALTER
    RDB對象:關係型數據庫對象 庫,表,索引,視圖,用戶,存儲過程,存儲函數,觸發器,事件調度器
    約束,constraint
    1)域約束:數據類型約束
    2)外鍵約束:引用完整性約束,(兩個表之間,映射的數據要對應不能映射到不存在的數據),可以降低數據冗餘
    3)主鍵約束:某屬性能唯一標識此字段的實體,不允許爲空。可以爲多個字段。可以作爲主鍵的字段成爲候選鍵
    4)唯一性約束:每一行某個字段不能相同,可以爲空
    5)檢查性約束:age:int
DCL:數據控制語言,權限控制    GRANT,REVOKE

查詢管理器
    DML解釋器
    DDL解釋器
    查詢執行引擎

存儲管理器
    權限和完整性管理器
    事務管理器
    文件管理器
    緩衝區管理器

mysql爲單進程多線程
1)守護進程
2)應用線程
網站的瓶頸一般在數據服務器。

關係
    關係代數運算-交集,差集,並集,全集,補集
SQL:Structure Query Language,結構化查詢語言,由system R(IBM)發展而來.後來出現Ingres,Oracle,Sybase
ANSI:ansi-sql

投影:只輸出指定的是屬性(元組)
選擇:只輸出符合條件的行
自然連接:不同表中,具有相同屬性取值的取值相等則關係建立聯繫,並輸出對應的行
笛卡爾積:也稱爲交叉連接,(a+b)×(c+d),多表查詢可能用到
並:分別查詢後組合

SQL標準:sql-86,..., sql-08
程序設計語言如何與mysql交互?
嵌入式SQL:與動態SQL類似,但其語言必須在程序編譯時完全確定下來;
    ODBC(C)
動態SQL:程序設計語言使用函數或者方法與RDBMS建立連接,向SQL服務器發送查詢語句,並將結果保存到變量中
    JDBC(Java)

插件式存儲引擎
5.5.8:MyISAM,適合於查詢比較多,修改比較少的數據庫,可作爲數據倉庫。不支持事務;
5.5.8後:InnoDB,適合於在線事務處理系統;

數據庫管理系統結構


連接管理器監聽在某個端口-->線程管理器-->用戶模塊-->命令分發模塊
解析器:解析查詢,並生成解析樹,交給特定模塊完成
查詢優化器:優化查詢策略,性能關鍵模塊
訪問控制器:負責判定操作是否有權限執行
表管理器:創建、讀取、修改表結構定義文件,維護表描述符高速緩存(緩存在內存中),管理表鎖
表定義模塊:創建、刪除、重命名、移除、更新和插入表等操作
表修復模塊:檢查、修改、備份、恢復、優化(碎片)、解析等操作

加載數據,最小單位是磁盤塊,加載到內存中再做處理
數據塊由存儲引擎管理(Storage Engine),可以由多個磁盤塊組成一個數據塊
文件中記錄的組織
    堆文件組織:一條記錄可以放在文件中的任意位置;更新數據方便,查詢成本大,
    順序文件組織:根據“搜索碼”值順序進行存放;更新數據成本比較大(使用指針,記錄行的位置,數據更新時,直接更改指針,但也會帶來問題:物理上相鄰的數據,在邏輯上可能不相鄰,讀取數據時,由於邏輯數據不相鄰,可能會讀取多個磁盤塊,因此要執行多次I/O操作,速度較慢),查詢方便
    散列文件組織:
        散列函數:/4,不當的散列函數,可能使存儲分配不均

表空間:table space

數據字典 Data Dictionary
    關係的元數據
        關係名稱
        字段名稱
        字段類型和長度
        視圖
        約束

緩衝區管理器
    提供緩存置換策略,最少訪問
    釘住的塊

MariaDB
Percona

cmake

Choosing the MySQL version
GA (General Availability)
RC (Release Candidate)
beta
alpha





This is done in a specific order, On Unix-based systems the following order of precedence is used:
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf
/path/to/file when --defaults-extra-file=/path/to/file is specified
/.my.cnf

修改用戶密碼
mysqladmin -u username -h host_name password "new_password" -p
mysql> set password for 'username'@'host_name'=password('new_password');
mysql> update mysql.user set password=password('new_pasword') where condition; 
mysql> flush privilage 

刪除用戶
mysql> DROP USER ’’@localhost;    




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章