原子性(Atomic)
整個事務中的全部操做,要麼所有完成,要麼所有不完成,不可能停滯在中間某個環節。事務在執行過程當中發生錯誤,會被回滾(ROLLBACK)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。
一致性(Consist)
一個事務能夠封裝狀態改變(除非它是一個只讀的)。事務必須始終保持系統處於一致的狀態,無論在任何給定的時間併發事務有多少。也就是說:若是事務是併發多個,系統也必須如同串行事務同樣操做。其主要特徵是保護性和不變性(Preserving an Invariant),以轉帳案例爲例,假設有五個帳戶,每一個帳戶餘額是100元,那麼五個帳戶總額是500元,若是在這個5個帳戶之間同時發生多個轉帳,不管併發多少個,好比在A與B帳戶之間轉帳5元,在C與D帳戶之間轉帳10元,在B與E之間轉帳15元,五個帳戶總額也應該仍是500元,這就是保護性和不變性。
隔離性(Isolated)
隔離狀態執行事務,使它們好像是系統在給定時間內執行的惟一操做。若是有兩個事務,運行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認爲只有該事務在使用系統。這種屬性有時稱爲串行化,爲了防止事務操做間的混淆,必須串行化或序列化請求,使得在同一時間僅有一個請求用於同一數據。
持久性(Durable)
在事務完成之後,該事務對數據庫所做的更改便持久的保存在數據庫之中,並不會被回滾。mysql
基本語法sql
-- 使用set語句來改變自動提交模式 SET autocommit = 0; /*關閉*/ SET autocommit = 1; /*開啓*/ -- 注意: -- 1.MySQL中默認是自動提交 -- 2.使用事務時應先關閉自動提交 -- 開始一個事務,標記事務的起始點 START TRANSACTION -- 提交一個事務給數據庫 COMMIT -- 將事務回滾,數據回到本次事務的初始狀態 ROLLBACK -- 還原MySQL數據庫的自動提交 SET autocommit =1; -- 保存點 SAVEPOINT 保存點名稱 -- 設置一個事務保存點 ROLLBACK TO SAVEPOINT 保存點名稱 -- 回滾到保存點 RELEASE SAVEPOINT 保存點名稱 -- 刪除保存點
主鍵 : 某一個屬性組能惟一標識一條記錄數據庫
特色 :服務器
做用 : 避免同一個表中某數據列中的值重複數據結構
與主鍵索引的區別併發
CREATE TABLE `Grade`( `GradeID` INT(11) AUTO_INCREMENT PRIMARYKEY, `GradeName` VARCHAR(32) NOT NULL UNIQUE -- 或 UNIQUE KEY `GradeID` (`GradeID`) )
做用 : 快速定位特定數據函數
注意 :工具
CREATE TABLE `result`( -- 省略一些代碼 INDEX/KEY `ind` (`studentNo`,`subjectNo`) -- 建立表時添加 ) -- 建立後添加 ALTER TABLE `result` ADD INDEX `ind`(`studentNo`,`subjectNo`);
做用 : 快速定位特定數據性能
注意 :測試
-- 方法一:建立表時 CREATE TABLE 表名 ( 字段名1 數據類型 [完整性約束條件…], 字段名2 數據類型 [完整性約束條件…], [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [索引名] (字段名[(長度)] [ASC |DESC]) );
-- 方法二:CREATE在已存在的表上建立索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(長度)] [ASC |DESC]) ;
-- 方法三:ALTER TABLE在已存在的表上建立索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(長度)] [ASC |DESC]) ;
刪除索引:DROP INDEX 索引名 ON 表名字
;
刪除主鍵索引: ALTER TABLE 表名 DROP PRIMARY KEY
;
顯示索引信息: SHOW INDEX FROM student
;
/*增長全文索引*/ ALTER TABLE `school`.`student` ADD FULLTEXT INDEX `studentname` (`StudentName`); /*EXPLAIN : 分析SQL語句執行性能*/ EXPLAIN SELECT * FROM student WHERE studentno='1000'; /*使用全文索引*/ -- 全文搜索經過 MATCH() 函數完成。 -- 搜索字符串作爲 against() 的參數被給定。搜索以忽略字母大小寫的方式執行。對於表中的每一個 記錄行,MATCH() 返回一個相關性值。即,在搜索字符串與記錄行在 MATCH() 列表中指定的列的文 本之間的類似性尺度。 EXPLAIN SELECT *FROM student WHERE MATCH(studentname) AGAINST('love');
注意:MySQL 5.6 之前的版本,只有 MyISAM 存儲引擎支持全文索引;MySQL 5.6 及之後的版本,MyISAM 和 InnoDB 存儲引擎均支持全文索引;只有字段的數據類型爲 char、varchar、text 及其系列才能夠建全文索引。測試或使用全文索引時,要先看一下本身的 MySQL 版本、存儲引擎和數據類型是否支持全文索引。
hash
類型的索引:查詢單條快,範圍查詢慢
btree
類型的索引:b+
樹,層數越多,數據量指數級增加(咱們就用它,由於innodb
默認支持它)
不一樣的存儲引擎支持的索引類型也不同
InnoDB
支持事務,支持行級別鎖定,支持 B-tree
、Full-text
等索引,不支持 Hash
索引;MyISAM
不支持事務,支持表級別鎖定,支持 B-tree
、Full-text
等索引,不支持 Hash
索引;Memory
不支持事務,支持表級別鎖定,支持 B-tree
、Hash
等索引,不支持 Full-text
索引;NDB
支持事務,支持行級別鎖定,支持Hash
索引,不支持 B-tree
、Full-text
等索引;Archive
不支持事務,支持表級別鎖定,不支持 B-tree
、Hash
、Full-text
等索引;/* 用戶和權限管理 */ 用戶信息表:mysql.user -- 刷新權限 FLUSH PRIVILEGES -- 增長用戶 CREATE USER chen IDENTIFIED BY '123456' CREATE USER 用戶名 IDENTIFIED BY [PASSWORD] 密碼(字符串) - 必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。 - 只能建立用戶,不能賦予權限。 - 用戶名,注意引號:如 'user_name'@'192.168.1.1' - 密碼也需引號,純數字密碼也要加引號 - 要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定爲由PASSWORD()函數返回的 混編值,需包含關鍵字PASSWORD -- 重命名用戶 RENAME USER chen TO chen1 RENAME USER old_user TO new_user -- 設置密碼 SET PASSWORD = PASSWORD('密碼') -- 爲當前用戶設置密碼 SET PASSWORD FOR 用戶名 = PASSWORD('密碼') -- 爲指定用戶設置密碼 -- 刪除用戶 DROP USER chen1 DROP USER 用戶名 -- 分配權限/添加用戶 GRANT 權限列表 ON 表名 TO 用戶名 [IDENTIFIED BY [PASSWORD] 'password'] - all privileges 表示全部權限 - *.* 表示全部庫的全部表 - 庫名.表名 表示某庫下面的某表 -- 查看權限 SHOW GRANTS FOR root@localhost; SHOW GRANTS FOR 用戶名 -- 查看當前用戶權限 SHOW GRANTS; 或 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER(); -- 撤消權限 REVOKE 權限列表 ON 表名 FROM 用戶名 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 用戶名 -- 撤銷全部權限
-- 權限列表 ALL [PRIVILEGES] -- 設置除GRANT OPTION以外的全部簡單權限 ALTER -- 容許使用ALTER TABLE ALTER ROUTINE -- 更改或取消已存儲的子程序 CREATE -- 容許使用CREATE TABLE CREATE ROUTINE -- 建立已存儲的子程序 CREATE TEMPORARY TABLES -- 容許使用CREATE TEMPORARY TABLE CREATE USER -- 容許使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 CREATE VIEW -- 容許使用CREATE VIEW DELETE -- 容許使用DELETE DROP -- 容許使用DROP TABLE EXECUTE -- 容許用戶運行已存儲的子程序 FILE -- 容許使用SELECT...INTO OUTFILE和LOAD DATA INFILE INDEX -- 容許使用CREATE INDEX和DROP INDEX INSERT -- 容許使用INSERT LOCK TABLES -- 容許對您擁有SELECT權限的表使用LOCK TABLES PROCESS -- 容許使用SHOW FULL PROCESSLIST REFERENCES -- 未被實施 RELOAD -- 容許使用FLUSH REPLICATION CLIENT -- 容許用戶詢問從屬服務器或主服務器的地址 REPLICATION SLAVE -- 用於複製型從屬服務器(從主服務器中讀取二進制日誌事件) SELECT -- 容許使用SELECT SHOW DATABASES -- 顯示全部數據庫 SHOW VIEW -- 容許使用SHOW CREATE VIEW SHUTDOWN -- 容許使用mysqladmin shutdown SUPER -- 容許使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL語句, mysqladmin debug命令;容許您鏈接(一次),即便已達到max_connections。 UPDATE -- 容許使用UPDATE USAGE -- 「無權限」的同義詞 GRANT OPTION -- 容許授予權限
-- 分析和存儲表的關鍵字分佈 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE 表名 ... -- 檢查一個或多個表是否有錯誤 CHECK TABLE tbl_name [, tbl_name] ... [option] ... option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED} -- 整理數據文件的碎片 OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
數據庫備份必要性
MySQL數據庫備份方法
mysqldump客戶端
做用 :
-- 導出 1. 導出一張表 -- mysqldump -uroot -p123456 school student >D:/a.sql mysqldump -u用戶名 -p密碼 庫名 表名 > 文件名(D:/a.sql) 2. 導出多張表 -- mysqldump -uroot -p123456 school student result >D:/a.sql mysqldump -u用戶名 -p密碼 庫名 表1 表2 表3 > 文件名(D:/a.sql) 3. 導出全部表 -- mysqldump -uroot -p123456 school >D:/a.sql mysqldump -u用戶名 -p密碼 庫名 > 文件名(D:/a.sql) 4. 導出一個庫 -- mysqldump -uroot -p123456 -B school >D:/a.sql mysqldump -u用戶名 -p密碼 -B 庫名 > 文件名(D:/a.sql) -- 導入 1. 在登陸mysql的狀況下: -- source D:/a.sql source 備份文件 2. 在不登陸的狀況下 mysql -u用戶名 -p密碼 庫名 < 備份文件