join远程数据库(join数据库用法)

软件开发 105
本篇文章给大家谈谈join远程数据库,以及join数据库用法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 数据库中的运算符 ——join运算符的作用。 给你3个示例 如表A和表B,通过id进行关联1。内连接 inner join...on 取表A和表B共有数据select * from A inner join B on A.id=B.id也可以省略inner,直接用join,因为默认就是inner join)

本篇文章给大家谈谈join远程数据库,以及join数据库用法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

数据库中的运算符 ——join运算符的作用。

给你3个示例 如表A和表B,通过id进行关联

1。内连接 inner join...on 取表A和表B共有数据

select * from A inner join B on A.id=B.id

也可以省略inner,直接用join,因为默认就是inner join)

2.左连接 left join...on 去左边表的全部数据,右边表能匹配上就取,不匹配置为NULL

select * from A left join B on A.id=B.id

3.右连接,right join...on 和2类似

具体数据示例

A

id name

1 hello

2 world

3 !

B

id value

2 hi

4 baidu

这样连接的结果

一。 inner join

id name id value

2 world 2 hi

二left join

id name id value

1 hello null null

2 world 2 hi

3 ! null null

三 right join

id name id value

null null 2 hi

null null 4 baidu

如何在一条sql语句中连接远程数据库,sql server 2000

建议使用链接服务器

在一条sql语句中连接远程数据库可以使用OpenRowSet函数,下例即在语句中以Jet4.0接口链接了远程数据库Northwind.mdb,其他数据库可参考其接口参数修改。

USE Northwind

GO

SELECT c.*, o.*

FROM Northwind.dbo.Customers AS c

INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:Program FilesMicrosoft OfficeOFFICE11SAMPLESNorthwind.mdb';'admin';'', Orders)

AS o

ON c.CustomerID = o.CustomerID

GO

以下是SQL Server 2005 联机丛书资料,对Sql server 2000 依然有效。

OPENROWSET (Transact-SQL)

包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的临时方法。对于较频繁引用 OLE DB 数据源的情况,请改为使用链接服务器。有关详细信息,请参阅链接服务器。可以在查询的 FROM 子句中像引用表名那样引用 OPENROWSET 函数。依据 OLE DB 访问接口的功能,还可以将 OPENROWSET 函数引用为 INSERT、UPDATE 或 DELETE 语句的目标表。尽管查询可能返回多个结果集,但 OPENROWSET 只返回第一个结果集。

OPENROWSET 还通过内置的 BULK 访问接口支持大容量操作,正是有了该访问接口,才能从文件读取数据并将数据作为行集返回。

Transact-SQL 语法约定

语法

OPENROWSET

( { 'provider_name' , { 'datasource' ; 'user_id' ; 'password'

| 'provider_string' }

, { [ catalog. ] [ schema. ] object

| 'query'

}

| BULK 'data_file' ,

{ FORMATFILE = 'format_file_path' [ bulk_options ]

| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }

} )

bulk_options ::=

[ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]

[ , ERRORFILE = 'file_name' ]

[ , FIRSTROW = first_row ]

[ , LASTROW = last_row ]

[ , MAXERRORS = maximum_errors ]

[ , ROWS_PER_BATCH = rows_per_batch ]

参数

' provider_name '

字符串,表示在注册表中指定的 OLE DB 访问接口的友好名称(或 PROGID)。provider_name 没有默认值。

' datasource '

对应于特定 OLE DB 数据源的字符串常量。datasource 是要传递给访问接口的 IDBProperties 接口的 DBPROP_INIT_DATASOURCE 属性,该属性用于初始化访问接口。通常,该字符串包含数据库文件的名称、数据库服务器的名称,或者访问接口能理解的用于定位数据库的名称。

' user_id '

字符串常量,它是传递给指定 OLE DB 访问接口的用户名。user_id 为连接指定安全上下文,并作为 DBPROP_AUTH_USERID 属性传入以初始化访问接口。user_id 不能是 Microsoft Windows 登录名称。

' password '

字符串常量,它是传递给 OLE DB 访问接口的用户密码。在初始化访问接口时,password 作为 DBPROP_AUTH_PASSWORD 属性传入。password 不能是 Microsoft Windows 密码。

' provider_string '

