真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql預(yù)編怎么用,mysql的預(yù)編譯

mysql數(shù)據(jù)庫(kù)建好后怎么使用?

這很簡(jiǎn)單?。?/p>

專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、網(wǎng)站制作、購(gòu)物商城網(wǎng)站建設(shè)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

在windows下,假如你的mysql裝在

d:\mysql

就可以這樣:

先切換到它的bin目錄

cd

d:\mysql\bin\

d:\mysql\binmysql

-u

root

-p

接著輸入你的root密碼

接下來(lái)你就可以創(chuàng)建數(shù)據(jù)庫(kù)、創(chuàng)建用戶、創(chuàng)建修改表之類(lèi)的操作(常用命令如下)。

查看現(xiàn)有數(shù)據(jù)庫(kù)

mysql

show

databases;

創(chuàng)建數(shù)據(jù)庫(kù)(假如數(shù)據(jù)庫(kù)名為

mydb)

mysql

create

database

mydb;

刪除數(shù)據(jù)庫(kù)(假如數(shù)據(jù)庫(kù)名為

mydb)

mysql

drop

database

accounts;

使用數(shù)據(jù)庫(kù)(假如使用數(shù)據(jù)庫(kù)

mydb)

mysql

use

mydb;

執(zhí)行完使用數(shù)據(jù)庫(kù)命令后,就可以對(duì)該數(shù)據(jù)庫(kù)進(jìn)行創(chuàng)建、修改、插入、刪除表等操作,這些表的操作命令你可以到網(wǎng)上找找,不是很難的。一個(gè)數(shù)據(jù)庫(kù)就相當(dāng)于一個(gè)

excel

文件,而表則相當(dāng)于excel文件的單元格,數(shù)據(jù)就是存放在表中。

mysql——預(yù)處理Prepared

某需求某一條 SQL 語(yǔ)句可能會(huì)被反復(fù)調(diào)用執(zhí)行,或者每次執(zhí)行的時(shí)候只有個(gè)別的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要經(jīng)過(guò)上面的詞法語(yǔ)義解析、語(yǔ)句優(yōu)化、制定執(zhí)行計(jì)劃等,則效率就明顯不行了。

所謂預(yù)編譯語(yǔ)句就是將此類(lèi) SQL 語(yǔ)句中的值用占位符替代,可以視為將 SQL 語(yǔ)句模板化或者說(shuō)參數(shù)化,一般稱(chēng)這類(lèi)語(yǔ)句叫Prepared Statements。

預(yù)編譯語(yǔ)句的優(yōu)勢(shì)在于歸納為:一次編譯、多次運(yùn)行,省去了解析優(yōu)化等過(guò)程;此外預(yù)編譯語(yǔ)句能防止 SQL 注入。

注意:雖然可能是通過(guò)預(yù)處理 SQL 的方式一定程度的提高了效率,但是對(duì)于優(yōu)化而言,最優(yōu)的執(zhí)行計(jì)劃不是光靠 SQL 語(yǔ)句的模板化來(lái)實(shí)現(xiàn)的,往往還是需要通過(guò)具體值來(lái)預(yù)估出成本代價(jià)。

MySQL 官方將 prepare、execute、deallocate 統(tǒng)稱(chēng)為 PREPARE STATEMENT。

步驟大概分為四步:

1 set —— SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

2 prepare —— PREPARE stmt2 FROM @s;

3 execute —— EXECUTE stmt2;

4 deallocate —— DEALLOCATE PREPARE stmt2;

mysql使用教程 mysql怎么使用

1、打開(kāi)瀏覽器搜索“sqlyog”并下載這個(gè)客戶端軟件。

2、然后安裝之后打開(kāi)客戶端軟件。

3、然后點(diǎn)擊“新建”新建一個(gè)連接,然后填寫(xiě)mysql主機(jī)地址、用戶名、密碼,端口,然后點(diǎn)擊下面的連接。

4、然后在左側(cè)選擇自己要連接的數(shù)據(jù)庫(kù)。

5、然后在Query下面的空白地方輸寫(xiě)自己的sql語(yǔ)句。

