既然已经来到了苍穹时代,难免会遇到需要使用mysql数据库的时候。这不,起手连updae语句我都未能写好,赶紧记录一下。
一、数据更新update
1、最简单的update语句(mssql\oracle\mysql)通用,信手拈来。
update table_name set field_name1=xx,field_name2=xx where clause
例如:
update tk_kdps_servicesorder set fk_kdps_billsource='3',fk_kdps_status='C',fbillstatus='C' where fbillno not in ('00001','00002','0003')
2、跨表更新。百度一下,哦哦,原来如此,出来基本上都是两表更新的。
update table_name1 join table_name2 on (conditions)
set field_name1=xx,field_name2=xx
where clause
例如:
update tk_kdps_servicesorder a join aachl_shouquan b on a.fbillno=b.编码 and b.产品类型='重新初始化服务'
set a.fk_kdps_comment=concat( a.fk_kdps_comment,'(重新初始化服务)'),a.fk_kdps_purchaselength=1
3、两个以上的表关联更新。毕竟update后面接着的那个表是不是一定是要更新的表呢?很在意啊。
update chl001 a join chl002 b on a.fid=b.fid
join chl003 c on a.fid=c.fid
set c.fname=concat( a.fname,b.fname)
所以,多表更新的时候,不用非得把待更新的表放在第一个table_name的位置。
二、如何复制备份表
mysql不能像oracle和MySQL一步完成表结构和数据的复制,需要先复制表,再插入数据
复制表:create table newtablename like tablename
插入数据:insert into newtablename select * from tablename
三、有哪些可以用得上的系统表
查询列
select * from information_schema.COLUMNS where TABLE_SCHEMA = '_secd' and TABLE_NAME = 'aa_tk_kdps_clearrange'
四、实用的存储过程
--存储过程,用来拼写一个表的所有列 CREATE procedure getcol(in stable varchar(50),out colstr varchar(3000)) begin declare row_count int; declare seq int; select count(1),1,'' into row_count,seq,colstr from information_schema.`COLUMNS` c where TABLE_NAME=stable; WHILE seq <= row_count DO if seq>1 then set colstr=concat(colstr,',') ; end if; select concat(colstr,COLUMN_NAME) into colstr from information_schema.`COLUMNS` c where TABLE_NAME=stable and ordinal_position=seq; SET seq = seq + 1; END WHILE; end; --调用 set @colsql='' call getcol('a2307tk_kdps_temptable',@colsql); select @colsql --输出: FId,FEntryId,FSeq,fk_kdps_temptable,fk_kdps_temptabledesc,fk_kdps_sourcetable,fk_kdps_tablesource --存储过程用来构成insert into ttable(ttable列名) select ttable列名 from stable 脚本 drop procedure if exists getinsert; CREATE procedure getinsert(in stable varchar(50),in ttable varchar(50)) begin declare insertsql varchar(4000); declare colsql varchar(1000); call getcol(ttable,colsql); set insertsql=concat('insert into ',ttable,'(',colsql,') select ',colsql,' from ',stable); select insertsql; end; --调用 call getinsert('tk_kdps_temptable','a2307tk_kdps_temptable'); --输出 insert into a2307tk_kdps_temptable(FId,FEntryId,FSeq,fk_kdps_temptable,fk_kdps_temptabledesc,fk_kdps_sourcetable,fk_kdps_tablesource) select FId,FEntryId,FSeq,fk_kdps_temptable,fk_kdps_temptabledesc,fk_kdps_sourcetable,fk_kdps_tablesource from tk_kdps_temptable
五、变量的使用
会话用户变量,当前连接有效,上面示例中就有用到会话用户变量
set @colsql='' call getcol('a2307tk_kdps_temptable',@colsql); select @colsql
其他后续用到再更新哈
推荐阅读