访问接口特定的连接字符串,作为 DBPROP_INIT_PROVIDERSTRING 属性传入以初始化 OLE DB 访问接口。通常 provider_string 封装初始化访问接口所需的所有连接信息。有关 SQL Native Client OLE DB 访问接口可识别的关键字列表,请参阅Initialization and Authorization Properties。

catalog

指定对象所在的目录或数据库的名称。

schema

架构的名称或指定对象的对象所有者名称。

object

对象名,它唯一地标识出将要操作的对象。

' query '

字符串常量,发送到访问接口并由访问接口执行。SQL Server 的本地实例不处理该查询,但处理由访问接口返回的查询结果(传递查询)。有些访问接口并不通过表名而是通过命令语言提供其表格格式数据,将传递查询用于这些访问接口是非常有用的。只要查询访问接口支持 OLE DB Command 对象及其强制接口,那么在远程服务器上就支持传递查询。有关详细信息,请参阅 SQL Native Client (OLE DB) Reference。

BULK

使用 OPENROWSET 的 BULK 行集访问接口读取文件中的数据。在 SQL Server 2005 中,OPENROWSET 无需将数据文件中的数据加载到目标表,便可读取这些数据。这样便可在单个 SELECT 语句中使用 OPENROWSET。

BULK 选项的参数可对何时开始和结束数据读取、如何处理错误以及如何解释数据提供有效控制。例如,可以指定以类型为 varbinary、varchar 或 nvarchar 的单行单列行集的形式读取数据文件。默认行为详见随后的参数说明。

有关如何使用 BULK 选项的信息,请参阅本主题后面的“备注”部分。有关 BULK 选项所需权限的信息,请参阅本主题后面的“权限”部分。

注意:

当用于以完整恢复模式导入数据时,OPENROWSET (BULK ...) 不优化日志记录。

有关为大容量导入准备数据的信息,请参阅准备用于大容量导出或大容量导入的数据。

' data_file '

数据文件的完整路径,该文件的数据将被复制到目标表中。

FORMATFILE = 'format_file_path'

指定格式化文件的完整路径。SQL Server 2005 支持两种格式化文件类型:XML 和非 XML。

格式化文件对定义结果集中的列类型是必需的。唯一的例外情况是指定 SINGLE_CLOB、SINGLE_BLOB 或 SINGLE_NCLOB 时;在这种情况下,不需要格式化文件。

有关格式化文件的信息,请参阅使用格式化文件大容量导入数据。

bulk_options

指定 BULK 选项的一个或多个参数。

CODEPAGE = { 'ACP '| 'OEM '| 'RAW '| 'code_page' }

指定该数据文件中数据的代码页。仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,CODEPAGE 才是适用的。

CODEPAGE 值 说明

ACP

将数据类型为 char、varchar 或 text 的列由 ANSI/Microsoft Windows 代码页 (ISO 1252) 转换为 SQL Server 代码页。

OEM(默认值)

将数据类型为 char、varchar 或 text 的列由系统 OEM 代码页转换为 SQL Server 代码页。

RAW

不执行从一个代码页到另一个代码页的转换。这是执行最快的选项。

code_page

指示编码数据文件中的字符数据所在的源代码页;例如,850。该代码页对 SQL Server 2005 数据库引擎正确解释输入数据是必需的。

ERRORFILE = 'file_name'

指定用于收集格式有误且不能转换为 OLE DB 行集的行的文件。这些行将按原样从数据文件复制到此错误文件中。

错误文件在开始执行命令时创建。如果该文件已存在,将引发一个错误。此外,还创建了一个扩展名为 .ERROR.txt 的控制文件。此文件引用错误文件中的每一行并提供错误诊断。纠正错误后即可加载数据。

FIRSTROW = first_row

指定要加载的第一行的行号。默认值为 1,指示指定数据文件的第一行。通过对行终止符进行计数来确定行号。

LASTROW = last_row

指定要加载的最后一行的行号。默认值为 0,指示指定数据文件中的最后一行。

MAXERRORS = maximum_errors

指定格式化文件中定义的、在 OPENROWSET 引发异常之前可以发生的语法错误或格式有误行的最大数目。在达到 MAXERRORS 之前,OPENROWSET 会忽略每个错误行,不加载它,并将其计为一个错误。

maximum_errors 的默认值为 10。

注意:

MAX_ERRORS 不适用于 CHECK 约束,也不适用于 money 和 bigint 数据类型的转换。

