mysql执行语句后回退_MySQL命令学习笔记(八)
1 安全管理
1.1 訪問控制
MySQL服務器的安全基礎是: 用戶應該對他們需要的數據具有適當的訪問權,既不能多也不能少
1.2 管理用戶
MySQL用戶賬號和信息存儲在名為mysql的MySQL數據庫中。獲得所有用戶賬號列表時,可使用以下代碼:
USE mysql;
SELECT user FROM user;
結果如下:
這里只有root一個賬戶。接下來開始創建賬戶。
1.2.1 創建用戶賬號
為了創建一個新用戶賬號,使用CREATE USER語句,如下所示:
CREATE USER ben IDENTIFIED BY '123456';
結果如下:
指定散列口令 IDENTIFIED BY指定的口令為純文本, MySQL將在保存到user表之前對其進行加密。為了作為散列值指定口令,使用IDENTIFIED BY PASSWORD。
為重新命名一個用戶賬號,使用RENAME USER語句,如下所示:
RENAME USER ben TO jerry;
1.2.2 刪除用戶賬號
為了刪除一個用戶賬號(以及相關的權限),使用DROP USER語句,如下所示:
DROP USER jerry;
1.2.3 設置訪問權限
為看到賦予用戶賬號的權限,使用SHOW GRANTS FOR,如下所示:
SHOW GRANTS FOR jerry;
為設置權限,使用GRANT語句,GTANT要求至少給出以下信息:
要授予的權限
被授予訪問權限的數據庫或表
用戶名
GRANT的用法示例如下:
GRANT SELECT ON test.* TO jerry;
這里表示允許用戶在test.*(test.*數據庫的所有表)上使用SELECT,用戶jerry對test數據庫中的所有數據具有只讀訪問權限
結果如下:
每個GRANT添加(或更新)用戶的一個權限。 MySQL讀取所有授權,并根據它們確定權限
GRANT的反操作為REVOKE,用它來撤銷特定的權限。示例如下:
REVOKE SELECT ON test.* FROM jerry;
這條REVOKE語句取消剛賦予用戶jerry的SELECT訪問權限。 被撤銷的訪問權限必須存在,否則會出錯,結果如下:
GRANT和REVOKE可在幾個層次上控制訪問權限:
整個服務器,使用GRANT ALL 和REVOKE ALL
整個數據庫,使用ON database.*
特定的表,使用ON database.table
特定的列
特定的存儲過程
1.2.4 更改口令
為了更改用戶口令,可使用SET PASSWORD語句。新口令必須如下加密:
SET PASSWORD FOR jerry = PASSWORD('654321');
SET PASSWORD更新用戶口令。新口令必須傳遞到Password()函數進行加密
2 管理事務處理
2.1 事務處理
事務處理(transaction processing)可以用來維護數據庫的完整性,它保證成批的MySQL操作要么完全執行,要么完全不執行。
在使用事務和事務處理時,有幾個關鍵詞匯反復出現。下面是關于事務處理需要知道的幾個術語:
事務(transaction)指一組SQL語句;
回退(rollback)指撤銷指定SQL語句的過程
提交(commit)指將未存儲的SQL語句結果寫入數據庫表
保留點(savepoint)指事務處理設置的臨時占位符
2.2 控制事務處理
MySQL使用下面的語句來標識事務的開始:
START TRANSACTION;
2.2.1 使用ROLLBACK
MySQL的ROLLBACK命令用來回退(撤銷) MySQL語句,示例如下:
SELECT * FROM table1;
START TRANSACTION;
DELETE FROM table1;
SELECT * FROM table1;
ROLLBACK
SELECT * FROM table1;
結果如下:
上圖是第一句SELECT執行的結果,然后依次執行上述語句如下:
首先執行一條SELECT以顯示該表不為空。然后開始一個事務處理,用一條DELETE語句刪除table1中的所有行。另一條SELECT語句驗證ordertotals確實為空。這時用一條ROLLBACK語句回退START TRANSACTION之后的所有語句,最后一條SELECT語句顯示該表不為空。ROLLBACK只能在一個事務處理內使用(在執行一條START TRANSACTION命令之后)。
哪些語句可以回退? 事務處理用來管理INSERT、 UPDATE和DELETE語句。你不能回退SELECT語句。(這樣做也沒有什么意義。)不能回退CREATE或DROP操作。
2.2.2 使用COMMIT
一般的MySQL語句都是直接針對數據庫表執行和編寫的。這就是所謂的隱含提交(implicit commit),即提交(寫或保存)操作是自動進行的。
在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用COMMIT語句,示例如下所示:
START TRANSACTION;
DELETE FROM table1 WHERE id = 1;
COMMIT;
最后的COMMIT語句僅在不出錯時寫出更改。
隱含事務關閉 當COMMIT或ROLLBACK語句執行后,事務會自 動關閉(將來的更改會隱含提交)。
2.2.3 使用保留點
簡單的ROLLBACK和COMMIT語句就可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更復雜的事務處理可能需要部分提交或回退。
為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符。這樣,如果需要回退,可以回退到某個占位符。
這些占位符稱為保留點。為了創建占位符,可如下使用SAVEPOINT語句:
SAVEPOINT delete1;
每個保留點都取標識它的唯一名字,以便在回退時, MySQL知道要回退到何處。為了回退到本例給出的保留點,可如下進行:
ROLLBACK TO delete1;
釋放保留點 保留點在事務處理完成(執行一條ROLLBACK或COMMIT)后自動釋放。自MySQL 5以來,也可以用RELEASE SAVEPOINT明確地釋放保留點。
2.2.3 更改默認的提交行為
由于默認的MySQL行為是自動提交所有更改。換句話說,任何時候你執行一條MySQL語句,該語句實際上都是針對表執行的,而且所做的更改立即生效。為指示MySQL不自動提交更改,需要使用以下語句:
SET autocommit=0;
autocommit標志決定是否自動提交更改,不管有沒有COMMIT語句。設置autocommit為0(假)指示MySQL不自動提交更改(直到autocommit被設置為真為止)。
3 數據庫維護
3.1 備份數據
使用命令行實用程序mysqldump轉儲所有數據庫內容到某個外部文件。在進行常規備份前這個實用程序應該正常運行,以便能正確地備份轉儲文件
可用命令行實用程序mysqlhotcopy從一個數據庫復制所有數據(并非所有數據庫引擎都支持這個實用程序)
可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE轉儲所有數據到某個外部文件。這兩條語句都接受將要創建的系統文件名,此系統文件必須不存在,否則會出錯。數據可以用RESTORE TABLE來復原
首先刷新未寫數據 為了保證所有數據被寫到磁盤(包括索引數據),可能需要在進行備份前使用FLUSH TABLES語句
3.2 進行數據庫維護
MySQL提供了一系列的語句,可以(應該)用來保證數據庫正確和正常運行,一些語句如下:
ANALYZE TABLE用來檢查表鍵是否正確,示例如下:
ANALYZE TABLE table1;
CHECK TABLE用來針對許多問題對表進行檢查
ANALYZE TABLE table1;
若MyISAM表訪問產生不正確和不一致的結果,可能需要用REPAIR TABLE來修復相應的表
若從一個表中刪除大量數據,應該使用OPTIMIZE TABLE來回收所有的空間,從而優化表的性能
3.3 診斷啟動問題
在排除系統啟動問題時,首先應該盡量用手動啟動服務器。 MySQL服務器自身通過在命令行上執行mysqld啟動。下面是幾個重要的mysqld命令行選項:
--help顯示幫助——一個選項列表
--safe-mode裝載減去某些最佳配置的服務器
verbose顯示全文本消息
--version顯示版本信息然后退出
3.4 查看日志文件
MySQL維護管理員依賴的一系列日志文件。主要的日志文件有以下幾種:
錯誤日志。它包含啟動和關閉問題以及任意關鍵錯誤的細節。此日志通常名為hostname.err,位于data目錄中。此日志名可用–log-error命令行選項更改
查詢日志。它記錄所有MySQL活動,在診斷問題時非常有用。此日志文件可能會很快地變得非常大,因此不應該長期使用它。此日志通常名為hostname.log,位于data目錄中。此名字可以用–log命令行選項更改
二進制日志。它記錄更新過數據(或者可能更新過數據)的所有語句。此日志通常名為hostname-bin,位于data目錄內。此名字可以用–log-bin命令行選項更改。
緩慢查詢日志。此日志記錄執行緩慢的任何查詢。這個日志在確定數據庫何處需要優化很有用。此日志通常名為hostname-slow.log, 位 于 data 目 錄 中 。 此 名 字 可 以 用–log-slow-queries命令行選項更改
4 改善性能
MySQL一個多用戶多線程的DBMS,換言之,它經常同時執行多個任務。如果這些任務中的某一個執行緩慢,則所有請求都會執行緩慢。若遇到顯著的性能不良,可使用SHOW PROCESSLIST
顯示所有活動進程(以及它們的線程ID和執行時間)。還可以用KILL命令終結某個特定的進(使用這個命令需要作為管理員登錄)。
有不止一種方法編寫同一條SELECT語句。 應該試驗聯結、并、子查詢等,找出最佳的方法。
使用EXPLAIN語句讓MySQL解釋它將如何執行一條SELECT語句。
決不要檢索比需求還要多的數據。換言之,不要用SELECT *(除非你真正需要每個列)
在導入數據時,應該關閉自動提交。你可能還想刪除索引(包括FULLTEXT索引),然后在導入完成后再重建它們
總結
以上是生活随笔為你收集整理的mysql执行语句后回退_MySQL命令学习笔记(八)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东方财富是创业板吗
- 下一篇: spaceX是什么公司 新研发的SN1