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

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

mysql中怎么引入事務(wù) mysql事務(wù)怎么用

如何在mysql 的存儲過程中使用事務(wù)

6.7 MySQL 事務(wù)與鎖定命令

成都創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、新平網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為新平等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

6.7.1 BEGIN/COMMIT/ROLLBACK 句法

缺省的,MySQL 運行在 autocommit 模式。這就意味著,當(dāng)你執(zhí)行完一個更新時,MySQL 將立刻將更新存儲到磁盤上。

如果你使用事務(wù)安全表 (例如 InnoDB、BDB),通過下面的命令,你可以設(shè)置 MySQL 為非 autocommit 模式:

SET AUTOCOMMIT=0

在此之后,你必須使用 COMMIT 來存儲你的更改到磁盤上,或者使用 ROLLBACK ,如果你希望忽略從你的事務(wù)開始所做的更改。

如果你希望為一系列語句從 AUTOCOMMIT 模式轉(zhuǎn)換,你可以使用 START TRANSACTION 或 BEGIN 或 BEGIN WORK 語句:

START TRANSACTION;

SELECT @A:=SUM(salary) FROM table1 WHERE type=1;

UPDATE table2 SET summmary=@A WHERE type=1;

COMMIT;

START TRANSACTION 在 MySQL 4.0.11 中被加入;這是被推薦的開始一個特別(ad-hoc)事務(wù)的方式,因為這是 ANSI SQL 句法。

注意,如果你使用的是一個非事務(wù)安全表,更改會立刻被存儲,不受 autocommit 模式狀態(tài)的約束。

當(dāng)你更新了一個非事務(wù)表后,如果你執(zhí)行一個 ROLLBACK,你將得到一個錯誤 (ER_WARNING_NOT_COMPLETE_ROLLBACK) 作為一個警告。所有事務(wù)安全表將被恢復(fù),但是非事務(wù)安全表將不會改變。

如果你使用 START TRANSACTION 或 SET AUTOCOMMIT=0,你應(yīng)該使用 MySQL

二進制日志做備份以代替老的更新日志。事務(wù)處理被以一個大塊形式存儲在二進制日志中,在 COMMIT

上面,為了保護回滾的事務(wù),而不是被存儲的。查看章節(jié) 4.9.4 二進制日志。 如果您使用起動事務(wù)處理或集AUTOCOMMIT=0

,您應(yīng)該使用MySQL 二進制日志為備份代替更舊的更新日志。 事務(wù)處理存儲在二進制登錄一大塊,做,保證, 滾的事務(wù)處理不存儲。 參見部分4

。9.4 二進制日志。

下列命令自動的結(jié)束一個事務(wù) (就好像你在執(zhí)行這個命令之前,做了一個 COMMIT):

命令 命令 命令

ALTER TABLE BEGIN CREATE INDEX

DROP DATABASE DROP TABLE RENAME TABLE

TRUNCATE

你可以使用 SET TRANSACTION ISOLATION LEVEL ... 改變事務(wù)的隔離級。查看章節(jié) 6.7.3 SET TRANSACTION 句法。

6.7.2 LOCK TABLES/UNLOCK TABLES 句法

LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}

[, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} ...]

...

UNLOCK TABLES

LOCK TABLES 為當(dāng)前線程鎖定表。UNLOCK TABLES 釋放當(dāng)前線程擁有的所有鎖定。當(dāng)線程發(fā)出另一個 LOCK TABLES,或當(dāng)與服務(wù)器的連接被關(guān)閉時,被當(dāng)前線程鎖定的所有表將被自動地解鎖。

為了在 MySQL 4.0.2 使用 LOCK TABLES ,你必須擁有一個全局的 LOCK TABLES 權(quán)限和一個在相關(guān)表上的

SELECT 權(quán)限。在 MySQL 3.23 中,你對該表需要有 SELECT、insert、DELETE 和 UPDATE 權(quán)限。