ROWS_PER_BATCH = rows_per_batch

指定数据文件中近似的数据行数量。该值应与实际行数相同。

OPENROWSET 始终以单批形式导入数据文件。但如果将 rows_per_batch 的值指定为 0,则查询处理器在查询计划中分配资源时将使用 rows_per_batch 的值作为提示。

默认情况下,ROWS_PER_BATCH 未知。指定 ROWS_PER_BATCH = 0 相当于忽略 ROWS_PER_BATCH。

SINGLE_BLOB

将 data_file 的内容作为类型为 varbinary(max) 的单行单列行集返回。

重要提示:

我们建议您仅使用 SINGLE_BLOB 选项(而不是 SINGLE_CLOB 和 SINGLE_NCLOB)导入 XML 数据,因为只有 SINGLE_BLOB 支持所有的 Windows 编码转换。

SINGLE_CLOB

通过以 ASCII 格式读取 data_file,使用当前数据库的排序规则将内容作为类型为 varchar(max) 的单行单列行集返回。

SINGLE_NCLOB

通过以 UNICODE 格式读取 data_file,使用当前数据库的排序规则将内容作为类型为 nvarchar(max) 的单行单列行集返回。

备注

只有在以下情况下才能使用 OPENROWSET 访问 OLE DB 数据源中的远程数据:指定访问接口的 DisallowAdhocAccess 注册表选项已显式设置为 0,并启用了 Ad Hoc Distributed Queries 高级配置选项。如果未设置这些选项,则默认行为不允许即席访问。

访问远程 OLE DB 数据源时,服务器不会自动委托可信连接的登录标识,客户端通过此登录标识才能连接到正在查询的服务器。必须配置身份验证委托。有关详细信息,请参阅为委托配置链接服务器。

如果 OLE DB 访问接口在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 访问接口并不支持多个目录和架构,那么可以忽略 catalog 和 schema 的值。如果访问接口只支持架构名称,那么必须指定一个格式为 schema.object 的两部分名称。如果访问接口只支持目录名称,那么必须指定一个格式为 catalog.schema.object 的三部分名称。必须为使用 SQL Native Client OLE DB 访问接口的传递查询指定三部分名称。有关详细信息,请参阅 Transact-SQL 语法约定 (Transact-SQL)。

OPENROWSET 不接受参数变量。

使用带有 BULK 选项的 OPENROWSET

以下 Transact-SQL 增强功能支持 OPENROWSET(BULK…) 函数:

与 SELECT 一起使用的 FROM 子句可以调用 OPENROWSET(BULK…) 而非表名,同时可以实现完整的 SELECT 功能。

带有 BULK 选项的 OPENROWSET 在 FROM 子句中需要有一个相关名称,也称为范围变量或别名。可以指定列别名。如果未指定列别名列表,则格式化文件必须具有列名。指定列别名会覆盖格式化文件中的列名,例如:

FROM OPENROWSET(BULK...) AS table_alias

FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

SELECT...FROM OPENROWSET(BULK...) 语句将直接查询文件中的数据,无需将数据导入表中。SELECT...FROM OPENROWSET(BULK...) 语句还可以通过使用格式化文件指定列名和数据类型,从而列出大容量列别名。

INSERT...SELECT * FROM OPENROWSET(BULK...) 语句将数据文件中的数据大容量导入 SQL Server 表中。有关详细信息,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。

OPENROWSET BULK 选项与 INSERT 语句一起使用时,BULK 子句支持表提示。除了 TABLOCK 等常规表提示之外,BULK 子句还可以接受下列专用表提示:IGNORE_CONSTRAINTS(仅忽略 CHECK 和 FOREIGN KEY 约束)、IGNORE_TRIGGERS、KEEPDEFAULTS 和 KEEPIDENTITY。有关详细信息,请参阅表提示 (Transact-SQL)。

有关如何使用 INSERT...SELECT * FROM OPENROWSET(BULK...) 语句的信息,请参阅导入和导出大容量数据。有关何时在事务日志中记录由大容量导入执行的行插入操作的信息,请参阅在大容量导入中按最小方式记录日志的前提条件。

注意:

使用 OPENROWSET 时,请务必了解 SQL Server 2005 是如何处理模拟的。有关安全注意事项的信息,请参阅使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据。

大容量导出或导入 SQLXML 文档

