mysql -u username -p
service mysql start/stop
service mysql status
show databases
describe table_name;
在缺省模式下,MYSQL是autocommit模式的,所有的數據庫更新操作都會即時提交,所以在缺省情況下,mysql是不支持事務的。
但是如果你的MYSQL表類型是使用InnoDB Tables 或 BDB tables的話,你的MYSQL就可以使用事務處理,使用SET AUTOCOMMIT=0就可以使MYSQL允許在非autocommit模式,在非autocommit模式下,你必須使用COMMIT來提交你的更改,或者用ROLLBACK來回滾你的更改。
示例如下:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
MySQL是一個小型關系型數據庫管理系統,開發者為瑞典MySQL AB公司,現在已經被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統與其他的大型數據庫例如Oracle、DB2、SQL Server等相比功能稍弱一些
1、可以處理擁有上千萬條記錄的大型數據
2、支持常見的SQL語句規范
3、可移植行高,安裝簡單小巧
4、良好的運行效率,有豐富信息的網絡支持
5、調試、管理,優化簡單(相對其他大型數據庫)
Char是一種固定長度的類型,varchar是一種可變長度的類型
隔離性、持續性、一致性、原子性
SQL標准定義的四個隔離級別為:
read uncommited:讀取未提交內容
read committed:讀取提交內容
repeatable read:可重讀
serializable:可串行化
詳細解釋如下:
Read Uncommitted(讀取未提交內容)
在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為髒讀(Dirty Read)。
Read Committed(讀取提交內容)
這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別也支持所謂的不可重復讀(Nonrepeatable Read),因為同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果。
Repeatable Read(可重讀)
這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在並發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀(Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數據行時,另一個事務又在該范圍內插入了新行,當用戶再讀取該范圍的數據行時,會發現有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本並發控制(MVCC,Multiversion Concurrency Control 間隙鎖)機制解決了該問題。注:其實多版本只是解決不可重復讀問題,而加上間隙鎖(也就是它這裡所謂的並發控制)才解決了幻讀問題。
Serializable(可串行化)
這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
對於不同的事務,采用不同的隔離級別分別有不同的結果。不同的隔離級別有不同的現象。主要有下面3種現在:
1、髒讀(dirty read):一個事務可以讀取另一個尚未提交事務的修改數據。
2、非重復讀(nonrepeatable read):在同一個事務中,同一個查詢在T1時間讀取某一行,在T2時間重新讀取這一行時候,這一行的數據已經發生修改,可能被更新了(update),也可能被刪除了(delete)。
3、幻像讀(phantom read):在同一事務中,同一查詢多次進行時候,由於其他插入操作(insert)的事務提交,導致每次返回不同的結果集。
不同的隔離級別有不同的現象,並有不同的鎖定/並發機制,隔離級別越高,數據庫的並發性就越差,4種事務隔離級別分別表現的現象如下表:
MySQL服務器通過權限表來控制用戶對數據庫的訪問,權限表存放在mysql數據庫裡,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。下面分別介紹一下這些表的結構和內容:
user權限表:記錄允許連接到服務器的用戶帳號信息,裡面的權限是全局級的。
db權限表:記錄各個帳號在各個數據庫上的操作權限。
table_priv權限表:記錄數據表級的操作權限。
columns_priv權限表:記錄數據列級的操作權限。
host權限表:配合db權限表對給定主機上數據庫級操作權限作更細致的控制。這個權限表不受GRANT和REVOKE語句的影響。
MyISAM indexed sequential access method (有索引的順序訪問方法)
MyISAM 具有檢查和修復表格的大多數工具。表格可以被壓縮,而且支持全文收索
不是事務安全的,而且不支持外鍵。
MEMORY 也是以前的(HEAP) 該類型表存儲在內存中,表的索引是哈希分布的。
merge 這些表為了查詢目的,把myisam 表集合作為單個表,因此你可以在某些操作系統中避開最大文件大小的限制。
archive 這種類型的表只支持,insert ,select 不支持delete,update,replace ,不使用索引。
csv 這些表保存在服務器的單個文件中,它包含了用逗號間隔的數據。
innodb 這種表是事務安全的。提供了commit(提交) rollback(實務回滾)支持外鍵,比myisam慢。
修改mysql存儲引擎alter table tablename type = innodb;
Show status
一些值得監控的變量值:
Bytes_received和Bytes_sent
和服務器之間來往的流量。
Com_*服務器正在執行的命令。
Created_*在查詢執行期限間創建的臨時表和文件。
Handler_*存儲引擎操作。
Select_*不同類型的聯接執行計劃。
Sort_*幾種排序信息。
Show session status like ‘Select’;
Show profiles
SET profiling=1;
Show profiles\G
Show profile;
NUMERIC和DECIMAL類型被MySQL實現為同樣的類型,這在SQL92標准允許。他們被用於保存值,該值的准確精度是極其重要的值,例如與金錢有關的數據。當聲明一個類是這些類型之一時,精度和規模的能被(並且通常是)指定;例如:
salary DECIMAL(9,2)
在這個例子中,9(precision)代表將被用於存儲值的總的小數位數,而2(scale)代表將被用於存儲小數點後的位數。因此,在這種情況下,能被存儲在salary列中的值的范圍是從-9999999.99到9999999.99。在ANSI/ISO SQL92中,句法DECIMAL(p)等價於DECIMAL(p,0)。同樣,句法DECIMAL等價於DECIMAL(p,0),這裡實現被允許決定值p。MySQL當前不支持DECIMAL/NUMERIC數據類型的這些變種形式的任一種。這一般說來不是一個嚴重的問題,因為這些類型的主要益處得自於明顯地控制精度和規模的能力。
DECIMAL和NUMERIC值作為字符串存儲,而不是作為二進制浮點數,以便保存那些值的小數精度。一個字符用於值的每一位、小數點(如果scale>0)和“-”符號(對於負值)。如果scale是0,DECIMAL和NUMERIC值不包含小數點或小數部分。
DECIMAL和NUMERIC值得最大的范圍與DOUBLE一樣,但是對於一個給定的DECIMAL或NUMERIC列,實際的范圍可由制由給定列的precision或scale限制。當這樣的列賦給了小數點後面的位超過指定scale所允許的位的值,該值根據scale四捨五入。當一個DECIMAL或NUMERIC列被賦給了其大小超過指定(或缺省的)precision和scale隱含的范圍的值,MySQL存儲表示那個范圍的相應的端點值。