7種資料庫連線的方式
阿新 • • 發佈:2018-11-09
1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?
user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
//使用MySQL資料庫驅動
<jndi-name>MySQLDB</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/dbname</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>user</user-name>
<password>pass</password>
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
一、連線各種資料庫方式速查表
下面羅列了各種資料庫使用JDBC連線的方式,可以作為一個手冊使用。
1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword"; //myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB" //myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
8、access資料庫直連用ODBC的
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;
MySQL高階特性----對比與其他資料庫
效能
對於速度的真實比較,以及不斷成熟的MySQL基準套件。見10.8 使用你自己的基準。因為沒有執行緒建立開銷、一個較小的語法分析器、較少功能和簡單的安全性,mSQL應該在下列方面更快些:
執行重複的連線和斷開的測試,在每個連線期間執行一個非常簡單的查詢。
有很少的列和鍵的插入很簡單的表的INSERT操作。
CREATE TABLE和DROP TABLE。
在不是一個索引的一些東西上SELECT。(一個表掃描是很容易的。)
因為這些操作是如此簡單,當你有更高的啟動開銷時,很難在這些方面變得更好。在連線被建立以後,MySQL應該效能好一些。在另一方面,MySQL比mSQL(以及大多數其他的SQL實現)在下列方面更好些:
複雜的SELECT操作
檢索較大的結果(MySQL有一個更好、更快並且更安全的協議)。
有變長字串的表,因為MySQL有更有效的並可在VARCHAR列上索引。
有很多列的表的處理。
由長記錄的表的處理。
有很多許多表達式的SELECT。
在大表上的SELECT。
同時處理很多連線。MySQL充分是完全多執行緒化的,每個連線有它自己的執行緒,這意味著沒有執行緒必須等待另一個執行緒(除非一個執行緒正在修改一張表,另外的執行緒想要存取)在mSQL中,一旦一個連線被建立了,所有其它執行緒必須等到第一個執行緒完成,不管連線正在執行的查詢是短的或是長的。當第一個連線終止時,下一個才能工作,而此時所有其它執行緒再次等待,等等。
聯結。如果你改變一個SELECT中的表的順序,mSQL可能變得異常地慢。在基準套件中,比MySQL要慢超過15000倍的時間。這是由於mSQL缺乏一個聯結優化器以便以最佳的順序排定表。然而,如果你把表按完全正確的順序放在mSQL2中並且WHERE是很簡單的並使用索引列,聯結將相對快些!見10.8 使用你自己的基準。
ORDER BY和GROUP BY。
DISTINCT。
使用TEXT或BLOB列。
SQL功能
GROUP BY和HAVING。mSQL根本不支援GROUP BY。MySQL支援一個有兩個HAVING和下列函式: COUNT()、AVG()、MIN()、MAX()、SUM()和STD()的完整的GROUP BY。如果SELECT從一張表中檢索,沒有其他列被檢索並且沒有WHERE子句,COUNT(*)被優化以很快地返回。 MIN()和MAX()可以取字串引數。
帶計算的INSERT和UPDATE。MySQL能在一個INSERT或UPDATE中做計算。例如:
mysql> UPDATE SET x=x*10+y WHERE x<20;
別名,MySQL有列的別名。
限制列名。在MySQL中,如果一個列名在用於查詢的表之間唯一的,你不必須使用完整的 合格者。
帶函式的SELECT。MySQL有很多函式(太多不能在這裡列出;見7.4 用在SELECT和WHERE子句中的函式)。
磁碟空間效率
即,你能使你的表有多小?MySQL有很精確的型別,因此你可以建立佔據很小空間的表。一個有用的MySQL資料型別的例子是MEDIUMINT,它是3個位元組長。如果你有100,000,000個記錄,每個記錄節省甚至一個位元組也是很重要的。mSQL2有一個較有限的列型別集合,因此更難於使表更小。
穩定性
這較難客觀地評價。對於MySQL穩定性的討論,見1.5 MySQL有多麼穩定?。我們沒有mSQL穩定性的經驗,因此我們對此不能說任何東西。
價格
另一個重要的問題是許可證。MySQL有一個比mSQL更靈活的許可證,並且也不比mSQL昂貴。無論你選擇使用哪個產品,記得要至少考慮支付一個許可證或電子郵件支援的費用。(當然如果你把你出售的一個產品包括在MySQL中,你將被要求獲得一個許可證。)
Perl介面
MySQL有與mSQL基本相同Perl介面,當有一些增加的功能。
JDBC ( Java )
MySQL目前有4個JDBC驅動程式:
gwe 驅動程式:由GWE technologies 開發的一個Java介面(不再支援)。
jms 驅動程式:由Xiaokun Kelvin ZHU的開發的一個改進的gwe驅動程式。
twz 驅動程式:由Terrence W. Zellers 開發的一個type 4 JDBC驅動程式並用於學習目的。
mm 驅動程式:由Mark Matthews 開發的一個type 4 JDBC驅動程式。
推薦的驅動程式是twz或mm驅動程式。兩者均被報導工作出色。我們知道mSQL有一個 JDBC 驅動程式,但是我們對它有太少的經驗不能進行比較。
開發速度
MySQL有一個非常小的開發者隊伍,但是我們是非常習慣於用C和C++編碼,非常快速。因為執行緒、函式、GROUP BY等在mSQL中仍未實現,它有很多追趕工作要做。要想得到關於它的一些前景,你可以檢視mSQL最後一年的 “HISTIRY”檔案,並將它與MySQL參考書手冊的新功能小節比較(見D MySQL變遷歷史)。哪個快開發得最快應該是相當明顯的。
實用程式
mSQL和MySQL都有許多有趣的第三方工具。因為向上移植(從mSQL到MySQL)是很容易的,幾乎所有mSQL可用的有趣的應用程式也可被MySQL使用。MySQL帶有一個簡單的msql2mysql程式修正在mSQL和MySQL使用的大多數C API函式之間拼寫差別。例如,它將msqlConnect()例項改變為mysql_connect()。變換一個客戶程式從mSQL到MySQL通常花幾分鐘時間。
21.1.1 怎樣將mSQL的工具轉換到MySQL
根據我們的經驗,轉換諸如使用mSQL C API的msql-tcl和msqljava工具將只花不大一小時時間,使得他們用MySQL C API工作。
轉換過程是:
在原始碼上執行外殼指令碼msql2mysql。這需要replace程式,它與MySQL一起散發。
編譯。
修正所有編譯器錯誤。
mSQL C API與MySQL C API 之間差別是:
MySQL使用一個MYSQL結構作為一種連線型別(mSQL使用一個int)。
mysql_connect()取一個指向一個MYSQL結構的指標作為一個引數。很容易定義全域性性定義一個或使用malloc()獲得一個。mysql_connect()也取兩個引數指定使用者和口令。你可以為了預設使用將這些設定為NULL,NULL。
mysql_error()取MYSQL結構作為一個引數。如果你正在移植老的程式碼,只是把引數加到你的老的msql_error()編碼中。
MySQL對所有錯誤返回一個錯誤號和一條文字錯誤訊息。mSQL僅返回一條文字錯誤訊息。
存在某些不相容性,因為MySQL支援從同一個程序的到伺服器多個連線。
mSQL和MySQL的客戶機/伺服器通訊協議有何不同
有足夠的差別使得不可能(或至少不容易)支援兩者。
它MySQL協議不同於mSQL協議的最重要的方面列在下面:
一個訊息緩衝區可以包含很多結果行。
如果查詢或結果比當前緩衝區大,訊息緩衝區動態地被擴大,直到一個可配置的伺服器和客戶上限。
所有的包被編號以捕捉重複或丟失的包。
所有的列值以ASCII碼傳送。列和行的長度以緊湊的二進位制編碼(1、2或3個位元組)傳送。
MySQL能在未緩衝得結果中讀取(不必在客戶端儲存完整的集合)。
如果一個單獨寫/讀花了超過30秒時間,伺服器關閉連線。
如果一個連線空閒8個小時,伺服器關閉連線。
mSQL 2.0的SQL句法與MySQL有何不同
列型別
MySQL
有下列額外的型別(比較其他的;見7.7 CREATE TABLE句法): 、
對於一個字串集中之一的ENUM型別。
對於一個字串集中多個的SET型別。
對於64位整數的BIGINT型別。
MySQL也支援下列額外的型別屬性:
UNSIGNED選項。
對於整數列的ZEROFILL選項。
對於是一個PRIMARY KEY的整數列的AUTO_INCREMENT選項。見20.4.29 mysql_insert_id()。
對所有列的DEFAULT值。
mSQL2
mSQL列型別對應於MySQL型別顯示在下面:mSQL型別 相應的MySQL型別
CHAR(len) CHAR(len)
Class.forName("oracle.jdbc.driver.OracleDriver");
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?
user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
//使用MySQL資料庫驅動
<jndi-name>MySQLDB</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/dbname</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>user</user-name>
<password>pass</password>
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
一、連線各種資料庫方式速查表
下面羅列了各種資料庫使用JDBC連線的方式,可以作為一個手冊使用。
1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);
2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample"; //sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword"; //myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);
7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB" //myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
8、access資料庫直連用ODBC的
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
Statement stmtNew=conn.createStatement() ;
MySQL高階特性----對比與其他資料庫
效能
對於速度的真實比較,以及不斷成熟的MySQL基準套件。見10.8 使用你自己的基準。因為沒有執行緒建立開銷、一個較小的語法分析器、較少功能和簡單的安全性,mSQL應該在下列方面更快些:
執行重複的連線和斷開的測試,在每個連線期間執行一個非常簡單的查詢。
有很少的列和鍵的插入很簡單的表的INSERT操作。
CREATE TABLE和DROP TABLE。
在不是一個索引的一些東西上SELECT。(一個表掃描是很容易的。)
因為這些操作是如此簡單,當你有更高的啟動開銷時,很難在這些方面變得更好。在連線被建立以後,MySQL應該效能好一些。在另一方面,MySQL比mSQL(以及大多數其他的SQL實現)在下列方面更好些:
複雜的SELECT操作
檢索較大的結果(MySQL有一個更好、更快並且更安全的協議)。
有變長字串的表,因為MySQL有更有效的並可在VARCHAR列上索引。
有很多列的表的處理。
由長記錄的表的處理。
有很多許多表達式的SELECT。
在大表上的SELECT。
同時處理很多連線。MySQL充分是完全多執行緒化的,每個連線有它自己的執行緒,這意味著沒有執行緒必須等待另一個執行緒(除非一個執行緒正在修改一張表,另外的執行緒想要存取)在mSQL中,一旦一個連線被建立了,所有其它執行緒必須等到第一個執行緒完成,不管連線正在執行的查詢是短的或是長的。當第一個連線終止時,下一個才能工作,而此時所有其它執行緒再次等待,等等。
聯結。如果你改變一個SELECT中的表的順序,mSQL可能變得異常地慢。在基準套件中,比MySQL要慢超過15000倍的時間。這是由於mSQL缺乏一個聯結優化器以便以最佳的順序排定表。然而,如果你把表按完全正確的順序放在mSQL2中並且WHERE是很簡單的並使用索引列,聯結將相對快些!見10.8 使用你自己的基準。
ORDER BY和GROUP BY。
DISTINCT。
使用TEXT或BLOB列。
SQL功能
GROUP BY和HAVING。mSQL根本不支援GROUP BY。MySQL支援一個有兩個HAVING和下列函式: COUNT()、AVG()、MIN()、MAX()、SUM()和STD()的完整的GROUP BY。如果SELECT從一張表中檢索,沒有其他列被檢索並且沒有WHERE子句,COUNT(*)被優化以很快地返回。 MIN()和MAX()可以取字串引數。
帶計算的INSERT和UPDATE。MySQL能在一個INSERT或UPDATE中做計算。例如:
mysql> UPDATE SET x=x*10+y WHERE x<20;
別名,MySQL有列的別名。
限制列名。在MySQL中,如果一個列名在用於查詢的表之間唯一的,你不必須使用完整的 合格者。
帶函式的SELECT。MySQL有很多函式(太多不能在這裡列出;見7.4 用在SELECT和WHERE子句中的函式)。
磁碟空間效率
即,你能使你的表有多小?MySQL有很精確的型別,因此你可以建立佔據很小空間的表。一個有用的MySQL資料型別的例子是MEDIUMINT,它是3個位元組長。如果你有100,000,000個記錄,每個記錄節省甚至一個位元組也是很重要的。mSQL2有一個較有限的列型別集合,因此更難於使表更小。
穩定性
這較難客觀地評價。對於MySQL穩定性的討論,見1.5 MySQL有多麼穩定?。我們沒有mSQL穩定性的經驗,因此我們對此不能說任何東西。
價格
另一個重要的問題是許可證。MySQL有一個比mSQL更靈活的許可證,並且也不比mSQL昂貴。無論你選擇使用哪個產品,記得要至少考慮支付一個許可證或電子郵件支援的費用。(當然如果你把你出售的一個產品包括在MySQL中,你將被要求獲得一個許可證。)
Perl介面
MySQL有與mSQL基本相同Perl介面,當有一些增加的功能。
JDBC ( Java )
MySQL目前有4個JDBC驅動程式:
gwe 驅動程式:由GWE technologies 開發的一個Java介面(不再支援)。
jms 驅動程式:由Xiaokun Kelvin ZHU的開發的一個改進的gwe驅動程式。
twz 驅動程式:由Terrence W. Zellers 開發的一個type 4 JDBC驅動程式並用於學習目的。
mm 驅動程式:由Mark Matthews 開發的一個type 4 JDBC驅動程式。
推薦的驅動程式是twz或mm驅動程式。兩者均被報導工作出色。我們知道mSQL有一個 JDBC 驅動程式,但是我們對它有太少的經驗不能進行比較。
開發速度
MySQL有一個非常小的開發者隊伍,但是我們是非常習慣於用C和C++編碼,非常快速。因為執行緒、函式、GROUP BY等在mSQL中仍未實現,它有很多追趕工作要做。要想得到關於它的一些前景,你可以檢視mSQL最後一年的 “HISTIRY”檔案,並將它與MySQL參考書手冊的新功能小節比較(見D MySQL變遷歷史)。哪個快開發得最快應該是相當明顯的。
實用程式
mSQL和MySQL都有許多有趣的第三方工具。因為向上移植(從mSQL到MySQL)是很容易的,幾乎所有mSQL可用的有趣的應用程式也可被MySQL使用。MySQL帶有一個簡單的msql2mysql程式修正在mSQL和MySQL使用的大多數C API函式之間拼寫差別。例如,它將msqlConnect()例項改變為mysql_connect()。變換一個客戶程式從mSQL到MySQL通常花幾分鐘時間。
21.1.1 怎樣將mSQL的工具轉換到MySQL
根據我們的經驗,轉換諸如使用mSQL C API的msql-tcl和msqljava工具將只花不大一小時時間,使得他們用MySQL C API工作。
轉換過程是:
在原始碼上執行外殼指令碼msql2mysql。這需要replace程式,它與MySQL一起散發。
編譯。
修正所有編譯器錯誤。
mSQL C API與MySQL C API 之間差別是:
MySQL使用一個MYSQL結構作為一種連線型別(mSQL使用一個int)。
mysql_connect()取一個指向一個MYSQL結構的指標作為一個引數。很容易定義全域性性定義一個或使用malloc()獲得一個。mysql_connect()也取兩個引數指定使用者和口令。你可以為了預設使用將這些設定為NULL,NULL。
mysql_error()取MYSQL結構作為一個引數。如果你正在移植老的程式碼,只是把引數加到你的老的msql_error()編碼中。
MySQL對所有錯誤返回一個錯誤號和一條文字錯誤訊息。mSQL僅返回一條文字錯誤訊息。
存在某些不相容性,因為MySQL支援從同一個程序的到伺服器多個連線。
mSQL和MySQL的客戶機/伺服器通訊協議有何不同
有足夠的差別使得不可能(或至少不容易)支援兩者。
它MySQL協議不同於mSQL協議的最重要的方面列在下面:
一個訊息緩衝區可以包含很多結果行。
如果查詢或結果比當前緩衝區大,訊息緩衝區動態地被擴大,直到一個可配置的伺服器和客戶上限。
所有的包被編號以捕捉重複或丟失的包。
所有的列值以ASCII碼傳送。列和行的長度以緊湊的二進位制編碼(1、2或3個位元組)傳送。
MySQL能在未緩衝得結果中讀取(不必在客戶端儲存完整的集合)。
如果一個單獨寫/讀花了超過30秒時間,伺服器關閉連線。
如果一個連線空閒8個小時,伺服器關閉連線。
mSQL 2.0的SQL句法與MySQL有何不同
列型別
MySQL
有下列額外的型別(比較其他的;見7.7 CREATE TABLE句法): 、
對於一個字串集中之一的ENUM型別。
對於一個字串集中多個的SET型別。
對於64位整數的BIGINT型別。
MySQL也支援下列額外的型別屬性:
UNSIGNED選項。
對於整數列的ZEROFILL選項。
對於是一個PRIMARY KEY的整數列的AUTO_INCREMENT選項。見20.4.29 mysql_insert_id()。
對所有列的DEFAULT值。
mSQL2
mSQL列型別對應於MySQL型別顯示在下面:mSQL型別 相應的MySQL型別
CHAR(len) CHAR(len)