若要大容量导出或导入 SQLXML 数据,请在格式化文件中使用下列数据类型之一。

数据类型 效果

SQLCHAR 或 SQLVARYCHAR

在客户端代码页或排序规则隐含的代码页中发送数据。

SQLNCHAR 或 SQLNVARCHAR

以 Unicode 格式发送数据。

SQLBINARY 或 SQLVARYBIN

不经任何转换即发送数据。

权限

OPENROWSET 权限由传递给 OLE DB 访问接口的用户名的权限确定。若要使用 BULK 选项,则需要有 ADMINISTER BULK OPERATIONS 权限。

示例

A. 将 OPENROWSET 用于 SELECT 和 SQL Native Client OLE DB 访问接口

以下示例使用 SQL Native Client OLE DB 访问接口 (SQLNCLI) 访问 HumanResources.Department 表,该表位于远程服务器 Seattle1 上的 AdventureWorks 数据库中。使用 SELECT 语句定义返回的行集。访问接口字符串包含 Server 和 Trusted_Connection 关键字。这些关键字由 SQL Native Client OLE DB 访问接口识别。

复制代码

SELECT a.*

FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',

'SELECT GroupName, Name, DepartmentID

FROM AdventureWorks.HumanResources.Department

ORDER BY GroupName, Name') AS a;

B. 使用 Microsoft OLE DB Provider for Jet

以下示例通过 Microsoft OLE DB Provider for Jet 访问 Microsoft Access Northwind 数据库中的 Customers 表。

注意:

该示例假定已经安装了 Access。若要运行该示例,则必须安装 Northwind 数据库。有关如何安装 Northwind 数据库的详细信息,请参阅下载 Northwind 和 pubs 示例数据库。

复制代码

SELECT CustomerID, CompanyName

FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:Program FilesMicrosoft OfficeOFFICE11SAMPLESNorthwind.mdb';

'admin';'',Customers)

GO

C. 使用 OPENROWSET 和 INNER JOIN 中的另一个表

以下示例从 SQL Server Northwind 数据库的本地实例中的 Customers 表以及存储在同一计算机上的 Access Northwind 数据库中的 Orders 表选择所有数据。

注意:

该示例假定已经安装了 Access。若要运行该示例,则必须安装 Northwind 数据库。有关如何安装 Northwind 数据库的详细信息,请参阅下载 Northwind 和 pubs 示例数据库。

复制代码

USE Northwind

GO

SELECT c.*, o.*

FROM Northwind.dbo.Customers AS c

INNER JOIN OPENROWSET('Microsoft.Jet.OLEDB.4.0',

'C:Program FilesMicrosoft OfficeOFFICE11SAMPLESNorthwind.mdb';'admin';'', Orders)

AS o

ON c.CustomerID = o.CustomerID

GO

D. 使用 OPENROWSET 将文件数据大容量插入 varbinary(max) 列中

以下示例创建一个用于演示的小型表,并将名为 Text1.txt 的文件(位于 C: 根目录)中的文件数据插入 varbinary(max) 列中。

复制代码

USE AdventureWorks

GO

CREATE TABLE myTable(FileName nvarchar(60),

FileType nvarchar(60), Document varbinary(max))

GO

INSERT INTO myTable(FileName, FileType, Document)

SELECT 'Text1.txt' AS FileName,

'.txt' AS FileType,

* FROM OPENROWSET(BULK N'C:Text1.txt', SINGLE_BLOB) AS Document

GO

E. 将 OPENROWSET BULK 访问接口用于格式化文件以检索文本文件中的行

以下示例使用格式化文件检索用制表符分隔的文本文件 values.txt 中的行,该文件包含下列数据:

复制代码

1 Data Item 1

2 Data Item 2

3 Data Item 3

格式化文件 values.fmt 说明 values.txt 中的列:

复制代码

9.0

2

1 SQLCHAR 0 10 "t" 1 ID SQL_Latin1_General_Cp437_BIN

2 SQLCHAR 0 40 "rn" 2 Description SQL_Latin1_General_Cp437_BIN

下面的语句是检索此数据的查询:

复制代码

SELECT a.* FROM OPENROWSET( BULK 'c:testvalues.txt',

FORMATFILE = 'c:testvalues.fmt') AS a;

数据库中join的用法

数据库中join的用法的用法你知道吗?下面我就跟你们详细介绍下数据库中join的用法的用法,希望对你们有用。