使用 LOCK TABLES 的主要原因是,仿效事務(wù)處理或在更新表時得到更快的速度。此后會有更詳細的描述。

如果一個線程在一個表上得到一個 READ 鎖,該線程 (和所有其它線程) 只能從表中讀取。如果一個線程在一個表上得到一個 WRITE 鎖,那么只有擁有這個鎖的線程可以從表中讀取和寫表。其它的線程被阻塞。

READ LOCAL 和 READ 之間的不同就在于,當(dāng)鎖被加載時,READ LOCAL 允許非沖突(non-conflicting) INSERT 語句執(zhí)行。如果當(dāng)你加載著鎖時從 MySQL 外部操作數(shù)據(jù)庫文件,這將仍不能被使用。

當(dāng)你使用 LOCK TABLES 是地,你必須鎖定所有你將使用的表,并且必須使用與你的查詢中將使用的別名相同!如果你在一個查詢中多次使用一個表(用別名),你必須為每一個別名獲得一個鎖。

WRITE 鎖通過比 READ 鎖有更高的權(quán)限,以確保更新被盡快地處理。這就意味著,如果一個線程獲得一個 READ

鎖,而同時另外一個線程請求一個 WRITE 鎖,并發(fā)的 READ 鎖請求將等待直到 WRITE 線程得到了鎖并釋放了它。你可以使用

LOW_PRIORITY WRITE 鎖,當(dāng)該線程在等待 WRITE 鎖時,它將允許其它的線程獲得 READ 鎖。 你應(yīng)該只使用

LOW_PRIORITY WRITE 鎖,如果你確信這將是最后一次,當(dāng)沒有線程將擁有 READ 鎖。

LOCK TABLES 工作如下:

以內(nèi)部定義的次序排序所有被鎖定的表 (從用戶立場說,該次序是不明確的)。

如果一個表被以一個讀鎖和一個寫鎖鎖定,將寫鎖放在讀鎖之前。

一次只鎖定一個表,只到線程得到所有的鎖定。

這個方案是為了確保,表鎖定死鎖釋放。 對于這個模式你仍然有些其它事情需要知道:

如果你對一個表使用一個 LOW_PRIORITY WRITE 鎖定,這就意味著,MySQL 將等待這個鎖,直到?jīng)]有線程請求一個 READ

鎖。當(dāng)線程得到了 WRITE 鎖,并等待獲得鎖定表列表中的下一個表的鎖定時,其它所有的線程將等待 WRITE

鎖被釋放。如果這在你的應(yīng)用程序中會引起一個嚴重的問題,你應(yīng)該考慮將你的某些表轉(zhuǎn)換為事務(wù)安全表。

你可以使用 KILL 安全地殺死一個正在表鎖定的線程。查看章節(jié) 4.5.5 KILL 句法。

注意,你不應(yīng)該 鎖定你正在對其使用 INSERT DELAYED 的表。這是因為,在這種情況下,INSERT 是通過單獨的線程完成的。

通常,你不需要鎖定任何表,因為所有單 UPDATE 語句都是原子的;其它的線程無法干擾當(dāng)前執(zhí)行的 SQL 語句。當(dāng)你無論如何希望鎖定表時,這里有一些情況:

如果你在一束表上運行許多操作,鎖定你將要使用的表,這會更快一些。當(dāng)然有不利的方面,其它線程將不能更新一個 READ

鎖的表,并且沒有其它線程要以讀取一個 WRITE 鎖的表。 在 LOCK TABLES 下,某些事運行得更快一些的原因是,MySQL

將不會轉(zhuǎn)儲清除被鎖定表鍵高速緩沖,直到 UNLOCK TABLES 被調(diào)用 (通常鍵高速緩沖在每個 SQL 語句后都會被轉(zhuǎn)儲清除)。這將加速在

MyISAM 表上的插入、更新、刪除。

