MySQL事务管理+安全管理+MySQL数据类型
生活随笔
收集整理的這篇文章主要介紹了
MySQL事务管理+安全管理+MySQL数据类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README 0.1)本文部分文字描述轉自“MySQL 必知必會”,旨在review“MySQL事務管理+安全管理+MySQL數據類型”?的基礎知識;
【1】管理事務處理 【1.1】事務處理 1)并非所有引擎都支持事務管理,MyISAM 不支持,而InnoDB支持; 2)事務處理:可以用來維護數據庫的完整性,它保證成批的MySQL 操作要么完全執行,要么完全不執行; 3)事務處理是一種機制:用來管理必須成批執行的MySQL 操作,以保證數據庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,他們或者作為整體執行,或者完全不執行。如果沒有發生錯誤,則整組語句提交給數據庫表;若發生了錯誤,則進行回退以恢復數據庫到某個已知且安全的狀態; 4)關于事務處理需要知道的幾個術語(terms): t1)事務(transaction):指一組SQL 語句; t2)回退(rollback):指撤銷指定的SQL語句的過程; t3)提交(commit):指將未存儲的SQL語句結果寫入到數據庫表; t4)保留點(savepoint):指事務處理中設置的臨時占位符,你可以對它發布回退;
【1.2】控制事務處理 1)管理事務處理的關鍵在于 將SQL 語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應該回退 ; 2)標識事務的開始: start transacation:
【1.2.1】使用rollback 1)rollback用于回退or撤銷事務; 2)rollback只能在一個事務處理內使用,在執行一條 start transaction 命令之后使用; Attention) A1)事務處理用來管理 insert,update 和 delete 語句; A2)你不能回退 select語句,create 或 drop 操作;
【1.2.2】使用commit 1)隱含提交:一般的mysql語句都是直接針對數據庫表執行和編寫的,這就是所謂的隱含提交,即提交(寫或保存)操作是自動進行的; 2)但是在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用commit語句,如下所示: start transaction; delete from product where id=1; delete from product where id=1; commit; 3)隱含事務關閉:當commit 或 rollback 語句執行后,事務會自動關閉;
【1.2.3】使用保留點 1)intro to 保留點:為了支持回退部分事務處理 ,必須能在事務處理塊中合適的位置放置占位符,這些占位符就稱為 保留點; 2)創建占位符:使用 savepoint p1; 3)看個荔枝 3.1)創建保留點: savepoint delete1; 3.2)回退到本例給出的保留點:rollback to delete1; Attention)保留點在事務處理完(執行一條rollbaack 或 commit)后自動釋放,也可以用 release savepoint 明確地釋放保留點;
【1.2.4】更改默認的提交行為 1)默認的MySQL行為是自動提交所有更改,換句話說,任何時候你執行一條MySQL 語句,該語句實際上都是針對表執行的,而且所做的更改立即生效; 2)為指示MySQL 不自動提交更改,需要使用 set autocommit=0;(干貨——為指示MySQL 不自動提交更改,需要使用 set autocommit=0) 3) autocommit 標志決定是否自動提交更改,不管有沒有commit; Attention)autocommit 標志是針對每個連接而不是服務器的;?(干貨——autocommit 標志是針對每個連接而不是服務器的)
【2】全球化和本地化 【2.1】字符集和校對順序 1)在討論多種語言和字符集時,將遇到以下重要術語(terms) t1)字符集:為字母和符號的集合; t2)編碼:為某個字符集成員的內部表示; t3)校對:為規定字符如何比較的指令;? 2)排序為什么重要? 排序因為不是外界想象的那么容易。考慮 詞APE, apex 和 Apple。他們處于正確的排序順序嗎? 這有賴于你是否想區分大小寫。使用區分大小的校對順序有一種排序方式,不使用區分大小寫的校對順序有其他的排序方式;這不僅僅影響排序,還影響搜索; Attention)使用何種字符集和校對的決定在 數據庫,數據庫和表級進行;
【2.2】使用字符集和校對順序 1)查看字符集完整列表(show character set)
2)查看所支持校對的完整列表(show collation)
對上述列表的分析(Analysis): A1)此語句顯示所有可用的校對,以及它們使用的字符集; A2)許多校對會出現兩次,一次區分大小寫(_cs表示),一次不區分大小寫(_ci 表示); 3)為了確定所用的字符集和校對,使用如下語句:
4)給表指定字符集和校對,使用帶子句的 create table:
5)給列指定字符集和校對:
6)校對在對用order by 子句檢索出來的數據排序時其重要作用。 看個荔枝)在 orde by子句中設置校對策略(t114)
7)查看client,connection,database,filesystem等的字符集和校對;
【3】安全管理 【3.1】訪問控制 1)MySQL 服務器的安全基礎是:用戶應該對他們需要的數據具有適當的訪問權; 2)訪問控制:管理員需要給用戶提供他們所需的訪問權,這就是所謂的訪問控制,管理訪問控制需要創建和管理用戶賬號; 3)不要使用root:應該嚴肅對待 root登錄的使用。僅在絕對需要時使用它。不應該在日常的MySQL 操作中使用 root; 【3.2】管理用戶 1)MySQL用戶賬號和信息存儲在 名為mysql 的MySQL 數據庫表中(mysql數據庫中有一個名為user的表,它包含所有賬號);
【3.2.1】創建用戶賬號 1)創建命令:create user new_root identified by 'new_root'; 2)指定散列口令:identified by 指定的口令為 純文本,MySQL 將在保存到user表之前對其進行加密。為了作為散列值指定口令,使用 identified by password; 3)重命名用戶賬號:rename user new_root to new_root_copy;
【3.2.2】刪除用戶賬號
【3.2.3】設置訪問權限 1)在創建用戶后,必須接著分配訪問權限。新創建的用戶沒有訪問權限,他們可以登錄,但不能看到數據,不能執行任何數據庫操作; 2)查看賦予賬號的權限,使用 show grants for?
對上圖的分析(Analysis):? A1)第一行權限 usage on *.*:表示根本沒有權限,所以此結果表示在任意數據庫和任意表上對任何東西沒有權限(第一行權限); A2)第二行權限 GRANT SELECT, INSERT ON `testcorejava`.* TO 'pacoson'@'localhost':表明對數據庫 testcorejava下面的所有表有select 和insert的權限; Attention)用戶定義為 user@host: MySQL的權限用戶名和主機名結合定義。如果不指定主機名,則使用默認的主機名%; 3)設置權限,使用grant語句。grant要求至少給出如下 info: info1)要授予的訪問權限; info2)被授予訪問權限的數據庫或表; info3)用戶名; 3.1)看個授予權限的荔枝: grant select on testcorejava.* to user_name ;
Attention)再次提醒,不管是 查看用戶權限,還是設置用戶權限,都需要加上 host,如 username@host; 4)撤銷權限
5)grant 和 revoke 可以在幾個層次上控制訪問權限: level1)整個服務器,使用 grant all 和 revoke all; level2)整個數據庫,使用 on database.*; level3)特定的表,使用 on database.table; level4)特定的列; level5)特定的存儲過程; 5.1)下表列出了可以授予或撤銷的每個權限:
【3.2.4】更改口令 1)使用 set password語句; 2)新口令加密如下:
3)用戶登錄 mysql -upacoson -hlocalhost -p (干貨——還是那句話,不要忘記host)
【4】數據庫維護 1)MySQL備份數據的方法(methods) method1)使用命令行實用程序 mysqldump 轉儲所有數據庫內容到外部文件; method2)可用命令行實用程序 mysqlhotcopy 從一個數據庫復制所有數據(并非所有數據庫引擎都支持這個實用程序); method3)可以使用MySQL 的 backup table 或 select into outfile 轉儲所有數據到某個外部文件。這兩條語句都接收將要創建的文件系統名,此系統文件必須不存在,否則會出錯; Attention)首先刷新未寫數據:為了保證所有數據被寫到磁盤(包括索引數據),可能需要在進行備份前使用 flush tables 語句; 【4.2】進行數據庫維護 1)analyze table:用來檢查表鍵是否正確; 2)check table :用來針對許多問題對表進行檢查; 【4.3】診斷啟動問題 1)服務器啟動問題通常在對 MySQL 配置或服務器本身進行更改時出現; 2)在排除系統啟動問題時,首先應該盡量用手動啟動服務器。MySQL 服務器自身通過在命令行上執行 mysqld 啟動; 3)下面是mysqld 的幾個重要options: o1)-- help :顯示幫助; o2)--safe-mode:裝載減去某些最佳配置的服務器; o3)--verbose:顯示全文本消息; o4) --version:顯示version 信息 然后退出;
【4.4】 查看日志文件 1)MySQL主要的日志文件有以下幾種(types): type1)錯誤日志:它包含啟動和關閉問題以及任意關鍵錯誤的細節。此日志通常名為 hostname.err。位于data目錄中。次日志名可用 --log-error命令行選項進行修改; type2)查詢日志:它記錄所有MySQL活動,在診斷問題時非常有用。此日志文件可能會很快地變得非常大,因此不應該長期使用它。此日志通常命名為 hostname.log,位于 data目錄中。可以通過 --log 目命令行選項進行修改; type3)二進制日志:它記錄更新過數據(或者可能更新過數據)的所有語句。此日志通常命名為 hostname-bin,位于data目錄內。。此名字可以用 --log-bin 命令行選項進行修改。 type4)緩慢查詢日志:此日志記錄執行緩慢的任何查詢。這個日志在確定數據庫何處需要優化很有用。此日志通常名為 hostname-slow.log,位于data目錄中。可以用 --log-slow-queries 命令行進行修改; Attention)在使用日志時,可以用flush logs 命令來 刷新和重新開始所有日志文件;
【5】appendix-MySQL 數據類型 1)數據類型有以下目的(targets): t1)數據類型允許限制可存儲在列中的數據;(如數值數據類型只能接受數值) t2)數據類型允許在內部更有效地存儲數據。可以用一種比文本串更簡潔的格式存儲數值和日期時間值; t3)數據類型允許變換排序順序。如果所有數據都作為串處理,那么 1 位于10之前,而10位于2之前。作為數值數據類型,數值才能正確排序;
【5.1】串數據類型 1)最常用的數據類型是串數據類型。有兩種串類型,分別是定長串 和 變長串; 1.1)定長串:定長串接收長度固定的字符串,其長度是在創建表時指定的,定長列不允許多于指定的字符數目; 1.2)變長串:變長串存儲可變長度的文本;text屬于變長串類型; 2)既然 變長類型那么靈活,為什么還要使用定長類型呢? 回答是性能。MySQL 處理定長列遠比處理變長列快的多。而且MySQL 不允許對變長列進行索引;
Attention) A1)使用引號:不管使用何種形式的串數據類型,串值都必須括在引號內; A2)當數值不是數值類型時: 比如電話號碼和郵政編碼存儲在數值字段中,但這是不可取的。如 郵政編碼01234,則保存的將是數值1234,實際上丟失了一位數字;
【5.2】數值數據類型
Attention) A1)有符號與無符號: 所有數值數據類型都可以有符號或無符號(除開bit 和 boolean);有符號數值列可以存儲正或負的數據,無符號數值列只能存儲正數。默認情況為有符號,如果需要,可以使用unsigned關鍵字,將使用無符號數據類型,這樣將允許你存儲兩倍大小的值; A2)不使用引號; A3)存儲貨幣數據類型:MySQL沒有專門存儲貨幣的數據類型,一般情況下使用 decimal(8,2);
【5.3】日期和時間數據類型
【5.4】二進制數據類型 1)intro : 二進制數據類型可以存儲任何數據(甚至包括二進制信息),如圖像,多媒體,字處理文檔等;
【1】管理事務處理 【1.1】事務處理 1)并非所有引擎都支持事務管理,MyISAM 不支持,而InnoDB支持; 2)事務處理:可以用來維護數據庫的完整性,它保證成批的MySQL 操作要么完全執行,要么完全不執行; 3)事務處理是一種機制:用來管理必須成批執行的MySQL 操作,以保證數據庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,他們或者作為整體執行,或者完全不執行。如果沒有發生錯誤,則整組語句提交給數據庫表;若發生了錯誤,則進行回退以恢復數據庫到某個已知且安全的狀態; 4)關于事務處理需要知道的幾個術語(terms): t1)事務(transaction):指一組SQL 語句; t2)回退(rollback):指撤銷指定的SQL語句的過程; t3)提交(commit):指將未存儲的SQL語句結果寫入到數據庫表; t4)保留點(savepoint):指事務處理中設置的臨時占位符,你可以對它發布回退;
【1.2】控制事務處理 1)管理事務處理的關鍵在于 將SQL 語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應該回退 ; 2)標識事務的開始: start transacation:
【1.2.1】使用rollback 1)rollback用于回退or撤銷事務; 2)rollback只能在一個事務處理內使用,在執行一條 start transaction 命令之后使用; Attention) A1)事務處理用來管理 insert,update 和 delete 語句; A2)你不能回退 select語句,create 或 drop 操作;
【1.2.2】使用commit 1)隱含提交:一般的mysql語句都是直接針對數據庫表執行和編寫的,這就是所謂的隱含提交,即提交(寫或保存)操作是自動進行的; 2)但是在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用commit語句,如下所示: start transaction; delete from product where id=1; delete from product where id=1; commit; 3)隱含事務關閉:當commit 或 rollback 語句執行后,事務會自動關閉;
【1.2.3】使用保留點 1)intro to 保留點:為了支持回退部分事務處理 ,必須能在事務處理塊中合適的位置放置占位符,這些占位符就稱為 保留點; 2)創建占位符:使用 savepoint p1; 3)看個荔枝 3.1)創建保留點: savepoint delete1; 3.2)回退到本例給出的保留點:rollback to delete1; Attention)保留點在事務處理完(執行一條rollbaack 或 commit)后自動釋放,也可以用 release savepoint 明確地釋放保留點;
【1.2.4】更改默認的提交行為 1)默認的MySQL行為是自動提交所有更改,換句話說,任何時候你執行一條MySQL 語句,該語句實際上都是針對表執行的,而且所做的更改立即生效; 2)為指示MySQL 不自動提交更改,需要使用 set autocommit=0;(干貨——為指示MySQL 不自動提交更改,需要使用 set autocommit=0) 3) autocommit 標志決定是否自動提交更改,不管有沒有commit; Attention)autocommit 標志是針對每個連接而不是服務器的;?(干貨——autocommit 標志是針對每個連接而不是服務器的)
【2】全球化和本地化 【2.1】字符集和校對順序 1)在討論多種語言和字符集時,將遇到以下重要術語(terms) t1)字符集:為字母和符號的集合; t2)編碼:為某個字符集成員的內部表示; t3)校對:為規定字符如何比較的指令;? 2)排序為什么重要? 排序因為不是外界想象的那么容易。考慮 詞APE, apex 和 Apple。他們處于正確的排序順序嗎? 這有賴于你是否想區分大小寫。使用區分大小的校對順序有一種排序方式,不使用區分大小寫的校對順序有其他的排序方式;這不僅僅影響排序,還影響搜索; Attention)使用何種字符集和校對的決定在 數據庫,數據庫和表級進行;
【2.2】使用字符集和校對順序 1)查看字符集完整列表(show character set)
2)查看所支持校對的完整列表(show collation)
對上述列表的分析(Analysis): A1)此語句顯示所有可用的校對,以及它們使用的字符集; A2)許多校對會出現兩次,一次區分大小寫(_cs表示),一次不區分大小寫(_ci 表示); 3)為了確定所用的字符集和校對,使用如下語句:
4)給表指定字符集和校對,使用帶子句的 create table:
5)給列指定字符集和校對:
6)校對在對用order by 子句檢索出來的數據排序時其重要作用。 看個荔枝)在 orde by子句中設置校對策略(t114)
7)查看client,connection,database,filesystem等的字符集和校對;
【3】安全管理 【3.1】訪問控制 1)MySQL 服務器的安全基礎是:用戶應該對他們需要的數據具有適當的訪問權; 2)訪問控制:管理員需要給用戶提供他們所需的訪問權,這就是所謂的訪問控制,管理訪問控制需要創建和管理用戶賬號; 3)不要使用root:應該嚴肅對待 root登錄的使用。僅在絕對需要時使用它。不應該在日常的MySQL 操作中使用 root; 【3.2】管理用戶 1)MySQL用戶賬號和信息存儲在 名為mysql 的MySQL 數據庫表中(mysql數據庫中有一個名為user的表,它包含所有賬號);
【3.2.1】創建用戶賬號 1)創建命令:create user new_root identified by 'new_root'; 2)指定散列口令:identified by 指定的口令為 純文本,MySQL 將在保存到user表之前對其進行加密。為了作為散列值指定口令,使用 identified by password; 3)重命名用戶賬號:rename user new_root to new_root_copy;
【3.2.2】刪除用戶賬號
【3.2.3】設置訪問權限 1)在創建用戶后,必須接著分配訪問權限。新創建的用戶沒有訪問權限,他們可以登錄,但不能看到數據,不能執行任何數據庫操作; 2)查看賦予賬號的權限,使用 show grants for?
對上圖的分析(Analysis):? A1)第一行權限 usage on *.*:表示根本沒有權限,所以此結果表示在任意數據庫和任意表上對任何東西沒有權限(第一行權限); A2)第二行權限 GRANT SELECT, INSERT ON `testcorejava`.* TO 'pacoson'@'localhost':表明對數據庫 testcorejava下面的所有表有select 和insert的權限; Attention)用戶定義為 user@host: MySQL的權限用戶名和主機名結合定義。如果不指定主機名,則使用默認的主機名%; 3)設置權限,使用grant語句。grant要求至少給出如下 info: info1)要授予的訪問權限; info2)被授予訪問權限的數據庫或表; info3)用戶名; 3.1)看個授予權限的荔枝: grant select on testcorejava.* to user_name ;
Attention)再次提醒,不管是 查看用戶權限,還是設置用戶權限,都需要加上 host,如 username@host; 4)撤銷權限
5)grant 和 revoke 可以在幾個層次上控制訪問權限: level1)整個服務器,使用 grant all 和 revoke all; level2)整個數據庫,使用 on database.*; level3)特定的表,使用 on database.table; level4)特定的列; level5)特定的存儲過程; 5.1)下表列出了可以授予或撤銷的每個權限:
【3.2.4】更改口令 1)使用 set password語句; 2)新口令加密如下:
3)用戶登錄 mysql -upacoson -hlocalhost -p (干貨——還是那句話,不要忘記host)
【4】數據庫維護 1)MySQL備份數據的方法(methods) method1)使用命令行實用程序 mysqldump 轉儲所有數據庫內容到外部文件; method2)可用命令行實用程序 mysqlhotcopy 從一個數據庫復制所有數據(并非所有數據庫引擎都支持這個實用程序); method3)可以使用MySQL 的 backup table 或 select into outfile 轉儲所有數據到某個外部文件。這兩條語句都接收將要創建的文件系統名,此系統文件必須不存在,否則會出錯; Attention)首先刷新未寫數據:為了保證所有數據被寫到磁盤(包括索引數據),可能需要在進行備份前使用 flush tables 語句; 【4.2】進行數據庫維護 1)analyze table:用來檢查表鍵是否正確; 2)check table :用來針對許多問題對表進行檢查; 【4.3】診斷啟動問題 1)服務器啟動問題通常在對 MySQL 配置或服務器本身進行更改時出現; 2)在排除系統啟動問題時,首先應該盡量用手動啟動服務器。MySQL 服務器自身通過在命令行上執行 mysqld 啟動; 3)下面是mysqld 的幾個重要options: o1)-- help :顯示幫助; o2)--safe-mode:裝載減去某些最佳配置的服務器; o3)--verbose:顯示全文本消息; o4) --version:顯示version 信息 然后退出;
【4.4】 查看日志文件 1)MySQL主要的日志文件有以下幾種(types): type1)錯誤日志:它包含啟動和關閉問題以及任意關鍵錯誤的細節。此日志通常名為 hostname.err。位于data目錄中。次日志名可用 --log-error命令行選項進行修改; type2)查詢日志:它記錄所有MySQL活動,在診斷問題時非常有用。此日志文件可能會很快地變得非常大,因此不應該長期使用它。此日志通常命名為 hostname.log,位于 data目錄中。可以通過 --log 目命令行選項進行修改; type3)二進制日志:它記錄更新過數據(或者可能更新過數據)的所有語句。此日志通常命名為 hostname-bin,位于data目錄內。。此名字可以用 --log-bin 命令行選項進行修改。 type4)緩慢查詢日志:此日志記錄執行緩慢的任何查詢。這個日志在確定數據庫何處需要優化很有用。此日志通常名為 hostname-slow.log,位于data目錄中。可以用 --log-slow-queries 命令行進行修改; Attention)在使用日志時,可以用flush logs 命令來 刷新和重新開始所有日志文件;
【5】appendix-MySQL 數據類型 1)數據類型有以下目的(targets): t1)數據類型允許限制可存儲在列中的數據;(如數值數據類型只能接受數值) t2)數據類型允許在內部更有效地存儲數據。可以用一種比文本串更簡潔的格式存儲數值和日期時間值; t3)數據類型允許變換排序順序。如果所有數據都作為串處理,那么 1 位于10之前,而10位于2之前。作為數值數據類型,數值才能正確排序;
【5.1】串數據類型 1)最常用的數據類型是串數據類型。有兩種串類型,分別是定長串 和 變長串; 1.1)定長串:定長串接收長度固定的字符串,其長度是在創建表時指定的,定長列不允許多于指定的字符數目; 1.2)變長串:變長串存儲可變長度的文本;text屬于變長串類型; 2)既然 變長類型那么靈活,為什么還要使用定長類型呢? 回答是性能。MySQL 處理定長列遠比處理變長列快的多。而且MySQL 不允許對變長列進行索引;
Attention) A1)使用引號:不管使用何種形式的串數據類型,串值都必須括在引號內; A2)當數值不是數值類型時: 比如電話號碼和郵政編碼存儲在數值字段中,但這是不可取的。如 郵政編碼01234,則保存的將是數值1234,實際上丟失了一位數字;
【5.2】數值數據類型
Attention) A1)有符號與無符號: 所有數值數據類型都可以有符號或無符號(除開bit 和 boolean);有符號數值列可以存儲正或負的數據,無符號數值列只能存儲正數。默認情況為有符號,如果需要,可以使用unsigned關鍵字,將使用無符號數據類型,這樣將允許你存儲兩倍大小的值; A2)不使用引號; A3)存儲貨幣數據類型:MySQL沒有專門存儲貨幣的數據類型,一般情況下使用 decimal(8,2);
【5.3】日期和時間數據類型
【5.4】二進制數據類型 1)intro : 二進制數據類型可以存儲任何數據(甚至包括二進制信息),如圖像,多媒體,字處理文檔等;
總結
以上是生活随笔為你收集整理的MySQL事务管理+安全管理+MySQL数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑本地连接不见了解决方法
- 下一篇: 利用java求积分(定积分和无穷限积分)