A. Mysql查询将查询的结果进行更新
有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......
此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。
那我们能知道 update 的进度么?
实验
我们先创建一个测试数据库:
那我们怎么准确的这个倍数呢?
一种方法是靠经验:update 语句的 where 中会扫描多少行,是否修改主键,是否修改唯一键,以这些条件来估算系数。
另一种方法就是在同样结构的较小的表上试验一下,获取倍数。
这样,我们就能准确估算一个大型 update 的进度了。
B. sql存储过程更新数据
DROPPROCEDUREexp3
GO
CREATEPROCEDUREexp3
@snchar(10)='2015200011',
@sjhchar(11)='12018060001',
@kgcjint,
@zgcjint,
@cjint
AS
UPDATEcyjgSETkgtcj=@kgcj,zgtcj=@zgcj,zcj=@cjWHEREsno=@snANDsjbh=@sjh;
go
EXECUTEexp3@kgcj=67,@zgcj=26,@cj=93
go
C. sql如何更新数据(用sql语句)
代码如下:
--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '
--查询示例
select * from ITSV.数据库名.dbo.表名
--导入示例
select * into 表 from ITSV.数据库名.dbo.表名
--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '
--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset
--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表
--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1
--openquery用法需要创建一个连接
--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A
--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
D. sql数据库更新语句
sql更新数据库语句
update语句用于更新修改指定记录的数据,其用法为:
update
tbl_name
set
col_name1=value1,
col_name2=value2,
…
where
conditions
对符合条件的记录,更新修改指定字段的值。若没有where条件限定,则对所有记录进行更新修改。例如:
图
4.23
更新记录
E. sql 中数据更新问题:
若商品号在商品表中唯一,下面的代码在各类SQL中通用
update 销售记录 set
总金额 = (select 商品价格 from 商品 where 商品.商品号=销售记录.商品号) * 数量
若是M$SQL, 可用下面的代码
update a set 总金额 = 商品价格 * 数量
from 销售记录 a
join 商品 b on b.商品号=a.商品号
F. sql 数据更新
Update Tab1 Set b = (Select b From Tab2 Where Tab1.a = Tab2.a)
G. SQL判断并更新数据
UPDATEOrder_Main
SETPK=1
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdAND(Pro='A'ORPro='D')
ANDNOTEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='F')
UPDATEOrder_Main
SETPK=2
WHEREEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='A')
ANDEXISTS(SELECT1FROMOrder_DetailWHEREOrder_Main.OrderId=Order_Detail.OrderIdANDPro='D')
H. sql怎样把一个表的数据更新到另一个表
如果都是SQL的数据库的话,在第二步的时候就默认选择SQL Server 的Microsoft OLE DB提供程序 就可以了。
1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务-->导入数据,弹出DTS导入/导出向导,按 下一步 ;
2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步;
3、选择目的 用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库的话,如 VVV),使用SQL Server身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如 client),按 下一步;
4、选择 用一条查询指定要传输的数据,按 下一步;
5、按 查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的 选中的列 列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按 下一步;
6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语句中 order by 后面所跟的列,按 下一步;
7、如果要全部导入,则选择 全部行,按 下一步;
8、则会看到根据前面的操作生成的查询语句,确认无误后,按 下一步;
9、会看到 表/工作表/Excel命名区域 列表,在 目的 列,选择要导入数据的那个表,按 下一步;
10、选择 立即运行,按 下一步;
11、会看到整个操作的摘要,按 完成 即可。
I. mysql 我如何查询一批数据后,并更新这批数据
有时候我们会不小心对一个大表进行了 update,比如说写错了 where 条件......
此时,如果 kill 掉 update 线程,那回滚 undo log 需要不少时间。如果放置不管,也不知道 update 会持续多久。
那我们能知道 update 的进度么?
实验
我们先创建一个测试数据库:
那我们怎么准确的这个倍数呢?
一种方法是靠经验:update 语句的 where 中会扫描多少行,是否修改主键,是否修改唯一键,以这些条件来估算系数。
另一种方法就是在同样结构的较小的表上试验一下,获取倍数。
这样,我们就能准确估算一个大型 update 的进度了。