如果你在 MySQL 中正在使用一個不支持事務(wù)的存儲引擎,如果你希望能確保沒有其它的線程會出現(xiàn)在一個 SELECT 和 一個 UPDATE 之間,你必須使用 LOCK TABLES 。下面的示例顯示為了安全地執(zhí)行,這里需要LOCK TABLES :

mysql LOCK TABLES trans READ, customer WRITE;

mysql SELECT SUM(value) FROM trans WHERE customer_id=some_id;

mysql UPDATE customer SET total_value=sum_from_previous_statement

- WHERE customer_id=some_id;

mysql UNLOCK TABLES;

不使用 LOCK TABLES,將可能發(fā)生在 SELECT 和 UPDATE 語句執(zhí)行期間有另外一個線程可能在 trans 表中插入一行新記錄。

通過使用遞增更新 (UPDATE customer SET value=value+new_value) 或 LAST_INSERT_ID() 函數(shù),你可以在很多情況下避免使用 LOCK TABLES。

你也可以使用用戶級鎖定函數(shù) GET_LOCK() 和 RELEASE_LOCK() 解決一些情況,這些鎖被保存在服務(wù)器上的一個哈希表中,并以

pthread_mutex_lock() 和 pthread_mutex_unlock() 實現(xiàn)以獲得高速度。查看章節(jié) 6.3.6.2

輔助功能函數(shù)。

查看章節(jié) 5.3.1 MySQL 如何鎖定表,以獲取關(guān)于鎖定方案的更多信息。

你可以使用 FLUSH TABLES WITH READ LOCK 命令以讀鎖鎖定所有數(shù)據(jù)庫中的所有表。查看章節(jié) 4.5.3 FLUSH 句法。如果你有一個可以及時建立文件快照的文件系統(tǒng),例如 Veritas,這將是得到備份的非常方便方式。

注意:LOCK TABLES 不是事務(wù)安全的,在嘗試鎖定一個表之前,將自動地提交所有的活動事務(wù)。

6.7.3 SET TRANSACTION 句法

SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL

{ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }

設(shè)置全局的、整個會話或下一個事務(wù)的事務(wù)隔離級。

缺省行為是設(shè)置下一個(未啟動的)事務(wù)的隔離級。如果你使用 GLOBAL

關(guān)鍵詞,語句為所有在那個點上建立的新連接設(shè)置默認的全局事務(wù)隔離級。為了這樣做,你需要有 SUPER 權(quán)限。使用 SESSION

關(guān)鍵詞為當(dāng)前連接所有將來執(zhí)行的事務(wù)設(shè)置默認的事務(wù)隔離級。

你可以使用 --transaction-isolation=... 為 mysqld 設(shè)置默認的全局隔離級。查看章節(jié) 4.1.1 mysqld 命令行選項

在多文件上傳中如何用mysql開啟事務(wù)

看你是什么事務(wù),jdbc事務(wù),還是分布式事務(wù),還是容器事務(wù)

1,編程式事務(wù)管理(jdbc的事務(wù)是綁定在connection上的)

Connection conn = null;

try

{

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@host:1521:SID","username","password");

conn.setAutoCommit(false); //取消自動提交

PreparedStatement ps = conn.prepareCall("update something");

ResultSet rs = ps.executeQuery();

conn.commit(); //手動提交

}

catch (Exception e)

{

conn.rollback();

e.printStackTrace();

}

finally

{

conn.close();

}

2,聲明式事務(wù)

先在工程的application.xml配置文件中添加如下代碼,開啟事務(wù)

!-- 聲明式事務(wù)控制配置 --

tx:annotation-driven transaction-manager="txManager"/

bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"

property name="datasource" ref="bassDataSource"/property

/bean

然后在你需要開啟事務(wù)的接口前面添加注解

@Transactional(rollbackFor = IOException.class)

public void add(String name) throws IOException

{

System.out.println("可以再類里和方法里面添加事務(wù)注解0~0");

throw new IOException();

}

直接調(diào)用接口方法就好