6、然后點(diǎn)擊如圖所示的圖標(biāo),進(jìn)行執(zhí)行自己寫(xiě)好的sql語(yǔ)句,就完成了sql的基本操作。

預(yù)編譯SQL語(yǔ)句的使用問(wèn)題

void setString(int parameterIndex,

String x)

PreparedStatement pstmt = con.prepareStatement("UPDATE table4 SET m = ? WHERE x = ?");

pstmt 對(duì)象包含語(yǔ)句 "UPDATE table4 SET m = ? WHERE x = ?",它已發(fā)送給DBMS,并為執(zhí)行作好了準(zhǔn)備。

2、傳遞 IN 參數(shù)

在執(zhí)行 PreparedStatement 對(duì)象之前,必須設(shè)置每個(gè) ? 參數(shù)的值。這可通過(guò)調(diào)用 setXXX 方法來(lái)完成,其中 XXX 是與該參數(shù)相應(yīng)的類(lèi)型。例如,如果參數(shù)具有Java 類(lèi)型 long,則使用的方法就是 setLong。setXXX 方法的第一個(gè)參數(shù)是要設(shè)置的參數(shù)的序數(shù)位置,第二個(gè)參數(shù)是設(shè)置給該參數(shù)的值。例如,以下代碼將第一個(gè)參數(shù)設(shè)為 123456789,第二個(gè)參數(shù)設(shè)為 100000000:

pstmt.setLong(1, 123456789);

pstmt.setLong(2, 100000000);

一旦設(shè)置了給定語(yǔ)句的參數(shù)值,就可用它多次執(zhí)行該語(yǔ)句,直到調(diào)用clearParameters 方法清除它為止。在連接的缺省模式下(啟用自動(dòng)提交),當(dāng)語(yǔ)句完成時(shí)將自動(dòng)提交或還原該語(yǔ)句。

如果基本數(shù)據(jù)庫(kù)和驅(qū)動(dòng)程序在語(yǔ)句提交之后仍保持這些語(yǔ)句的打開(kāi)狀態(tài),則同一個(gè) PreparedStatement 可執(zhí)行多次。如果這一點(diǎn)不成立,那么試圖通過(guò)使用PreparedStatement 對(duì)象代替 Statement 對(duì)象來(lái)提高性能是沒(méi)有意義的。

利用 pstmt(前面創(chuàng)建的 PreparedStatement 對(duì)象),以下代碼例示了如何設(shè)置兩個(gè)參數(shù)占位符的值并執(zhí)行 pstmt 10 次。如上所述,為做到這一點(diǎn),數(shù)據(jù)庫(kù)不能關(guān)閉 pstmt。在該示例中,第一個(gè)參數(shù)被設(shè)置為 "Hi"并保持為常數(shù)。在 for 循環(huán)中,每次都將第二個(gè)參數(shù)設(shè)置為不同的值:從 0 開(kāi)始,到 9 結(jié)束。

pstmt.setString(1, "Hi");

for (int i = 0; i 10; i++) {

pstmt.setInt(2, i);

int rowCount = pstmt.executeUpdate();

}

mysql怎么實(shí)現(xiàn)預(yù)編譯

玩Oracle的都比較關(guān)注shared pool,特別是library cache,在使用了綁定變量(預(yù)編譯sql)之后確實(shí)能得到很大的性能提升。現(xiàn)在在轉(zhuǎn)Mysql之后特別是innodb很多東西都還能和Oracle對(duì)得上號(hào)的,就像innodb_buffer_pool_size類(lèi)似于Oracle的database buffer cache,innodb_log_buffer_size類(lèi)似于redo log buffer,但是innodb_additional_mem_pool_size僅僅類(lèi)似于shared pool的Data dictionary cache,似乎還缺少和library cache相對(duì)應(yīng)的東西。那就有一個(gè)問(wèn)題了,在Mysql里面使用預(yù)編譯的sql還會(huì)有性能提升嗎?

這里我用Java的jdbc做了一下測(cè)試,分別用Statement和PreparedStatement執(zhí)行1000個(gè)sql,并運(yùn)行10次

1.使用Statement做硬解析:

