您好,登錄后才能下訂單哦!
本文主要給大家介紹Mysql數據庫操作事務及存儲引擎講義,希望可以給大家補充和更新些知識,如有其它問題需要了解的可以持續在億速云行業資訊里面關注我的更新文章的。
事務是一種機制,一個操作序列,包含了一組數據庫操作命令,并且把所有命令作為一個整體一起想系統提交或撤銷操作請求,
即這一組數據庫命令要么都執行,要么都不執行,事務是一個不可分割的工作邏輯單元,在數據庫系統上執行并發操作時,
事務是最小的控制單元,事務適用于用戶同時操作數據庫系統的場景,如銀行,保險公司
以及證券交易系統等,通過事務的整體以保證數據的一致性,事務是保證了一組操作的平穩性和可預測性的技術。
原子性(Atomicity)
原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。
一致性(Consistency)
一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處于一致性狀態。
拿轉賬來說,假設用戶A和用戶B兩者的錢加起來一共是5000,那么不管A和B之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。隔離性(Isolation)
隔離性是當多個用戶并發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個并發事務之間要相互隔離。
即要達到這么一種效果:對于任意兩個并發的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在并發地執行。持久性(Durability)
持久性是指一個事務一旦被提交了,那么對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。
例如我們在使用JDBC操作數據庫時,在提交事務方法后,提示用戶事務操作完成,當我們程序執行完成直到看到提示后,就可以認定事務以及正確提交,
即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因為故障而沒有執行事務的重大錯誤。
總的說,數據庫事務無非就兩種:讀取事務(select)、修改事務(update,insert)。在沒有事務隔離控制的時候,多個事務在同一時刻對同一數據的操作可能就會影響到最終期望的結果,通常有四種情況:
(1) 兩個更新事務同時修改一條數據時,很顯然這種情況是最嚴重的了,程序中無論如何也不能出現這種情況,因為它會造成更新的丟失!
(2) 一個更新事務更新一條數據時,另一個讀取事務讀取了還沒提交的更新,這種情況下會出現讀取到臟數據。
(3) 一個讀取事務讀取一條數據時,另一個更新事務修改了這條數據,這時就會出現不可重現的讀取。
(4)一個讀取事務讀取時,另一個插入事務(注意此處時插入)插入了一條新數據,這樣就可能多讀出一條數據,出現幻讀。
以上四種情況描述完畢,相信大家也發現規律了,前三種是對同一條數據的并發操作,對程序的結果可能產生致命影響,尤其是金融等實時性,準確性要求極高的系統,絕不容許這三中情況的出現,
相比第四種情況不會影響數據的真實性,在很多情況下是允許的,如社交論壇等實時性要求不高的系統!
綜上四個情況,我們可以大致這樣簡單的理解(最初說的兩種事務的自由組合2*2=4):
A) 修改時允許修改(丟失更新)
B) 修改時允許讀取(臟讀)
C) 讀取時允許修改(不可重復讀)
D) 讀取時允許插入(幻讀)
從上到下問題越來越不嚴重,但所需的性能開銷卻越大。因為不同的系統允許不同級別的情況,所以就出現了事務隔離這么一個東東,來允許我們設定數據庫的并發行為。
臟讀
臟讀是指在一個事務處理過程里讀取了另一個未提交的事務中的數據。
當一個事務正在多次修改某個數據,而在這個事務中這多次的修改都還未提交,這時一個并發的事務來訪問該數據,就會造成兩個事務得到的數據不一致。例如:用戶A向用戶B轉賬100元,對應SQL命令如下
update account set money=money+100 where name=’B’; (此時A通知B)
update account set money=money - 100 where name=’A’;
當只執行第一條SQL時,A通知B查看賬戶,B發現確實錢已到賬(此時即發生了臟讀),而之后無論第二條SQL是否執行,只要該事務不提交,則所有操作都將回滾,那么當B以后再次查看賬戶時就會發現錢其實并沒有轉。不可重復讀
不可重復讀是指在對于數據庫中的某個數據,一個事務范圍內多次查詢卻返回了不同的數據值,這是由于在查詢間隔,被另一個事務修改并提交了。
例如事務T1在讀取某一數據,而事務T2立馬修改了這個數據并且提交事務給數據庫,事務T1再次讀取該數據就得到了不同的結果,發送了不可重復讀。
不可重復讀和臟讀的區別是,臟讀是某一事務讀取了另一個事務未提交的臟數據,而不可重復讀則是讀取了前一事務提交的數據。
在某些情況下,不可重復讀并不是問題,比如我們多次查詢某個數據當然以最后查詢得到的結果為主。但在另一些情況下就有可能發生問題,例如對于同一個數據A和B依次查詢就可能不同,A和B就可能打起來了……虛讀(幻讀)
幻讀是事務非獨立執行時發生的一種現象。例如事務T1對一個表中所有的行的某個數據項做了從“1”修改為“2”的操作,這時事務T2又對這個表中插入了一行數據項,而這個數據項的數值還是為“1”并且提交給數據庫。而操作事務T1的用戶如果再查看剛剛修改的數據,會發現還有一行沒有修改,其實這行是從事務T2中添加的,就好像產生幻覺一樣,這就是發生了幻讀。
幻讀和不可重復讀都是讀取了另一條已經提交的事務(這點就臟讀不同),所不同的是不可重復讀查詢的都是同一個數據項,而幻讀針對的是一批數據整體(比如數據的個數)。SQL標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的并發處理,并擁有更低的系統開銷。
Read Uncommitted(讀取未提交內容)
在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用于實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為臟讀(Dirty Read);
Read Committed(讀取提交內容)
這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別 也支持所謂的不可重復讀(Nonrepeatable Read),因為同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果;
Repeatable Read(可重讀)
這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在并發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。 簡單的說,幻讀指當用戶讀取某一范圍的數據行時,另一個事務又在該范圍內插入了新行,當用戶再讀取該范圍的數據行時,會發現有新的“幻影” 行。 InnoDB和Falcon存儲引擎通過多版本并發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題
Serializable(可串行化)
這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。 這四種隔離級別采取不同的鎖類型來實現,若讀取的是同一個數據的話,就容易發生問題。例如: 臟讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據,由于某些原因,前一個RollBack了操作,則后一個事務所讀取的數據就會是不正確的。 不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不一致,這可能是兩次查詢過程中間插入了一個事務更新的原有的數據。 幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不一致,例如有一個事務查詢了幾列(Row)數據,而另一個事務卻在此時插入了新的幾列數據,先前的事務在接下來的查詢中,就會發現有幾列數據是它先前所沒有的。
默認情況下Mysql的事務是自動提交的,之前我們用SQL操作數據庫時,一條數據執行后
系統胡自動執行事務提交。當需要一組語句作為一個事務提交時,需要手動對事務進行控制。
手動控制事務有兩種方法,一種是使用事務處理命令控制,另一種是使用set設置事務的處理方式
使用事務命令控制事務(3個命令)
begin:表示開始一個事務,后面會有多條數據庫操作語句執行
commit:表示提交一個事務,對應前面的begin操作,它們之間的數據庫操作語句一起完成
rollback:表示回滾一個事務,再begin和commit之間,如果某一個數據庫的操作語句出現錯誤
執行rollback回滾,數據庫回到begin之前的狀態,也就是操作語句都沒執行。
這是之前的數據表
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
+----+----------+----------+-----+
2 rows in set (0.01 sec)
mysql> insert into info (name,address,age) values ('wangwu','hangzhou',30);
Query OK, 1 row affected (0.00 sec)
mysql> select * from info; #查看數據表的數據之后,發現默認是自動提交的
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
+----+----------+----------+-----+
3 rows in set (0.00 sec)
mysql> begin; #開始事務
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('zhaoliu','hangzhou',31); #我們再加一條操作命令,數據
Query OK, 1 row affected (0.00 sec)
mysql> savepoint a; #我們打上一個標記a,下次我們可以回滾到標記a
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('tianqi','hangzhou',33); #我們再加一條數據
Query OK, 1 row affected (0.00 sec)
mysql> savepoint b; #打上標記b
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('heipa','hangzhou',35); #再加一條數據
Query OK, 1 row affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
| 5 | tianqi | hangzhou | 33 |
| 6 | heipa | hangzhou | 35 |
[root@localhost ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use schol;
ERROR 1049 (42000): Unknown database 'schol'
mysql> use school;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
mysql>
mysql> show tables;
+------------------+
| Tables_in_school |
+------------------+
| hob |
| info |
| user |
| view_user |
+------------------+
4 rows in set (0.00 sec)
mysql> select * from info; #發現沒有數據,我們創建的事務只是存放在內存中,并沒有真實寫到硬盤中,提交事務才行
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
+----+----------+----------+-----+
3 rows in set (0.00 sec)
mysql> rollback to b;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
| 5 | tianqi | hangzhou | 33 |
+----+----------+----------+-----+
5 rows in set (0.00 sec)
mysql> rollback to a;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
+----+----------+----------+-----+
3 rows in set (0.00 sec)
mysql> rollback to b;
ERROR 1305 (42000): SAVEPOINT b does not exist
#我們再插一行數據進去,再試試回滾。
mysql> insert into info (name,address,age) values ('zhaoliu','hangzhou',31);
Query OK, 1 row affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
我們只要執行rollback,而不是回滾到一個節點,都視為提交事務了
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> insert into info (name,address,age) values ('tianqi','hangzhou',33);
Query OK, 1 row affected (0.00 sec)
mysql> commit; #提交事務
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
| 8 | tianqi | hangzhou | 33 |
+----+----------+----------+-----+
5 rows in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> update info set address='beijing' where name='tianqi'; #把tianqi的address修改成beijing
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
| 8 | tianqi | hangzhou | 33 |
+----+----------+----------+-----+
5 rows in set (0.00 sec)
mysql> set autocommit=1;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from info;
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | zhaoliu | hangzhou | 31 |
| 8 | tianqi | beijing | 33 |
+----+----------+----------+-----+
5 rows in set (0.00 sec)
?MySQL中的數據用各種不同的技術存儲在文件中,每一種技術都使用不同的存儲機制,索引技巧,鎖定水平并最終提供不同的功能和能力,這些不同的技術以及配套的功能在MySQL中稱為存儲引擎
?存儲引擎就是MySQL將數據存儲在文件系統中的存儲方式或存儲格式
?目前MySQL常用的兩種存儲引擎:
??MyISQM
??InnoDB
?MySQL存儲引擎是MySQL數據庫云服務器中的組件,負責為數據庫執行實際的數據I/O操作
?使用特殊存儲引擎的主要優點之一在于,僅需提供特殊應用所需的特性,數據庫中的系統開銷較小,具有更有效和更高的數據庫性能
?MySQL系統中,存儲引擎處于文件系統之上,在數據保存到數據文件之前會傳輸存儲引擎,之后按照各個存儲引擎的存儲格式進行存儲
ISAM的特點:
ISAM執行讀取操作的速度很快
而且不占用大量的內存和存儲資源
他不支持事務處理
不能夠容錯
MyISAM的特點:
不支持事務
表級鎖定形式,數據在更新時鎖定整個表
數據庫在讀寫過程中相互阻塞
●會在數據寫入的過程阻塞用戶數據的讀取
●也會在數據讀取的過程中阻塞用戶的數據寫入
可通過key_buffer_size來設置緩存索引,提高訪問性能,減少磁盤IO的壓力
●但緩存只會緩存索引文件,不會緩存數據
采用MyISAM存儲引擎數據單獨寫入或讀取,速度過程較快且占用資源相對少
MyISAM存儲引擎它不支持外鍵約束,只支持全文索引
每個MyISAM在磁盤.上存儲成三個文件,每- -個文件的名字以表的名字開始,擴展名指出文件類型
MyISAM在磁盤.上存儲的文件
●數據文件的擴展名為.MYD (MYData)
●索引文件的擴展名是.MYI (MYIndex)
MyISAM適用的生產場景舉例
公司業務不需要事務的支持
一般單方面讀取數據比較多的業務,或單方面寫入數據比較多的業務
MyISAM存儲引擎數據讀寫都比較頻繁場景不適合
使用讀寫并發訪問相對較低的業務
數據修改相對較少的業務
對數據業務一致性要求不是非常高的業務
服務器硬件資源相對比較差InnoDB特點介紹
支持事務:支持4個事務隔離級別
行級鎖定,但是全表掃描仍然會是表級鎖定
讀寫阻塞與事務隔離級別相關
具有非常高效的緩存特性:能緩存索引,也能緩存數據
表與主鍵以簇的方式存儲
支持分區、表空間,類似oracle數據庫
支持外鍵約束,5.5以前不支持全文索引,5.5版本以后支持全文索引
對硬件資源要求還是比較高的場合
InnoDB適用生產場景分析
業務需要事務的支持
行級鎖定對高并發有很好的適應能力,但需確保查詢是通過索引來完成
業務數據更新較為頻繁的場景,如:論壇,微博等
業務數據一致性要求較高,例如:銀行業務
硬件設備內存較大,利用Innodb較好的緩存能力來提高內存利用率,減少磁盤I0的壓力
企業選擇存儲引擎依據
需要考慮每個存儲引擎提供了那些不同的核心功能及應運場景
支持的字段和數據類型
所有引擎都支持通用的數據類型
但不是所有的引擎都支持其他的字段類型,如二進制對象
鎖定類型:不同的存儲引擎支持不同級別的鎖定
表鎖定
行鎖定
建立索引在搜索和恢復數據庫中的數據的時候能夠顯著提高性能
不同的存儲引擎提供不同的制作索引的技術
有些存儲引擎根本不支持索引
事務處理的支持
事務處理功能通過提供在向表中更新和插入信息期間的可靠性
課根據企業業務是否支持事務選項選擇存儲引擎
配置存儲引擎
在企業中選擇好合適的存儲引擎之后,就可以進行修改了
查看數據庫可配置的存儲引擎
查看表正在使用的存儲引擎
配置存儲引擎為所選擇的類型
使用show engines查看系統支持的存儲引擎
方法1:
show table status from 庫名 where name='表名;
方法2:
show create table 表名;
修改存儲引擎
方法1: alter table修改;
alter table table_ name engine=引擎;
方法2:修改my.cnf,指定默認存儲引擎并重啟服務
default-storage-engine=InnDB
方法3: create table創建表時指定存儲引擎
create table 表名 (字段) engine= 引擎
方法4: Mysql_ convert_ table_ format 轉化存儲引擎
Mysql_ convert_ table_ format -user=root -password=密碼
- sock=/tmp/mysql.sock - engine =引擎 庫名 表名
mysql> show engines; #查看系統默認的存儲引擎
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql> show create table info; #查看info這張表,存儲引擎是默認InnoDB
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| info | CREATE TABLE "info" (
"id" int(4) NOT NULL AUTO_INCREMENT,
"name" varchar(10) NOT NULL,
"address" varchar(50) DEFAULT 'nanjing',
"age" int(3) NOT NULL,
PRIMARY KEY ("id"),
UNIQUE KEY "index_name" ("name"),
FULLTEXT KEY "full_addr" ("address")
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> quit
Bye
[root@localhost ~]# vim /etc/my.cnf #進入數據庫主配置文件
default-storage-engine=Myisam #添加Myisam的存儲引擎
[root@localhost ~]# mysql -u root -p 進入數據庫
mysql> use school; #進入school數據庫
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table a ( id int ); #創建a數據表
Query OK, 0 rows affected (0.00 sec)
mysql> show create table a; #查看a數據表,發現存儲引擎變成了MyISAM
+-------+-------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------+
| a | CREATE TABLE "a" (
"id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter table a engine=innodb; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table a; +-------+-------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------+ | a | CREATE TABLE "a" ( "id" int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
看了以上關于Mysql數據庫操作事務及存儲引擎講義,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,如有需要更加專業的解答,可在官網聯系我們的24小時售前售后,隨時幫您解答問題的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。