分布式事務(wù)處理(mysql貌似在5.X之后才支持) 的話,

1.可以直接使用spring+atomikos框架進行管理

參考:

就不貼測試代碼了,自己看著配置吧

2,使用JTA(Java Transaction API)進行分布式事務(wù)管理(測試代碼如下)

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import javax.transaction.SystemException;

import javax.transaction.UserTransaction;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

//分布式事務(wù)處理

public class transferAccount

{

@SuppressWarnings("null")

public void testTransferAccount()

{

UserTransaction userts = null;

Connection connA = null;

PreparedStatement psA = null;

InitialContext context = null;

Connection connB = null;

PreparedStatement psB = null;

try

{

//獲得事務(wù)管理對象

userts = (UserTransaction) context.lookup("java:comp/UserTransaction");

//獲取兩個數(shù)據(jù)庫

connA = getDataSourceA().getConnection();

connB = getDataSourceB().getConnection();

//開啟事務(wù)

userts.begin();

//sql語句

psA = connA.prepareStatement("我加1");

psB = connB.prepareStatement("我減1");

//執(zhí)行sql

psA.executeUpdate();

psB.executeUpdate();

//事務(wù)提交

userts.commit();

} catch (Exception e)

{

try

{

userts.rollback();

} catch (IllegalStateException | SecurityException

| SystemException e1)

{

e1.printStackTrace();

}

e.printStackTrace();

}

finally

{

try

{

psA.close();

psB.close();

connA.close();

connB.close();

} catch (SQLException e)

{

e.printStackTrace();

}

}

}

public DataSource getDataSourceA()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1433);

dataSource.setUser("test");

dataSource.setPassword("test");

return dataSource;

}

public DataSource getDataSourceB()

{

MysqlDataSource dataSource = new MysqlDataSource();

dataSource.setDatabaseName("mysql");

dataSource.setServerName("server");

dataSource.setPortNumber(1435);

dataSource.setUser("test1");

dataSource.setPassword("test1");

return dataSource;

}

}

MYSQL5.5中如何使用事務(wù)?

首先一點, 如果你是 mysql 5.5 肯定支持事務(wù)

其次, 是否可以用事務(wù), 取決于你使用的表的存儲引擎.

默認 myIsam 是不支持事務(wù)的

你要把表轉(zhuǎn)換成 Innodb 存儲引擎才可以使用事務(wù)

你怎么知道你的不支持呢,

你來做個試驗好了。

打開是事務(wù)請鍵入:

set @@AUTOCOMMIT=0;

BEGIN WORK;

然后你去把你MySQL的某一張表中的數(shù)據(jù)刪除

然后再打:ROLLBACK WORK;

你就驚訝的發(fā)現(xiàn),你剛才刪的數(shù)據(jù)還原了

回滾事物:SAVEPOINT id

id是保存點的名稱

結(jié)束事物:COMMIT

具體還是要一本書才行。網(wǎng)絡(luò)上的其實說實話太雜了

最后補充一下, 修改存儲引擎的 MYSQL 語句:

alter table 表名 type = InnoDB;

一文詳解-MySQL 事務(wù)和鎖

當(dāng)多個用戶訪問同一份數(shù)據(jù)時,一個用戶在更改數(shù)據(jù)的過程中,可能有其他用戶同時發(fā)起更改請求,為保證數(shù)據(jù)庫記錄的更新從一個一致性狀態(tài)變?yōu)榱硗庖粋€一致性狀態(tài),使用事務(wù)處理是非常必要的,事務(wù)具有以下四個特性:

MySQL 提供了多種事務(wù)型存儲引擎,如 InnoDB 和 BDB 等,而 MyISAM 不支持事務(wù)。為了支持事務(wù),InnoDB 存儲引擎引入了與事務(wù)處理相關(guān)的 REDO 日志和 UNDO 日志,同時事務(wù)依賴于 MySQL 提供的鎖機制

