sql server触发器作用于mysql表

时间:2022-09-01 05:04:43
sql server中一张表的变化带动mysql中相应的另外一张表变化,
有什么机制可以使sql server 和mysql 建立连接,使得sql server中表的触发器能触发mysql中的表?

16 个解决方案

#1


通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

#2


没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.

#3


引用 2 楼 shoppo0505 的回复:
没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.



从Mysql主动读取sql server中表的数据该怎么实现?大体的思路可以麻烦你写一下吗

#4


引用 1 楼 KanzakiOrange 的回复:
通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

程序去2个数据库写2次怎么理解呢?我不是太明白

#5


引用 3 楼 touxiansinuo018956 的回复:
Quote: 引用 2 楼 shoppo0505 的回复:

没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.



从Mysql主动读取sql server中表的数据该怎么实现?大体的思路可以麻烦你写一下吗

用SQL Agent执行SSIS包

#6


引用 4 楼 touxiansinuo018956 的回复:
Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

程序去2个数据库写2次怎么理解呢?我不是太明白

程序写2次就是单独写一次Sql Server 和写一次MySql ,不要2个数据库混在一起搞,不然到时出错怎么死的都不知道

#7


引用 1 楼 KanzakiOrange 的回复:
通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。

#8


引用 7 楼 misterliwei 的回复:
Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。
用链接服务器做读和写都可以,但是一定不能包含在事务里面,一包含就抛错,而且这个是应用在触发器里面,触发器本身已经是带有事务了,所以结果有可能是一每次插入数据都会抛错

#9


写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

#10


引用 9 楼 misterliwei 的回复:
写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

#11


引用 8 楼 KanzakiOrange 的回复:
Quote: 引用 7 楼 misterliwei 的回复:

Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。
用链接服务器做读和写都可以,但是一定不能包含在事务里面,一包含就抛错,而且这个是应用在触发器里面,触发器本身已经是带有事务了,所以结果有可能是一每次插入数据都会抛错

如果采用发布订阅的方式可以订阅到mssql,oracle和db2;但是订阅上没有明文支持mysql,有什么方式可以使mysql订阅mssql的数据库吗?链接服务器关于触发器的我遇到的问题在#10,也麻烦你有时间帮忙看一下,谢谢。

#12


引用 10 楼 touxiansinuo018956 的回复:
Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

#13


引用 12 楼 misterliwei 的回复:
Quote: 引用 10 楼 touxiansinuo018956 的回复:

Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

我想做的是mssql的表中的数据实时同步到mysql中,业务是只对mssql的表更新插入数据,mysql的表不主动去操作,所以想用触发器,两个数据库在不同的服务器上,想通过addlinkserver来实现两个数据库的连接,分别对两个数据库插入数据可能不合适,链接服务器中用触发器以你的经验来看是否可行呢?

#14


引用 13 楼 touxiansinuo018956 的回复:
Quote: 引用 12 楼 misterliwei 的回复:

Quote: 引用 10 楼 touxiansinuo018956 的回复:

Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

我想做的是mssql的表中的数据实时同步到mysql中,业务是只对mssql的表更新插入数据,mysql的表不主动去操作,所以想用触发器,两个数据库在不同的服务器上,想通过addlinkserver来实现两个数据库的连接,分别对两个数据库插入数据可能不合适,链接服务器中用触发器以你的经验来看是否可行呢?

因为触发器和触发事件 是在同一个事务中。

#15


做了几个实验,又看了一些文章。最后得出的结论是:不可以。
正常的查询,和不涉及到跨数据库的事务是没有问题的。
即使启动了MSDTC,但是mysql odbc驱动不支持MSDTC。

http://bbs.csdn.net/topics/340113443

#16


实际上,根据 连接的描述,像这样跨数据库的分布式事务根本没有什么好的方法的。

#1


通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

#2


没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.

#3


引用 2 楼 shoppo0505 的回复:
没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.



从Mysql主动读取sql server中表的数据该怎么实现?大体的思路可以麻烦你写一下吗

#4


引用 1 楼 KanzakiOrange 的回复:
通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

程序去2个数据库写2次怎么理解呢?我不是太明白

#5