1 package exmysql; 2 ?3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.SQLException; 7 import java.sql.Statement; 8 import java.util.Date; 9 10 public class adddata {11 ? ? 12 ? ? private static long worker(){13 ? ? ? ? Date begin = new Date();

14 ? ? ? ? 15 ? ? ? ? String driver="com.mysql.jdbc.Driver";16 17 ? ? ? ? String url="jdbc:mysql://172.16.2.7:3306/testdb";18 ? ? ? ? 19 ? ? ? ? Connection conn=null;20 ? ? ? ? Statement stmt=null;21 ? ? ? ? ResultSet rs=null;22 ? ? ? ? 23 ? ? ? ? try{24 ?? ? ? ? ? ?Class.forName(driver);25 ? ? ? ? ? ? conn=DriverManager.getConnection(url,"dbaadmin","123456");26 ? ? ? ? ? ? stmt=conn.createStatement();27 ?? ? ? ? ? ?String sql;28 ? ? ? ? ? ? for (int i=1;i=5000;i++){29 ? ? ? ? ? ? ? ? sql="select * from test1 where id="+i;30 ? ? ? ? ? ? ? ? rs=stmt.executeQuery(sql);31 ?? ? ? ? ? ?}32 ?? ? ? ?}33 ? ? ? ? catch(SQLException | ClassNotFoundException e){34 ?? ? ? ? ? ?e.printStackTrace();35 ?? ? ? ?}36 ? ? ? ? 37 ? ? ? ? if(stmt!=null){38 ? ? ? ? ? ? try{39 ?? ? ? ? ? ? ? ?stmt.close();40 ?? ? ? ? ? ?}41 ? ? ? ? ? ? catch(SQLException e){42 ?? ? ? ? ? ? ? ?e.printStackTrace();43 ?? ? ? ? ? ?}44 ?? ? ? ?}45 ? ? ? ? 46 ? ? ? ? if(conn!=null){47 ? ? ? ? ? ? try{48 ?? ? ? ? ? ? ? ?conn.close();49 ?? ? ? ? ? ?}50 ? ? ? ? ? ? catch(SQLException e){51 ?? ? ? ? ? ? ? ?e.printStackTrace();52 ?? ? ? ? ? ?}53 ?? ? ? ?}54 ? ? ? ? 55 ? ? ? ? Date end = new Date();

56 ? ? ? ? return end.getTime()-begin.getTime();57 ?? ?}58 59 ? ? public static void main(String[] args) {60 ? ? ? ? // TODO Auto-generated method stub61 ? ? ? ? 62 ? ? ? ? long elapsed,average;63 ? ? ? ? average=0;64 ? ? ? ? for (int i=1;i=10;i++){65 ? ? ? ? ? ? elapsed=worker();66 ? ? ? ? ? ? System.out.println("elapsed time(ms):"+elapsed);67 ? ? ? ? ? ? average=average+elapsed;68 ?? ? ? ?}69 ? ? ? ? System.out.println("average time(ms):"+average/10);70 ?? ?}71 72 }

結(jié)果如下:

elapsed time(ms):24652

elapsed time(ms):13380

elapsed time(ms):13250

elapsed time(ms):13877

elapsed time(ms):13275

elapsed time(ms):13193

elapsed time(ms):19022

elapsed time(ms):13558

elapsed time(ms):14138

elapsed time(ms):13364

average time(ms):15170

2.同樣的sql用PreparedStatement預(yù)編譯執(zhí)行

1 package exmysql; 2 ?3 import java.sql.*; 4 import java.util.Date; 5 ?6 public class insert_data { 7 ?8 ? ? private static long worker(){ 9 ? ? ? ? Date begin = new Date();

10 ? ? ? ? 11 ? ? ? ? String driver="com.mysql.jdbc.Driver";12 13 ? ? ? ? String url="jdbc:mysql://172.16.2.7:3306/testdb";14 ? ? ? ? 15 ? ? ? ? Connection conn=null;16 ? ? ? ? PreparedStatement pstm=null;17 ? ? ? ? ResultSet rs=null;18 ? ? ? ? 19 ? ? ? ? try{20 ?? ? ? ? ? ?Class.forName(driver);21 ? ? ? ? ? ? conn=DriverManager.getConnection(url,"dbaadmin","123456");22 ? ? ? ? ? ? String sql="select * from test1 where id=?";24 ? ? ? ? ? ? pstm=conn.prepareStatement(sql);25 ? ? ? ? ? ? for(int i=1;i=5000;i++){26 ? ? ? ? ? ? ? ? pstm.setInt(1, i);27 ? ? ? ? ? ? ? ? rs=pstm.executeQuery();28 ?? ? ? ? ? ?}29 ? ? ? ? ? ? 31 ?? ? ? ?}32 ? ? ? ? catch(SQLException | ClassNotFoundException e){33 ?? ? ? ? ? ?e.printStackTrace();34 ?? ? ? ?}35 ? ? ? ? 36 ? ? ? ? if(pstm!=null){37 ? ? ? ? ? ? try{38 ?? ? ? ? ? ? ? ?pstm.close();39 ?? ? ? ? ? ?}40 ? ? ? ? ? ? catch(SQLException e){41 ?? ? ? ? ? ? ? ?e.printStackTrace();42 ?? ? ? ? ? ?}43 ?? ? ? ?}44 ? ? ? ? 45 ? ? ? ? if(conn!=null){46 ? ? ? ? ? ? try{47 ?? ? ? ? ? ? ? ?conn.close();48 ?? ? ? ? ? ?}49 ? ? ? ? ? ? catch(SQLException e){50 ?? ? ? ? ? ? ? ?e.printStackTrace();51 ?? ? ? ? ? ?}52 ?? ? ? ?}53 ? ? ? ? 54 ? ? ? ? Date end = new Date();

55 ? ? ? ? return end.getTime()-begin.getTime();56 ?? ?}57 ? ? 58 ? ? public static void main(String[] args) {59 ? ? ? ? // TODO Auto-generated method stub60 ? ? ? ? 61 ? ? ? ? long elapsed,average;62 ? ? ? ? average=0;63 ? ? ? ? for (int i=1;i=10;i++){64 ? ? ? ? ? ? elapsed=worker();65 ? ? ? ? ? ? System.out.println("elapsed time(ms):"+elapsed);66 ? ? ? ? ? ? average=average+elapsed;67 ?? ? ? ?}68 ? ? ? ? System.out.println("average time(ms):"+average/10);69 ?? ?}70 71 }

結(jié)果如下:

elapsed time(ms):14773

elapsed time(ms):16352

elapsed time(ms):14797

elapsed time(ms):15800

elapsed time(ms):12069

elapsed time(ms):14953

elapsed time(ms):13238

elapsed time(ms):12366

elapsed time(ms):15263

elapsed time(ms):13089

average time(ms):14270

可以看出兩種方式執(zhí)行的結(jié)果幾乎相同,不像Oracle差距那么大。而且就算是用PreparedStatement的方式,在Mysql數(shù)據(jù)庫(kù)端抓出來(lái)的sql語(yǔ)句也不是以變量id=?的形式出現(xiàn)的,而是實(shí)際的數(shù)值。后來(lái)在網(wǎng)上看到在連接字符串上加上useServerPrepStmts=true可以實(shí)現(xiàn)真正的預(yù)編譯

String url="jdbc:mysql://172.16.2.7:3306/testdb"; ? ? ? ?url=url+"?useServerPrepStmts=true";

加上這段后可以在數(shù)據(jù)庫(kù)端可以看到明確的結(jié)果:

mysql show global status like 'Com_stmt_prepare';

+------------------+-------+

| Variable_name | Value |

+------------------+-------+

| Com_stmt_prepare | 11 |

+------------------+-------+

1 row in set (0.00 sec)

但是實(shí)際的運(yùn)行結(jié)果和上面幾乎一樣,性能上也沒(méi)有任何的提升。由此可以推斷出Mysql由于缺少類(lèi)似于Oracle的library cache的部件,因此采用預(yù)編譯方式執(zhí)行sql是沒(méi)有性能上的提升的。


分享文章:mysql預(yù)編怎么用,mysql的預(yù)編譯
鏈接地址:http://weahome.cn/article/hsepoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部