事務(wù)執(zhí)行時需要將執(zhí)行的事務(wù)日志寫入日志文件,對應(yīng)的文件為 REDO 日志。當(dāng)每條 SQL 進行數(shù)據(jù)更新操作時,首先將 REDO 日志寫進日志緩沖區(qū)。當(dāng)客戶端執(zhí)行 COMMIT 命令提交時,日志緩沖區(qū)的內(nèi)容將被刷新到磁盤,日志緩沖區(qū)的刷新方式或者時間間隔可以通過參數(shù) innodb_flush_log_at_trx_commit 控制

REDO 日志對應(yīng)磁盤上的 ib_logifleN 文件,該文件默認為 5MB,建議設(shè)置為 512MB,以便容納較大的事務(wù)。MySQL 崩潰恢復(fù)時會重新執(zhí)行 REDO 日志的記錄,恢復(fù)最新數(shù)據(jù),保證已提交事務(wù)的持久性

與 REDO 日志相反,UNDO 日志主要用于事務(wù)異常時的數(shù)據(jù)回滾,具體內(nèi)容就是記錄數(shù)據(jù)被修改前的信息到 UNDO 緩沖區(qū),然后在合適的時間將內(nèi)容刷新到磁盤

假如由于系統(tǒng)錯誤或者 rollback 操作而導(dǎo)致事務(wù)回滾,可以根據(jù) undo 日志回滾到?jīng)]修改前的狀態(tài),保證未提交事務(wù)的原子性

與 REDO 日志不同的是,磁盤上不存在單獨的 UNDO 日志文件,所有的 UNDO 日志均存在表空間對應(yīng)的 .ibd 數(shù)據(jù)文件中,即使 MySQL 服務(wù)啟動了獨立表空間

在 MySQL 中,可以使用 BEGIN 開始事務(wù),使用 COMMIT 結(jié)束事務(wù),中間可以使用 ROLLBACK 回滾事務(wù)。MySQL 通過 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等語句支持本地事務(wù)

MySQL 定義了四種隔離級別,指定事務(wù)中哪些數(shù)據(jù)改變其他事務(wù)可見、哪些數(shù)據(jù)該表其他事務(wù)不可見。低級別的隔離級別可以支持更高的并發(fā)處理,同時占用的系統(tǒng)資源更少

InnoDB 系統(tǒng)級事務(wù)隔離級別可以使用以下語句設(shè)置:

查看系統(tǒng)級事務(wù)隔離級別:

InnoDB 會話級事務(wù)隔離級別可以使用以下語句設(shè)置:

查看會話級事務(wù)隔離級別:

在該隔離級別,所有事務(wù)都可以看到其他未提交事務(wù)的執(zhí)行結(jié)果。讀取未提交的數(shù)據(jù)稱為臟讀(Dirty Read),即是:首先開啟 A 和 B 兩個事務(wù),在 B 事務(wù)更新但未提交之前,A 事務(wù)讀取到了更新后的數(shù)據(jù),但由于 B 事務(wù)回滾,導(dǎo)致 A 事務(wù)出現(xiàn)了臟讀現(xiàn)象

所有事務(wù)只能看見已經(jīng)提交事務(wù)所做的改變,此級別可以解決臟讀,但也會導(dǎo)致不可重復(fù)讀(Nonrepeatable Read):首先開啟 A 和 B 兩個事務(wù),A事務(wù)讀取了 B 事務(wù)的數(shù)據(jù),在 B 事務(wù)更新并提交后,A 事務(wù)又讀取到了更新后的數(shù)據(jù),此時就出現(xiàn)了同一 A 事務(wù)中的查詢出現(xiàn)了不同的查詢結(jié)果

MySQL 默認的事務(wù)隔離級別,能確保同一事務(wù)的多個實例在并發(fā)讀取數(shù)據(jù)時看到同樣的數(shù)據(jù)行,理論上會導(dǎo)致一個問題,幻讀(Phontom Read)。例如,第一個事務(wù)對一個表中的數(shù)據(jù)做了修改,這種修改會涉及表中的全部數(shù)據(jù)行,同時第二個事務(wù)也修改這個表中的數(shù)據(jù),這次的修改是向表中插入一行新數(shù)據(jù),此時就會發(fā)生操作第一個事務(wù)的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行

