mysql數據庫自帶的事件無效(mysql事務失效原因)

本文目錄一覽:

mysql服務器無效怎麼解決

1.遇到這個問題先不要重新安裝MySQL數據庫,解決方法需要清理下WIndows的緩存目錄就可以了。

2.按「windows鍵+R」打開運行對話框,輸入命令「cmd」,回車打開DOS窗口。

3.輸入「del c:windowstemp*.* /s /q」,等待文件刪除完,MySQL自然會恢復正常。

二,配置文件配置錯誤(mysql啟動錯誤1067的解決 )

問題一

刪除%windows%/my.ini 刪除其它地方的my.ini 在mysql安裝目錄下把my-small.ini複製為my.ini 在my.ini

最後一行插入: CODE: [mysqld] #設置basedir指向mysql的安裝路徑

basedir=C:mysql-5.1.11-beta-win32 datadir=C:mysql-5.1.11-beta-win32data

重新啟動。。。

C:mysql-5.1.11-beta-win32innet start mysql MySQL

服務正在啟動 . MySQL 服務無法啟動。 系統出錯。

發生系統錯誤 1067。 進程意外終止。

C:mysql-5.1.11-beta-win32inmysqld-nt –remove Service successfully removed.

C:mysql-5.1.11-beta-win32inmysqld-nt –install Service successfully installed.

C:mysql-5.1.11-beta-win32innet start mysql MySQL 服務正在啟動 . MySQL 服務已經啟動成功。 C:mysql-5.1.11-beta-win32innet stop mysql MySQL 服務正在停止.. MySQL 服務已成功停止。

問題二

Mysql裝好後,重啟電腦第二次發現服務無法啟動。提示如下:

————————

MySQL 服務無法啟動。

系統出錯。

發生系統錯誤 1067。

進程意外終止。

——————

查看了F:ProgramDataMySQLMySQL Server 5.5data 這個目錄中的錯誤日誌,顯示如下內容:

130825 20:47:50 [Note] Plugin ‘FEDERATED’ is disabled.

130825 20:47:50 InnoDB: The InnoDB memory heap is disabled

130825 20:47:50 InnoDB: Mutexes and rw_locks use Windows interlocked functions

130825 20:47:50 InnoDB: Compressed tables use zlib 1.2.3

130825 20:47:50 InnoDB: Error: unable to create temporary file; errno: 2

130825 20:47:50 [ERROR] Plugin ‘InnoDB’ init function returned error.

130825 20:47:50 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

130825 20:47:50 [ERROR] Unknown/unsupported storage engine: INNODB

130825 20:47:50 [ERROR] Aborting

其中核心提示是這句,臨時文件無法創建:

130825 20:47:50 InnoDB: Error: unable to create temporary file; errno: 2

因此查看my.ini

[mysqld]區段內加入:

#自己指定的臨時文件目錄

tmpdir=”臨時目錄”

MySQL的事物怎麼失效了

MYSQL事務處理失效原因

最近項目中使用mysql數據庫時出現一個問題,運用spring的事務註解(@transaction)來管理事務時,發現用事務註解@transaction標記的方法里,如果出現異常,事務並沒有回滾,而是直接提交到了數據庫,剛開始還以為是spring的事務配置有問題,檢查一遍後還是不行,最後查閱了很多資料才發現原來是mysql數據庫存儲引擎的問題。

mysql有多種存儲引擎,有些版本(mysql5.5.5以前默認是MyISAM,mysql5.5.5以後默認是InnoDB)安裝時默認的存儲引擎是MyISAM,而MyISAM存儲引擎是不支持事務處理的,所以才導致了項目中service層的某個方法事務失效,解決的方法就是將需要事務管理的表的存儲引擎改為InnoDB,下面將詳細說明mysql的幾種存儲引擎以及如何修改存儲引擎:

一、查看mysql數據庫所支持的存儲引擎

show ENGINES;

該語句將列出該版本的mysql所支持的所有存儲引擎,並且可看到默認的存儲引擎為InnoDB(這個是我修改之後的,剛安裝mysql完默認的是MyISAM),也可以使用下面語句來查看mysql默認的存儲引擎:

SHOW VARIABLES LIKE ‘storage_engine’;

二、MyISAM存儲引擎

MyISAM基於ISAM存儲引擎,並對其進行擴展。它是在Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事務。MyISAM主要特性有:

1、大文件(達到63位文件長度)在支持大文件的文件系統和操作系統上被支持

2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合併相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊自動完成

3、每個MyISAM表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16