数据库中join的用法的用法如下:

一、join的用法

内连接、外连接

示例用表:

雇员表(Employee)

LastNameDepartmentID

Rafferty31

Jones33

Steinberg33

Robinson34

Smith34

JasperNULL

部门表(Department)

DepartmentID部门

31销售部

33工程部

34书记

35市场部

1、内连接:相等连接、自然连接、交叉连接

1)、显式的内连接与隐式连接(inner join == join )

显示连接:SELECT  * from   employee join  department on employee.DepartmentID = department.DepartmentID

等价于:

隐式连接:SELECT  * from   employee,department WHERE employee.DepartmentID = department.DepartmentID

注:当DepartmentID不匹配,就不会往结果表中生成任何数据。

2)、相等连接

提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。

SELECT  * from   employee join  department  using (DepartmentID)

注:与显式连接不同在于:DepartmentID只显示一列

3)、自然连接

比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。

自然连接得到的结果表中,两表中名称相同的列只出现一次.

select * from employee natural join department

注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,

则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"

或 "ORA-25155: column used in NATURAL join cannot have qualifier".

4)交叉连接(又称笛卡尔连接)

如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.

显示连接:

select * from employee cross join department

等价于

隐式连接:

select * from employee,department

2、外连接

并不要求连接的两表的每一条记录在对方表中都一条匹配的记录。

1)左连接(left outer join == left join)

若A表与B表左连接,A表对就的B表没有匹配,连接操作也会返回一条记录,对应值为NULL。

如:

Jaspernull null null

Jones3333工程部

Rafferty3131销售部

Robinson3434书记

Smith3434书记

Steinberg3333工程部

若A表对应B表中有多行,则左表会复制和右表匹配行一样的数量,并组合生成连接结果。

如:select * from department  left join employee  on employee.departmentId = department.departmentId

31销售部Rafferty31

33工程部Jones33

33工程部Steinberg33

34书记Robinson34

34书记Smith34

35市场部nullnull

2)、右连接(right outer join == right join)

与左连接同(略)

3)、全连接(full outer join ==full join)

是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充。

select * from employee full outer join department on employee.departmentId = department.departmentId

注:一些数据库系统(如 MySQL)并不直接支持全连接, 但它们可以通过左右外连接的并集(参: union)来模拟实现.

和上面等价的实例:

select * from employee left join department on employee.departmentId = department.departmentId

union all

select * from employee right join department on employee.departmentId = department.departmentId

注:SQLite 不支持右连接。

数据库中JOIN怎么用?

JOIN分为:内连接、相等连接、自然连接、交叉连接,如下:

a、显式的内连接与隐式连接(inner join == join )

显示连接:SELECT * from employee join department on employee.DepartmentID = department.DepartmentID

等价于:

隐式连接:SELECT * from employee,department WHERE employee.DepartmentID = department.DepartmentID

注:当DepartmentID不匹配,就不会往结果表中生成任何数据。

b、相等连接

提供了一种可选的简短符号去表达相等连接,它使用 USING 关键字。

SELECT * from employee join department using (DepartmentID)

注:与显式连接不同在于:DepartmentID只显示一列

c、自然连接

比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。

自然连接得到的结果表中,两表中名称相同的列只出现一次.

select * from employee natural join department

注:在 Oracle 里用 JOIN USING 或 NATURAL JOIN 时,如果两表共有的列的名称前加上某表名作为前缀,

则会报编译错误: "ORA-25154: column part of USING clause cannot have qualifier"

或 "ORA-25155: column used in NATURAL join cannot have qualifier".

d、交叉连接(又称笛卡尔连接)

如果 A 和 B 是两个集合,它们的交叉连接就记为: A × B.

显示连接:

select * from employee cross join department

等价于

隐式连接:

select * from employee,department

如何将本地数据库与远程数据库连接

MySQL数据同步主要有三种方式:

1.利用MySQL自身的数据库同步功能

2.利用MySQL数据库的特性(数据库存在固顶目录,并且以文件形式存储),进行数据库目录同步以达到数据同步目的

3.利用专用的MySQL数据库同步软件

1.利用MySQL自身的数据库同步功能:

MySQL从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步,主从模式,互相备份模式的功能.

数据库同步复制功能的设置都在mysql的设置文件中体现。mysql的配置文件(一般是my.cnf),在unix环境下在/etc/mysql/my.cnf或者在mysql用户的home目录下的my.cnf。