InnoDB 通過多版本并發(fā)控制機制(MVCC)解決了該問題:InnoDB 通過為每個數(shù)據(jù)行增加兩個隱含值的方式來實現(xiàn),這兩個隱含值記錄了行的創(chuàng)建時間、過期時間以及每一行存儲時間發(fā)生時的系統(tǒng)版本號,每個查詢根據(jù)事務(wù)的版本號來查詢結(jié)果

通過強制事務(wù)排序,使其不可能相互沖突,從而解決幻讀問題。簡而言之,就是在每個讀的數(shù)據(jù)行上加上共享鎖實現(xiàn),這個級別會導(dǎo)致大量的超時現(xiàn)象和鎖競爭,一般不推薦使用

為了解決數(shù)據(jù)庫并發(fā)控制問題,如走到同一時刻客戶端對同一張表做更新或者查詢操作,需要對并發(fā)操作進行控制,因此產(chǎn)生了鎖

共享鎖的粒度是行或者元組(多個行),一個事務(wù)獲取了共享鎖以后,可以對鎖定范圍內(nèi)的數(shù)據(jù)執(zhí)行讀操作

排他鎖的粒度與共享鎖相同,一個事務(wù)獲取排他鎖以后,可以對鎖定范圍內(nèi)的數(shù)據(jù)執(zhí)行寫操作

有兩個事務(wù) A 和 B,如果事務(wù) A 獲取了一個元組的共享鎖,事務(wù) B 還可以立即獲取這個元組的共享鎖,但不能獲取這個元組的排他鎖,必須等到事務(wù) A 釋放共享鎖之后。如果事務(wù) A 獲取了一個元組的排他鎖,事務(wù) B 不能立即獲取這個元組的共享鎖,也不能立即獲取這個元組的排他鎖,必須等到 A 釋放排他鎖之后

意向鎖是一種表鎖,鎖定的粒度是整張表,分為意向共享鎖和意向排他鎖。意向共享鎖表示一個事務(wù)有意對數(shù)據(jù)上共享鎖或者排他鎖。有意表示事務(wù)想執(zhí)行操作但還沒真正執(zhí)行

鎖的粒度主要分為表鎖和行鎖

表鎖的開銷最小,同時允許的并發(fā)量也是最小。MyISAM 存儲引擎使用該鎖機制。當(dāng)要寫入數(shù)據(jù)時,整個表記錄被鎖,此時其他讀/寫動作一律等待。一些特定的動作,如 ALTER TABLE 執(zhí)行時使用的也是表鎖

行鎖可以支持最大的并發(fā),InnoDB 存儲引擎使用該鎖機制。如果要支持并發(fā)讀/寫,建議采用 InnoDB 存儲引擎

如何配置mysql支持事務(wù)

MYSQL--事務(wù)處理

事務(wù)處理在各種管理系統(tǒng)中都有著廣泛的應(yīng)用,比如人員管理系統(tǒng),很多同步數(shù)據(jù)庫操作大都需要用到事務(wù)處理。

比如說,在人員管理系統(tǒng)中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構(gòu)成一個事務(wù)!

如何在mysql中執(zhí)行事務(wù)處理

begin; sql1; sql2;.......; commit;在commit 中的語句都是事務(wù)的一部分,不過如你問題所說數(shù)據(jù)庫管理系統(tǒng)是mysql 所以需要有個問題需要注意存儲引擎是INNODB和BDB類型的數(shù)據(jù)表才支持事務(wù)處理。


文章名稱:mysql中怎么引入事務(wù) mysql事務(wù)怎么用
轉(zhuǎn)載注明:http://weahome.cn/article/hhgjic.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部