4、最大的鍵長度是1000位元組,這也可以通過編譯來改變,對於鍵長度超過250位元組的情況,一個超過1024位元組的鍵將被用上

5、BLOB和TEXT列可以被索引

6、NULL被允許在索引的列中,這個值占每個鍵的0~1個位元組

7、所有數字鍵值以高位元組優先被存儲以允許一個更高的索引壓縮

8、每個MyISAM類型的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被刷新。所以說,MyISAM類 型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快

9、可以把數據文件和索引文件放在不同目錄

10、每個字符列可以有不同的字符集

11、有VARCHAR的表可以固定或動態記錄長度

12、VARCHAR和CHAR列可以多達64KB

使用MyISAM引擎創建數據庫,將產生3個文件。文件的名字以表名字開始,擴展名之處文件類型:frm文件存儲表定義、數據文件的擴展名為.MYD(MYData)、索引文件的擴展名時.MYI(MYIndex)

三、InnoDB存儲引擎

InnoDB是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,上圖也看到了,InnoDB是默認的MySQL引擎。InnoDB主要特性有:

1、InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句中提供一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySQL的表類型混合起來,甚至在同一個查詢中也可以混合

2、InnoDB是為處理巨大數據量的最大性能設計。它的CPU效率可能是任何其他基於磁盤的關係型數據庫引擎鎖不能匹敵的

3、InnoDB存儲引擎完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩衝池。InnoDB將它的表和索引在一個邏輯表空間中,表空間可以包含數個文件(或原始磁盤文件)。這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上

4、InnoDB支持外鍵完整性約束,存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6位元組的ROWID,並以此作為主鍵

5、InnoDB被用在眾多需要高性能的大型數據庫站點上

InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL數據目錄下創建一個名為ibdata1的10MB大小的自動擴展數據文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日誌文件

四、MEMORY存儲引擎

MEMORY存儲引擎將表中的數據存儲到內存中,未查詢和引用其他表數據提供快速訪問。MEMORY主要特性有:

1、MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500位元組的最大鍵長度

2、MEMORY存儲引擎執行HASH和BTREE縮影

3、可以在一個MEMORY表中有非唯一鍵值

4、MEMORY表使用一個固定的記錄長度格式

5、MEMORY不支持BLOB或TEXT列

6、MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引

7、MEMORY表在所由客戶端之間共享(就像其他任何非TEMPORARY表)

8、MEMORY表內存被存儲在內存中,內存是MEMORY表和服務器在查詢處理時的空閑中,創建的內部表共享

9、當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的內存,應該執行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)

五、存儲引擎的選擇

不同的存儲引擎都有各自的特點,以適應不同的需求,如下表所示:

功  能    MYISAM    Memory    InnoDB    Archive  

存儲限制    256TB    RAM    64TB    None  

支持事物    No    No    Yes    No  

支持全文索引    Yes    No    No    No  

支持數索引    Yes    Yes    Yes    No  

支持哈希索引    No    Yes    No    No  

支持數據緩存    No    N/A    Yes    No  

支持外鍵    No    No    Yes    No  

如果要提供提交、回滾、崩潰恢復能力的事物安全(ACID兼容)能力,並要求實現並發控制,InnoDB是一個好的選擇

如果數據表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率

如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在內存中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高並發的插入操作,但是本身不是事務安全的。Archive非常適合存儲歸檔數據,如記錄日誌信息可以使用Archive

使用哪一種引擎需要靈活選擇,一個數據庫中多個表可以使用不同引擎以滿足各種性能和實際需求,使用合適的存儲引擎,將會提高整個數據庫的性能

六、修改存儲引擎

1、修改mysql默認存儲引擎為InnoDB

關閉mysql服務: net stop mysql

找到mysql安裝目錄下的my.ini文件:

找到default-storage-engine=MYISAM 改為default-storage-engine=INNODB

找到skip-innodb 改為#skip-innodb,即注釋掉該行,skip-innodb為忽略InnoDB的意思,此處需要開啟InnoDB,故需要把它注釋

啟動mysql服務:net start mysql

2、查看錶使用的存儲引擎

show table status from db_name where name=’table_name’;

3、修改表的存儲引擎

alter table table_name engine=innodb;

mysql數據庫錯誤:無效的SQL

你這樣的插入sql語句在sql 2005中是對的,但是在mysql中有時候不行[lz 注意了:是有時候不行,並不是說總是不行]

你試試這樣的寫法

insert into tablename (字段1,字段2,字段3,,,,) values (值1,值2,值3,,,,,)

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/151704.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-11 13:43
下一篇 2024-11-11 13:43

相關推薦

發表回復

登錄後才能評論