windows环境中,如果c:根目录下有my.cnf文件则取该配置文件。当运行mysql的winmysqladmin.exe工具时候,该工具会把c:根目录下的my.cnf命名为mycnf.bak。并在winnt目录下创建my.ini。mysql服务器启动时候会读该配置文件。所以可以把my.cnf中的内容拷贝到my.ini文件中,用my.ini文件作为mysql服务器的配置文件。

设置方法:

设置范例环境:

操作系统:window2000professional

mysql:4.0.4-beta-max-nt-log

Aip:10.10.10.22

Bip:10.10.10.53

A:设置

1.增加一个用户最为同步的用户帐号:

GRANTFILEON*.*TObackup@'10.10.10.53'IDENTIFIEDBY‘1234’

2.增加一个数据库作为同步数据库:

createdatabasebackup

B:设置

1.增加一个用户最为同步的用户帐号:

GRANTFILEON*.*TObackup@'10.10.10.22'IDENTIFIEDBY‘1234’

2.增加一个数据库作为同步数据库:

createdatabasebackup

主从模式:A-B

A为master

修改Amysql的my.ini文件。在mysqld配置项中加入下面配置:

server-id=1

log-bin

#设置需要记录log可以设置log-bin=c:mysqlbakmysqllog设置日志文件的目录,

#其中mysqllog是日志文件的名称,mysql将建立不同扩展名,文件名为mysqllog的几个日志文件。

binlog-do-db=backup#指定需要日志的数据库

重起数据库服务。

用showmasterstatus命令看日志情况。

B为slave

修改Bmysql的my.ini文件。在mysqld配置项中加入下面配置:

server-id=2

master-host=10.10.10.22

master-user=backup#同步用户帐号

master-password=1234

master-port=3306

master-connect-retry=60预设重试间隔60秒

replicate-do-db=backup告诉slave只做backup数据库的更新

重起数据库

用showslavestatus看同步配置情况。

注意:由于设置了slave的配置信息,mysql在数据库目录下生成master.info

所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。

双机互备模式。

如果在A加入slave设置,在B加入master设置,则可以做B-A的同步。

在A的配置文件中mysqld配置项加入以下设置:

master-host=10.10.10.53

master-user=backup

master-password=1234

replicate-do-db=backup

master-connect-retry=10

在B的配置文件中mysqld配置项加入以下设置:

log-bin=c:mysqllogmysqllog

binlog-do-db=backup

注意:当有错误产生时*.err日志文件。同步的线程退出,当纠正错误后要让同步机制进行工作,运行slavestart

重起AB机器,则可以实现双向的热备。

测试:

向B批量插入大数据量表AA(1872000)条

A数据库每秒钟可以更新2500条数据。

2.数据库目录同步:

方法和文件同步一样,设置好需要同步的两个数据库目录就可以了!

缺点很明显,数据同步只能单向进行,可以作为备份方案

3.用专用的MySQL同步软件进行同步 :

这方面的软件有SQLBalance和MyReplicator,优点是方便直观,还有很多争强功能!

缺点和2一样,只能单项同步!

当然也可以修改镜像网站的程序为提交数据到母数据库,读取则在当前镜像下的数据,不过,修改起来麻烦!普通用户修改也非常难!呵呵,大家了解一下就可以!给大家一个思路!有能力的朋友可以试试阿!

4.关于MySQL论坛的数据同步

由于数据来源的不可控制(不好表达),论坛数据是实时的,而且还要考虑来自镜像论坛的数据,如何实现镜像论坛与母论坛数据同步呢?

用1中介绍的MySQL自带的数据库同步功能互相备份模式就可以实现的!

不过,具体的应用我没有测试!稳定性不敢保证!

有能力的朋友推荐用下面这种思路来同步,相对来说减少点效率,但能减少发生的错误!

比如镜像论坛数据同步:

1.母论坛和镜像论坛的数据全写在母论坛数据库里,主从模式,读取只在本地读取,这个需要修改程序!

2.每次写数据,都同时提交到两个数据库中,安全,但是效率很差,也得修改程序!

MSSQL

MSSQL数据同步利用数据库复制技术实现数据同步更新(来自网络,也是非常完美的教程)

复制的概念 :

复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。

SQL复制的基本元素包括

