# id爲主鍵 name是惟一鍵 create table Mark(id int not null primary key ,name varchar(250) unique key); create table Mark(id int, name varchar(250), primary key(id), unique key(name));
create table students_to_teacher(to_id int, stu_id int, tea_id int, foreign key(stu_id) references students(id), foreign key(tea_id) references teacher(id));
# 建立普通索引 create index 索引名稱 on 表名(列名) # 刪除普通索引 drop index 索引名稱 on 表名 # 查看索引 show index from 索引名
# 建立惟一索引 create unique index 索引名稱 on 表名(列名) # 刪除惟一索引 drop unique index 索引名稱 on 表名
-rw-rw---- 1 mysql mysql 65 8月 27 14:31 db.opt -rw-rw---- 1 mysql mysql 8614 8月 27 14:31 students.frm -rw-rw---- 1 mysql mysql 98304 8月 27 14:31 students.ibd db.opt文件:主要用來存儲當前數據庫的默認字符集和字符校驗規則 students.frm文件:存放表結構的 students.ibd文件:存儲了當前表的數據和相關的索引數據 所以,表數據和表結構分離, 每一個表單獨使用一個表文件來存儲數據和索引
-rw-rw---- 1 mysql mysql 10630 8月 27 13:12 user.frm -rw-rw---- 1 mysql mysql 504 8月 27 13:15 user.MYD -rw-rw---- 1 mysql mysql 2048 8月 27 14:30 user.MYI user.frm:爲表結構 user.MYD:爲表數據 user.MYI:爲表索引
# lock tables 方式施加鎖 lock tables 表名稱 read # 讀鎖 lock tables 表名稱 write # 寫鎖 # 給表解鎖 unlock tables; # flush tables 方式施加鎖 flush tables 表名稱 with read lock; #讀鎖 flush tables 表名稱 with write lock; # 寫鎖
事物日誌:html
redo日誌
:記錄SQL執行的語句,這些SQL語句尚未同步到磁盤上,沒有修改數據。若是數據奔潰,能夠經過撤銷SQL執行的語句來進行還原。可是,若是已經同步到磁盤上的SQL語句而言,就只能使用undo來回滾以前的數據了;undo日誌
:記錄沒有執行SQL的樣子,也就是記錄修改數據以前的數據記錄下來;ACID機制:mysql
automicity
:原子性,整個事物中的全部操做要麼所有成功提交,要麼所有失敗回滾;consistency
:一致性,數據庫老是從一個一致性狀態轉化爲另外一個一致性狀態;isolation
: 隔離性,事物不會相互影響,一個事物所做出的操做在提交以前,是不能爲其餘事物所見,隔離有多種級別,主要是爲了併發;durability
:持久性,事物一旦提交,其所做的修改會保存在數據庫中,不能丟失;1.query_cache_min_res_unit:查詢緩存分配內存塊的最小的分配單位,較小的值較少內存浪費,可是會致使更加平凡的內存分配操做 ,較大的值會致使浪費 2.query_cache_limit:可以緩存的最大查詢結果,對有較大結果的查詢語句,建議在select中使用SQL_NO_CACHE 3.query_cache_size:查詢緩存總共可用的內存空間,單位是字節,必須是1024整數倍 4.query_cache_type:ON , OFF , DEMAND 5.query_cache_wlock_invalidate:若是某個數據表被其餘的鏈接鎖定,是否仍然能夠從查詢緩存中返回結果,默認值爲off,表示能夠返回數據,on爲不容許
緩存命中率計算公式: Qcache_hits / (Qcache_hits+Com_select)
general_log = {ON|OFF} # 是否啓用查詢日誌 general_log_file = /logs/mysql/general_log # 當log_output爲FILE類型時,日誌信息的記錄位置; log_output = {TABLE|FILE|NONE} log_output = TABLE,FILE
1.執行時長超出指定時長的操做 show global variables like 'long_query_time'; 查看指定的時長 set global long_query_time = 自定義時長 2.slow_query_log = {ON|OFF}:是否啓用慢查詢日誌 set global slow_query_log = ON 3.slow_query_log_file = mariadb1-slow.log # 過濾條件 4.log_slow_filter=admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk 5.log_slow_rate_limit = 1 指定記錄速率 6.log_slow_verbosity = 指定內容級別
# 錯誤日誌信息產生的來源 mysqld啓動和關閉過程當中輸出的信息; mysqld運行中產生的錯誤信息; event scheduler運行一個event時產生的日誌信息 在主從複製架構中的從服務器上啓動從服務器線程時產生的日誌信息; # 如何開啓錯誤日誌 log_error = /path/to/somefile log_warnings = {ON|OFF}:是否記錄警告信息於錯誤日誌中;
# 日誌記錄的格式分類 基於「SQL語句」記錄: statement 基於「行」記錄:row 「混合模式」 :mixed,系統自行判斷 # 二進制日誌文件的構成 日誌文件:mysql-bin.文件序號 例如: mysql-bin.000001 索引文件:mysql-bin.index 例如:mysql-bin.index
1.站在數據集是否完整的角度上 徹底備份,部分備份 2.站在徹底備份的基礎上 增量備份,差別備份 3.站在是否影響數據集讀寫的角度上 熱備份:在線備份,讀寫操做不受影響; 溫備份:在線備份,讀操做可繼續進行,但寫操做不容許 冷備份:離線備份,數據庫服務器離線,備份期間不能爲業務提供讀寫服務 MyISAM存儲引擎: 可以實現溫備 InnoDB存儲引擎: 可以實現熱備 4.站在數據存儲角度上 物理備份:直接複製數據文件進行的備份 邏輯備份:從數據庫中「導出」操做數據的SQL語句,再執行,實現備份
mysqldump
:邏輯備份工具,適用於全部存儲引擎,溫備;可是對InnoDB存儲引擎支持熱備;scp, tar
等文件系統工具:物理備份工具,適用於全部存儲引擎;冷備;徹底備份,部分備份,不適用於Innodb存儲引擎;lvm2的快照
:幾乎熱備;藉助於文件系統工具實現物理備份;mysqlhotcopy
: 幾乎冷備;僅適用於MyISAM存儲引擎