引用 3 楼 touxiansinuo018956 的回复:
Quote: 引用 2 楼 shoppo0505 的回复:

没想法.
一般来说都是主动要求读取数据.你主要要求发送数据没做过.



从Mysql主动读取sql server中表的数据该怎么实现?大体的思路可以麻烦你写一下吗

用SQL Agent执行SSIS包

#6


引用 4 楼 touxiansinuo018956 的回复:
Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

程序去2个数据库写2次怎么理解呢?我不是太明白

程序写2次就是单独写一次Sql Server 和写一次MySql ,不要2个数据库混在一起搞,不然到时出错怎么死的都不知道

#7


引用 1 楼 KanzakiOrange 的回复:
通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。

#8


引用 7 楼 misterliwei 的回复:
Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。
用链接服务器做读和写都可以,但是一定不能包含在事务里面,一包含就抛错,而且这个是应用在触发器里面,触发器本身已经是带有事务了,所以结果有可能是一每次插入数据都会抛错

#9


写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

#10


引用 9 楼 misterliwei 的回复:
写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

#11


引用 8 楼 KanzakiOrange 的回复:
Quote: 引用 7 楼 misterliwei 的回复:

Quote: 引用 1 楼 KanzakiOrange 的回复:

通过链接服务器可以访问到mysql,但我不确定你在触发器中能这样做,可能一执行就死 ,而且只能说这样做起来极度不稳定。说挂就挂
这种牵扯到异构数据库的,最好是程序去2个数据库写2次。

用链接服务器应该是可以做到的。
用链接服务器做读和写都可以,但是一定不能包含在事务里面,一包含就抛错,而且这个是应用在触发器里面,触发器本身已经是带有事务了,所以结果有可能是一每次插入数据都会抛错

如果采用发布订阅的方式可以订阅到mssql,oracle和db2;但是订阅上没有明文支持mysql,有什么方式可以使mysql订阅mssql的数据库吗?链接服务器关于触发器的我遇到的问题在#10,也麻烦你有时间帮忙看一下,谢谢。

#12


引用 10 楼 touxiansinuo018956 的回复:
Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

#13


引用 12 楼 misterliwei 的回复:
Quote: 引用 10 楼 touxiansinuo018956 的回复:

Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

我想做的是mssql的表中的数据实时同步到mysql中,业务是只对mssql的表更新插入数据,mysql的表不主动去操作,所以想用触发器,两个数据库在不同的服务器上,想通过addlinkserver来实现两个数据库的连接,分别对两个数据库插入数据可能不合适,链接服务器中用触发器以你的经验来看是否可行呢?

#14


引用 13 楼 touxiansinuo018956 的回复:
Quote: 引用 12 楼 misterliwei 的回复:

Quote: 引用 10 楼 touxiansinuo018956 的回复:

Quote: 引用 9 楼 misterliwei 的回复:

写操作必然会涉及到事务的,而且因为在mssql 的触发器中写,会涉及到跨数据库 事务。
可能是要设置msdtc的。

我用链接服务器成功连接了两个数据库,可以查询到异地数据库,但是当我给mssql的表
建立了触发器,插入数据到表的时候,会显示触发对应的对象名无效,不能插入;是否意味着链接服务器不支持触发器?
设置msdtc能够解决跨数据库的触发器事务吗?具体设置msdtc怎么做呢?谢谢

不一定在触发器中。只要在SQL SERVER同一个事务中,分别对两个数据库表的数据插入,试试

我想做的是mssql的表中的数据实时同步到mysql中,业务是只对mssql的表更新插入数据,mysql的表不主动去操作,所以想用触发器,两个数据库在不同的服务器上,想通过addlinkserver来实现两个数据库的连接,分别对两个数据库插入数据可能不合适,链接服务器中用触发器以你的经验来看是否可行呢?

因为触发器和触发事件 是在同一个事务中。

#15


做了几个实验,又看了一些文章。最后得出的结论是:不可以。
正常的查询,和不涉及到跨数据库的事务是没有问题的。
即使启动了MSDTC,但是mysql odbc驱动不支持MSDTC。

http://bbs.csdn.net/topics/340113443

#16


实际上,根据 连接的描述,像这样跨数据库的分布式事务根本没有什么好的方法的。