出版服务器、订阅服务器、分发服务器、出版物、文章

SQL复制的工作原理

SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器

SQLSERVER复制技术类型

SQLSERVER提供了三种复制技术,分别是:

1、快照复制(呆会我们就使用这个)

2、事务复制

3、合并复制

只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。

第一先来配置出版服务器

(1)选中指定[服务器]节点

(2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令

(3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。

(4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)

第二创建出版物

(1)选中指定的服务器

(2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框

(3)选择要创建出版物的数据库,然后单击[创建发布]

(4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)

(5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQLSERVER2000"的数据库服务器

(6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表

(7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

第三设计订阅

(1)选中指定的订阅服务器

(2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]

(3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。

(4)单击[完成]。完成订阅操作。

完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—

一个手工同步的方案

--定时同步服务器上的数据

--例子:

--测试环境,SQLServer2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test

--服务器上的表(查询分析器连接到服务器上创建)

createtable[user](idintprimarykey,numbervarchar(4),namevarchar(10))

--以下在局域网(本机操作)

--本机的表,state说明:null表示新增记录,1表示修改过的记录,0表示无变化的记录

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[user]')andOBJECTPROPERTY(id,N'IsUserTable')=1)

droptable[user]

GO

createtable[user]

(idintidentity(1,1),numbervarchar(4),namevarchar(10),statebit)

go

--创建触发器,维护state字段的值

createtriggert_stateon[user]

afterupdate

as

update[user]setstate=1

from[user]ajoininsertedbona.id=b.id

wherea.stateisnotnull

go

--为了方便同步处理,创建链接服务器到要同步的服务器

--这里的远程服务器名为:xz,用户名为:sa,无密码

ifexists(select1frommaster..sysserverswheresrvname='srv_lnk')

execsp_dropserver'srv_lnk','droplogins'

go

execsp_addlinkedserver'srv_lnk','','SQLOLEDB','xz'

execsp_addlinkedsrvlogin'srv_lnk','false',null,'sa'

go

--创建同步处理的存储过程

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].

[p_synchro]')andOBJECTPROPERTY(id,N'IsProcedure')=1)

dropprocedure[dbo].[p_synchro]

GO

createprocp_synchro

as

--setXACT_ABORTon

--启动远程服务器的MSDTC服务

execmaster..xp_cmdshell'isql/S"xz"/U"sa"/P""/q"execmaster..xp_cmdshell''netstartmsdtc'',no_output"',no_output

--启动本机的MSDTC服务

--execmaster..xp_cmdshell'netstartmsdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法

--BEGINDISTRIBUTEDTRANSACTION

--同步删除的数据

deletefromsrv_lnk.test.dbo.[user]

whereidnotin(selectidfrom[user])

--同步新增的数据

insertintosrv_lnk.test.dbo.[user]

selectid,number,namefrom[user]wherestateisnull

--同步修改的数据

updatesrv_lnk.test.dbo.[user]set

number=b.number,name=b.name

fromsrv_lnk.test.dbo.[user]a

join[user]bona.id=b.id

whereb.state=1

--同步后更新本机的标志

update[user]setstate=0whereisnull(state,1)=1

--COMMITTRAN

go

--创建作业,定时执行数据同步的存储过程

ifexists(SELECT1frommsdb..sysjobswherename='数据处理')

EXECUTEmsdb.dbo.sp_delete_job@job_name='数据处理'

execmsdb..sp_add_job@job_name='数据处理'

--创建作业步骤

declare@sqlvarchar(800),@dbnamevarchar(250)

select@sql='execp_synchro'--数据处理的命令

@dbname=db_name()--执行数据处理的数据库名

execmsdb..sp_add_jobstep@job_name='数据处理',

@step_name='数据同步',

@subsystem='TSQL',

@database_name=@dbname,

@command=@sql,

@retry_attempts=5,--重试次数

@retry_interval=5--重试间隔

--创建调度

EXECmsdb..sp_add_jobschedule@job_name='数据处理',

@name='时间安排',

@freq_type=4,--每天

@freq_interval=1,--每天执行一次

@active_start_time=00000--0点执行

关于join远程数据库和join数据库用法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

join远程数据库 数据库join用法数据库join on数据库inner join数据库natural join数据库join语句数据库join in数据库left join用法数据库inner join用法数据库join什么意思数据库left outer join
扫码二维码