mysql数据库运维必须了解的SQL语法要点原创
金蝶云社区-i求知若渴
i求知若渴
8人赞赏了该文章 721次浏览 未经作者许可,禁止转载编辑于2023年08月16日 11:09:18

既然已经来到了苍穹时代,难免会遇到需要使用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


其他后续用到再更新哈

赞 8