金金沙澳门官网网址SQL Server事务详细明白

1.5.隔离品级

当五个线程都打开事务来操作数据库中的数据时,数据库要能举办隔离操作,以保障各类线程获取数据的准头。若无隔断操作,会鬼使神差以下三种状态:

  • 脏读:二个事务管理进程里读取了另多个未提交的事体中的数据。

举例说:A转100元钱给B,SQL语句如下

UPDATE acount
SET cash=cash+100
WHERE name='B'--此时A通知B
UPDATE acount
SET cash=cash-100
WHERE name='A'

推行完第一条语句时,A通告B,让B确认是不是到账,B确认钱到账(那时候发出了脏读卡塔尔国,而后无论第二条SQL语句是不是实践,只要工作未有提交,全体操作都将回滚,B第二回查看时意识钱并没有到账。

  • 不可重复读:多少个事情约束内多次询问有些数据,重临分裂的值,那是因为该多少被另二个专门的学业修正并交付了。脏读和不得重复读的界别在于,脏读是读取了另贰个业务还未有提交的数目,不可重复都以读取了频繁读取了前一个事情提交了的数码
  • 幻读:比如事务T1将表中某一列数据从1更换成2,同期T2事务插入一条数据,该列值仍然为1,那么客户查询时就能够开掘该表还应该有1列数据为1,未被T1事务纠正。

GRANT
 

目录

—-In the first trans .
 Insert into demo2(name,age) values(‘ok1’,1)
 
—Second Trans begin transaction t2
insert into demo1 values(‘testName5′,’029303290320’)commit transaction
t2
 
—-In the first trans .
 Insert into demo2(name,age) values(‘ok12’,2)
 rollback transaction t1
 
Note:
 
在一花样好些个嵌套的业务中用二个工作名给多少个业务命名对该业务未有何影响。系统仅登记第三个(最外界的卡塔尔国事务名。回滚
 
到此外任何名字(有效的保存点名除了那些之外卡塔 尔(阿拉伯语:قطر‎都会时有发生错误。
 
实在,任何在回滚早先实践的口舌都还未在错误发生时回滚。那语句仅当外层的专门的学问回滚时才会進展回滚。
 
例:内部事务回滚SQL server 报错。
 
begin tran t1
Insert into demo2(name,age) values(‘okok’,1)
 —Second Trans

1.事务

业务在SQL
Server中也正是贰个办事单元,能够确认保障相同的时候发生的一颦一笑与数码的卓有功用不产生冲突,并且保养数据的完整性。在事实上行使中,多个客户在相同一时间刻对同后生可畏都部队分数据开展操作时,恐怕会出于三个顾客的操作使其余客户的操作和多少失效。事务能够很好地解决这或多或少。事务总是确定保证数据库的完整性。

 
 

1.8.拘留长日子运作的政工

CREATE TABLE table1 (a int PRIMARY KEY)
 CREATE TABLE table2 (a int REFERENCES t1(a))
 GO
 INSERT INTO table1 VALUES (1)
 INSERT INTO table1 VALUES (3)
 INSERT INTO table1 VALUES (4)
 INSERT INTO table1 VALUES (6)
 GO
 SET XACT_ABORT OFF
 GO
 BEGIN TRAN
 INSERT INTO table2 VALUES (1)
 INSERT INTO table2 VALUES (2) /* Foreign key error */
 INSERT INTO table2 VALUES (3)
 COMMIT TRAN
 GO
 
SET XACT_ABORT ON
 GO
 
BEGIN TRAN
 INSERT INTO table2 VALUES (4)
 INSERT INTO table2 VALUES (5) /* Foreign key error */
 INSERT INTO table2 VALUES (6)
 COMMIT TRAN
 GO
 
SAVE TRANSACTION
 在业务内安装保存点。
 
语法 SAVE TRAN [ SACTION ] { savepoint_name | @savepoint_variable
}
 参数 savepoint_name
 是支使给保存点的名目。保存点名称必需符合标志符准则,但只行使前 三十多少个字符。
 @savepoint_variable
 是顾客定义的、含有有效保存点名称的变量的名称。
 必得用 char、varchar、nchar 或 nvarchar 数据类型注明该变量。 注释
 客户能够在事情内安装保存点或标识。保存点定义借使有标准化地收回事务的一部分,事
务能够回去的岗位。假如将职业回滚到保存点,则必须(假使急需,使用越来越多的
Transact-SQL 语句和 COMMIT TRANSACTION
语句卡塔 尔(阿拉伯语:قطر‎继续完毕业务,也许必须(通过将专门的学问回滚到其早先点卡塔尔完全撤除事务。若要裁撤一切业务,请使用
ROLLBACK TRANSACTION transaction_name 格式。那将打消事务的全部说话和进程。
 
Note:1: 在由 BEGIN DIST帕杰罗IBUTED TRANSACTION
显式运转或从本地工作跳级而来的分布式事务中,不帮衬 SAVE TRANSACTION。
 
2:当事务带头时,将直接决定工作中所使用的财富直到职业已毕(也正是锁定卡塔 尔(英语:State of Qatar)。当将业务的风华正茂局地回滚到保存点时,将世袭调控财富直到工作实现(只怕回滚全体工作卡塔尔国。
 
例子:begin transaction
 save transaction A
 
create table demo1(name varchar(20),Sno varchar(12))
 insert into demo1 values(‘testName1′,’029303290320’)
 rollback TRANSACTION A
 create table demo2(name varchar(10),age int)
 insert into demo2(name,age) values(‘ok’,1)
 commit transaction
 
ROLLBACK TRANSACTION
 
将显式事务或隐性事务回滚到业务的起源或作行业内部的有些保存点。
 语法
 ROLLBACK [ TRAN [ SACTION ]
 [ transaction_name | @tran_name_variable | savepoint_name |
@savepoint_variable ] ]
 
参数
 transaction_name
 是给 BEGIN TRANSACTION 上的事务指使的名目。transaction_name
必需相符标志符准则,但只行使职业名称的前 32 个字符。嵌套
 事务时,transaction_name 必得是来自最远的 BEGIN TRANSACTION
语句的称号。
 @tran_name_variable
 是客户定义的、含有有效专门的学业名称的变量的名目。必需用 char、varchar、nchar
或 nvarchar 数据类型注明该变量。
 savepoint_name
 是来自 SAVE TRANSACTION 语句的 savepoint_name。savepoint_name
必得相符标志符准则。当条件回滚只影响职业的一片段时使 用
savepoint_name。
 @savepoint_variable
 是客商定义的、含有有效保存点名称的变量的称呼。必需用
char、varchar、nchar 或 nvarchar 数据类型证明该变量。
 
批注 ROLLBACK TRANSACTION
解除自事务的源点或到有些保存点所做的具备数据修正。ROLLBACK
还释放由职业调节的财富。
 不带 savepoint_name 和 transaction_name 的 ROLLBACK TRANSACTION
回滚到职业的起源。嵌套事务时,该语句将持有内层事务回滚到 最远的 BEGIN
TRANSACTION 语句。在此二种意况下,ROLLBACK TRANSACTION 均将 @@TRANCOUNT
系统函数减为 0。ROLLBACK
TRANSACTION savepoint_name 不减少 @@TRANCOUNT。
 
Note:
ROLLBACK TRANSACTION 语句若钦命 savepoint_name 则不自由其余锁。
 在由 BEGIN DIST途达IBUTED TRANSACTION
显式运维或从本地专门的学问进级而来的布满式事务中,ROLLBACK TRANSACTION 不能够
 引用savepoint_name。在举行 COMMIT TRANSACTION 语句后不能够回滚事务。
 
在事行业内部允许有重复的保存点名称,但 ROLLBACK TRANSACTION
若使用重复的保存点名称,则只回滚到近日的利用该保存点名称的SAVE
TRANSACTION。
 
在仓库储存进度中,不带 savepoint_name 和 transaction_name 的 ROLLBACK
TRANSACTION 语句将全数语句回滚到最远的
BEGINTRANSACTION。在蕴藏进程中,ROLLBACK TRANSACTION 语句使 @@TRANCOUNT
在触发器完结时的值分歧于调用该存款和储蓄进程时的@@TRANCOUNT
值,况兼生成二个音讯。该音讯不影响前面包车型客车拍卖。
 
如若在触发器中生出 ROLLBACK
TRANSACTION:将回滚对现阶段思想政治工作中的那点所做的具备数据订正,富含触发器所做的改动。
触发器继续试行 ROLLBACK
语句之后的持有别的语句。借使那几个语句中的大肆语句纠正数据,则不回滚那个更改。实行别的的语句不会激励嵌套触发器。在批管理中,不推行全数位于激发触发器的言辞之后的言辞。每一遍步入触发器,@@TRANCOUNT
就扩充1,就算在机动提交方式下也是这么。(系统将触发器视作隐性嵌套事务。卡塔尔
 
在存储进度中,ROLLBACK TRANSACTION
语句不影响调用该进程的批管理中的后续语句;
 将推行批管理中的后续语句。在触发器中,ROLLBACK TRANSACTION
语句终止含有激情触发器的言辞的批管理;
 不举办批管理中的后续语句。
 
ROLLBACK TRANSACTION
语句不调换突显给顾客的信息。假若在仓库储存进程或触发器中供给告诫,请使用
RAISE智跑RO纳瓦拉 或 P梅赛德斯-迈巴赫INT 语句。RAISE库罗德RO大切诺基 是用来建议错误的首荐语句。
 
ROLLBACK 对游标的震慑由下边多个准绳定义:
当 CURSOR_CLOSE_ON_COMMIT 设置为 ON 时,ROLLBACK
关闭但不自由具备张开的游标。
当 CURSOR_CLOSE_ON_COMMIT 设置为 OFF 时,ROLLBACK
不影响其余展开的一块儿 STATIC 或 INSENSITIVE 游标不影响已完全填充的异步
STATIC 游标。将关门但不自由别的此外类型的开垦的游标。
对此形成终止批处理并扭转内部回滚的不当,将释放在蕴藏该错误语句的批管理内表明的有所游标。
 无论游标的门类或 CUEnclaveSOEscort_CLOSE_ON_COMMIT
的安装,全部游标均将被放走,此中包罗在该错误批管理所调用的蕴藏进程内注明的游标。在该错误批管理在此以前的批管理内注明的游标以法则1 和 2 为准。死锁错误就归属那类错误。在触发器中爆发的 ROLLBACK 语句也
自动生成那类错误。

1.3.处总管业

驷比不上舌运用以下4条语句处监护人业:BEGIN TRANSACTION,COMMIT
TRANSACTION,ROLLBACK TRANSACTION和SAVE
TRANSACTION。此外还应该有2个全局变量能够用在事务管理语句中:@@ERubiconRO昂科拉和@@TRANCOUNT。
BEGIN TRANSACTION,COMMIT TRANSACTION,ROLLBACK TRANSACTION非常少说了。

   ROLLBACK TRAN
 END
 GO
 
COMMIT TRANSACTION
 标识八个打响的隐性事务或顾客定义事务的收尾。纵然 @@TRANCOUNT 为
1,COMMIT

1.3.2.@@TRANCOUNT变量和@@ERROR变量

@@TRANCOUNT变量报告当前嵌套事务为第几层嵌套,每种BEGIN
TRANSACTION都能使@@TRANCOUNT加大器晚成,@@EENCORERO锐界变量用来保存任何一条T-SQL语句的新式错误号。
示例4:对示例3中代码加上对@@TRANCOUNT和@@EEvoqueRO汉兰达变量的拜见
实施下列语句

BEGIN TRANSACTION changed
SELECT @@TRANCOUNT AS trancount
INSERT INTO student(stu_no,stu_name,stu_sex,stu_enter_score)
VALUES('20180016','陈甜甜','女','661')
SAVE TRANSACTION saveinsert--设置保存事务点saveinsert
UPDATE student
SET stu_sex='错误数据'
WHERE stu_no='20180016'
SELECT @@ERROR AS error
ROLLBACK TRANSACTION saveinsert--回滚到保存事务点saveinsert
COMMIT TRANSACTION changed
GO

结果如图所示
金金沙澳门官网网址 1
示例5:对@@TRANCOUNT变量的理解
奉行下列语句

BEGIN TRANSACTION changed1
SELECT @@TRANCOUNT AS trancount
INSERT INTO class(class_id,class_name,enter_score_level)
VALUES('07','TEST','TEST')
BEGIN TRANSACTION changed2
INSERT INTO class(class_id,class_name,enter_score_level)
VALUES('08','TEST','TEST')
BEGIN TRANSACTION changed3
SELECT @@TRANCOUNT AS trancount
INSERT INTO class(class_id,class_name,enter_score_level)
VALUES('09','TEST','TEST')
COMMIT TRANSACTION changed3
COMMIT TRANSACTION changed2
COMMIT TRANSACTION changed1

自己在changed1和changed3中对@@TRANCOUNT变量实行了拜谒,结果如图所示
金金沙澳门官网网址 2
每个BEGIN TRANSACTION都使@@TRANCOUNT加一。

BEGIN TRANSACTION
 标志一个显式本地专门的工作的开始点。
 
BEGIN TRANSACTION将 @@TRANCOUNT 加 1。
 
BEGIN TRANSACTION
代表一点,由连接引用的数量在该点是逻辑和物理上都相似的。要是遇上错误,在
BEGIN TRANSACTION
之后的有所数据变动都能开展回滚,以将数据重返到已知的如出大器晚成辙状态
。每个业务继续推行直到它不易地做到同时用 COMMIT TRANSACTION
对数据库作恒久的改换,可能遇上错误况兼用 ROLLBACK TRANSACTION
语句擦除全体改动
 
语法
 BEGIN TRAN [ SACTION ] [ transaction_name | @tran_name_variable
[ WITH MARK [ ‘description’ ] ] ]
 
例子:
 BEGIN TRAN T1
 UPDATE table1 …
 –nest transaction M2
 BEGIN TRAN M2 WITH MARK
 UPDATE table2 …
 SELECT * from table1
 COMMIT TRAN M2
 UPDATE table3 …
 COMMIT TRAN T1
 
BEGIN DISTRIBUTED TRANSACTION
 钦定二个由 Microsoft 分布式事务管理和谐器 (MS DTC) 管理的 Transact-SQL
布满式事务的序幕。
 
语法
 BEGIN DISTRIBUTED TRAN [ SACTION ]
 [ transaction_name | @tran_name_variable ]
 
参数
 transaction_name
 是客户定义的事务名,用于追踪 MS DTC 实用工具中的布满式事务。
transaction_name 必须切合标记符准则,不过仅使用头 32 个字符
 
@tran_name_variable
 是顾客定义的三个变量名,它含有一个事务名,该事务名用于追踪 MS DTC
实用工具中的分布式事务。必需用 char、varchar、nchar 或 nvarchar
数据类型注解该变量。
 
注释
 试行BEGIN DIST奥迪Q7IBUTED TRANSACTION
语句的服务器是职业创制人,何况决定作业的实现
 
当连接发出后续 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 语句时,
 主要控克制务器诉求 MS DTC 在所涉及的劳务器间管理布满式事务的达成。
 有八个点子可将远程 SQL 服务器登记在叁个分布式事务中:

  • 1.事务
    • 1.1.事务的ACID属性
    • 1.2.事务分类
      • 1.2.1.种类提供的事情
      • 1.2.2.客商自定义的政工
    • 1.3.关押作业
      • 1.3.1.SAVE
        TRANSACTION
      • 1.3.2.@@TRANCOUNT变量和@@ERROR变量
    • 1.4.SQL
      Server本地政工援助

      • 1.4.1.机动提交业务形式
      • 1.4.2.显式事务格局
      • 1.4.3.隐式事务方式
      • 1.4.4.批节制的事务
    • 1.5.隔绝等级
      • 1.5.1.七种隔绝等第
      • 1.5.2.安装专门的学业隔绝等级
    • 1.6.分布式事务
    • 1.7.尖端事务大旨
    • 1.8.拘押长日子运作的作业
      • 1.8.1.查看短时间运作的事务
      • 1.8.2.停下作业

1.4.SQL Server本地职业扶植

应用程序主要通过安装职业起头时间和职业截至时间来治本业务。那能够透过函数也许应用程序接口(API卡塔 尔(英语:State of Qatar)完毕。暗许景况下,事务按连接等级举行拍卖,使用API函数只怕SQL语句,能够将职业作为显式,隐式和机关提交业务来拍卖。

布满式事务中已登记的接连推行一个长间距存储进程调用,该调用引用三个远程服务器。
布满式事务中已登记的接连几天实施二个布满式查询,该查询引用三个长间距服务器。

1.8.2.苏息作业

截止职业恐怕必得运转KILL语句,使用该语句时要小心,特别是在运转重大的进度时。

 
 

1.4.4.批限量的专门的学业

该事业只适用于多个移动的结果集。在MA奥迪Q5S会话中运维的SQL显式或隐式事务,将改为批范围事务,当批管理到位时,假使批范围事务还没被提交或回滚,SQL
Server将电动对其进展回滚。

 
 

1.8.1.查看长期运作的事体

奉行下列语句

SELECT * FROM sys.dm_tran_database_transactions

结果如图所示
金金沙澳门官网网址 3

CREATE
 

1.2.2.客户自定义的事务

实质上应用中,平日应用客户自定义的作业。自定义的方法是,以BEGIN
TRANSACTION开首,以COMMIT TRANSACTION或ROLLBACK
TRANSACTION甘休。那三个语句之间具备语句都被视为风流罗曼蒂克体。
示例2:自定义事务的接纳

BEGIN TRANSACTION
INSERT INTO student(stu_no,stu_name,stu_birthday,stu_enter_score)
VALUES('20180013','贾乃亮','1993-01-20','498')
INSERT INTO student(stu_no,stu_name,stu_birthday,stu_enter_score)
VALUES('20180014','周星星','1993-07-20','532')
INSERT INTO student(stu_no,stu_name,stu_birthday,stu_enter_score)
VALUES('20180015','雨化田','错误格式数据','570')
INSERT INTO student(stu_no,stu_name,stu_birthday,stu_enter_score)
VALUES('20180016','周琪','1993-01-20','653')
INSERT INTO student(stu_no,stu_name,stu_birthday,stu_enter_score)
VALUES('20180017','陈璐','1998-01-20','599')
COMMIT TRANSACTION

在上头的业务中,第三条插入数据是张冠李戴数据,不只怕成功插入,实行上面包车型客车话语,开掘全数插入语句都未曾被实行成功。
还可能有生机勃勃种客商自定义事务——分布式事务。纵然在相比复杂的条件中,有多台服务器,为了保障服务器中数据的完整性和生龙活虎致性,就亟须定义三个遍及式事务。举例,有2台服务器,黄金时代台寄放库存数量,另豆蔻梢头台寄存订单数量,客户下单的逻辑是,下单前先扣除仓库储存数量,再下单。若无布满式事务,轻松并发扣除仓库储存数据,单下单却没得逞,形成三个数据库数据不等同的动静。

FETCH
 

1.5.2.安装职业隔开等级

暗中认可景况下,SQL Server 二〇〇八的事情隔开分离等级为付出读。可经过SET TRANSACTION
ISOLATION LEVEL来设置工作隔绝等第。

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

DELETE
 

1.4.3.1.通过SET IMPLICIT_TRANSACTIONS ON语句设置隐式事务格局

显式事务格局形式会在有恢宏DDL和DML语句实施时自动初阶,并直接维持到顾客鲜明提交截至。也正是说,借使设置了隐式事务格局,而SQL语句中又有业务未有刚毅提交,即选用COMMIT
TRANSACTION语句提交,那么顾客断开连接,或许关闭数据库时,系统会领悟有未提交的工作,是或不是交由,假若选取否,那么未提交的作业将会被回滚,下一次总是时就不设有了。
示例7:实践下列语句

SET IMPLICIT_TRANSACTIONS ON
GO

USE test
CREATE TABLE T1(
id INT NOT NULL,
name VARCHAR(20),
age INT,
CONSTRAINT pk_id PRIMARY KEY(id)
)
INSERT INTO T1(id,name,age)VALUES
('1001','宋佳佳','26')
COMMIT TRANSACTION
INSERT INTO T1(id,name,age)VALUES
('1002','陈琦','23')
INSERT INTO T1(id,name,age)VALUES
('1003','卢哲','27')
SELECT * FROM T1

结果如图所示
金金沙澳门官网网址 4
接下来断开连接,现身如下提醒
金金沙澳门官网网址 5
如果采用否的话,再度连接成功后SELECT T1表,结果如图所示
金金沙澳门官网网址 6
会发觉1002和1003的笔录都被回滚了,这是因为在插入的时候,这两条语句的政工未有COMMIT,唯有首先条插入语句被提交了。那正是隐式事务格局。

TRANSACTION 使得自从职业初阶以来所实行的
全部数据改良成为数据库的流芳千古部分,释放连接
 
占有的财富,并将 @@TRANCOUNT 减弱到 0。假设@@TRANCOUNT 大于
1,则COMMIT

1.6.布满式事务

对五个数据库中的数据开展更改的业务,是布满式事务。那些数据库能够是地点数据库,也足以是别的链接服务器上的数据库。
布满式事务由二个布满式事务协和程序(DTC卡塔尔国来决定,若想使用布满式事务,必需先运营该服务。在遍及式事务中用COMMIT
TRANSACTION提交业务,数据库会自动调用一个两步提交协议:1.通告每一种数据库考验它们能够交给该事情并保留财富。2.当各种相关数据库通知SQL
Server 二〇一〇能够任何时候提交该业务后,SQL Server
二〇〇九布告有关数据库提交该事务。假若有三个数据库一定要负众望交付该事情,则SQL
Server 二零零六会通告全体有关数据库回滚该专业。

TRUNCATE TABLE
 

1.2.1.系统提供的事务

系统提供的政工是指推行有个别T-SQL语句时,一条语句段构成了二个作业,如ALTER
TABLE,CREATE,DELETE,DROP,FETCH等。

USE pubs
 GO
 BEGIN DISTRIBUTED TRANSACTION
 UPDATE authors
 SET au_lname = ‘McDonald’ WHERE au_id = ‘409-56-7008’
 EXECUTE link_Server_T.pubs.dbo.changeauth_lname
‘409-56-7008′,’McDonald’
 COMMIT TRAN
 GONote:
 要是急需三回九转远程DB,假设是linkServer
方式连接的话,一定要修该linkServer的 RPC 选项置为 True。
 
SET XACT_ABORT
 内定当 Transact-SQL 语句爆发运维时不当时,Microsoft? SQL Server?
是不是自动回滚当前政工。
 
( 能够比较轻巧的精通,要是中间有别的一句SQL
出错,全体SQL全体回滚.极其适用于 Procedure 中间调用Procedure
,若是第多少个Procedure Ok,被调用的Procedure 中间有不当,就算SET
XACT_ABORT=false,则失误的局地回滚,别的一些交给,当然外界Procedure
也提交。卡塔 尔(英语:State of Qatar).
 
—在布满式Trans中无庸置疑要注意设置上面参数(XACT_ABORT)
 
语法SET XACT_ABORT { ON | OFF }
 
注释 当 SET XACT_ABORT 为 ON 时,假设 Transact-SQL
语句发生运营时不当,整个专业将终止并回滚。为 OFF
时,只回滚产生错误的Transact-SQL
语句,而专门的学问将世袭拓展管理。编写翻译错误(如语法错误卡塔 尔(英语:State of Qatar)不受 SET XACT_ABORT
的影响。
 
对此好些个 OLE DB 提供程序(包罗 SQL
Server卡塔尔,隐性或显式事务中的数据修正语句必得将 XACT_ABORT 设置为 ON。
 
SET XACT_ABORT 的设置是在奉行或运维时设置,并非在深入分析时设置。
 
示例 下例引致在含蓄其余 Transact-SQL
语句的作业中发出违反外键错误。在首先个语句聚焦产生错误,但任何语句均成功施行且职业成功
 提交。在其次个语句集中,SET XACT_ABORT 设置为
ON。这诱致语句错误使批管理终止,并使业务回滚。

1.4.3.隐式事务形式

隐式事务格局是后生可畏种连接选项,在该选项下种种连接试行的SQL语句都被视为单独的事体。当连接以隐式事务格局张开操作时,SQL
Server将在作业提交或作业回滚后活动初始新职业。隐式事务情势无需BEGIN
TRANSACTION这种话语来扩充定义。

DROP
 

1.7.高级事务核心

  • 嵌套事务:显式事务能够嵌套在仓库储存进程中
  • 作业保存点:提供了大器晚成种可以部分回滚事务的体制
  • 绑定会话:有辅助在叁个服务器上的多少个会话之间的协和操作,允许一个或多少个会话分享工作和锁,并且能够接纳同多个数额,不会有锁的冲突

INSERT
 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

CopyRight © 2015-2019 金沙中心城 All Rights Reserved.
网站地图xml地图