同时为多个表新增筛选两张表相同字段段

数据库中两张表之间的数据同步增加、删除与更新实现思路
字体:[ ] 类型:转载 时间:
可以采用分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的,感兴趣的朋友可以参考下,希望可以帮助到你
分别创建增加、删除、更新的触发器(Trigger)来达到两张表之间数据同步的目的。 1:数据同步增加: 如有两张表——A表和B表,创建触发器使当A表插入数据后B表也同步插入数据。其中B表插入数据的字段需要同A表中的字段相对应。
代码如下: CREATE TRIGGER 触发器名称 ON A表 AFTER INSERT AS BEGIN INSERT INTO B表(B表字段1,B表字段2,B表字段3) SELECT A表字段1,A表字段2,A表字段3 FROM INSERTED END
2.数据同步删除: 如有两张表——A表和B表,创建触发器使当A表删除数据后B表也同步删除数据。其中B表与A表应有相应主键关联。
代码如下: CREATE TRIGGER 触发器名称 ON A表 AFTER DELETE AS BEGIN DELETE B表 WHERE B表主键 IN( SELECT A表主键 FROM DELETED) END
3.数据同步更新: 如有两张表——A表和B表,创建触发器使当A表数据更新后B表也同步更新数据。
代码如下: CREATE TRIGGER 触发器名称 ON A表 AFTER UPDATE AS update B表 SET B.B表字段1=A.A表字段1 FROM B表 AS B,INSERTED AS A WHERE B.B表主键=A.A表主键
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具MySQL(10)
为多张相似表添加字段的mysql存储过程示例
为多张相似表添加字段的mysql存储过程示例
/* 在hmp DB服务器上执行一下sql */
/* modify table [hmp_data_glucose_XXX] structure */
DROP PROCEDURE IF EXISTS
bwfHmp.addC
CREATE PROCEDURE bwfHmp.addColumns(IN _tabName VARCHAR(30),IN _dbName VARCHAR(30))
DECLARE RESULT TINYINT(1) DEFAULT 0;
DECLARE sporttagcons VARCHAR(50);
DECLARE mytagcons VARCHAR(50);
DECLARE mealtimecons VARCHAR(50);
SET @tabName=_tabN
SET @dbName=_dbN
#要添加的字段
SET @col_sport='sporttag';
SET @col_my='mytag';
SET @col_meal='mealtime';
#所添加字段的属性
SET sporttagcons=' TINYINT(2) NOT NULL DEFAULT 0';
SET mytagcons=' VARCHAR(300)';
SET mealtimecons=' VARCHAR(30) NOT NULL DEFAULT \'\'';
SET @querysql='SELECT 1 INTO @RES FROM information_schema.`COLUMNS` WHERE COLUMN_NAME=? AND TABLE_NAME=? AND TABLE_SCHEMA=?';
SET @addsql=CONCAT('ALTER TABLE ',@tabName,' ADD COLUMN ',@col_sport,sporttagcons);
SET @addsql1=CONCAT('ALTER TABLE ',@tabName,' ADD COLUMN ',@col_my,mytagcons);
SET @addsql2=CONCAT('ALTER TABLE ',@tabName,' ADD COLUMN ',@col_meal,mealtimecons);
#添加字段sporttag
SET @RES=0;
PREPARE stmt FROM @
EXECUTE stmt USING @col_sport,@tabName,@dbN
SET RESULT=@RES;
IF RESULT!=1 THEN
PREPARE stmt FROM @
#添加字段mytag
SET @RES=0;
PREPARE stmt FROM @
EXECUTE stmt USING @col_my,@tabName,@dbN
SET RESULT=@RES;
IF RESULT!=1 THEN
PREPARE stmt FROM @addsql1;
#添加字段mealtime
SET @RES=0;
PREPARE stmt FROM @
EXECUTE stmt USING @col_meal,@tabName,@dbN
SET RESULT=@RES;
IF RESULT!=1 THEN
PREPARE stmt FROM @addsql2;
#释放执行中使用的数据库资源
DEALLOCATE PREPARE
bwfHmp.addColumns('hmp_data_glucose_000','bwfHmp');
SELECT 1 INTO @RES FROM information_schema.`COLUMNS` WHERE COLUMN_NAME='mytag' AND TABLE_NAME='hmp_data_glucose_000' AND TABLE_SCHEMA='bwfHmp';
SELECT @RES;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:136404次
积分:2243
积分:2243
排名:第17149名
原创:93篇
转载:69篇
(1)(3)(1)(1)(4)(2)(46)(3)(8)(1)(3)(5)(4)(6)(1)(8)(1)(5)(3)(10)(4)(1)(6)(4)(8)(2)(8)(11)(1)(1)遇到一个需求:在已经建好的数据库中,为每一个数据表都添加相同的3个字段。
分析:数据库中的数据表较多,一一手动修改耗时低效,是否可以用程序遍历每一张表,然后为遍历到的当前表添加字段?
查询当前用户的所有表定义和为某张表添加字段比较容易实现的,SQL中游标可以将这两者组织起来,因此编写以下程序实现功能:
VARCHAR2(2000);
V_TABLE_NAME VARCHAR2(30);
CURSOR C1 IS
SELECT TABLE_NAME FROM USER_TABLES;
--查询当前用户下的所有表
--提取一行数据到c1
INTO V_TABLE_NAME;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
EXIT WHEN C1%NOTFOUND;
V_SQL := 'alter table ' || V_TABLE_NAME || ' add BATCHDATE NUMBER(8,0)';
EXECUTE IMMEDIATE V_SQL;
V_SQL := 'alter table ' || V_TABLE_NAME ||
' add SOURCE_ID
NUMBER(8,0)';
EXECUTE IMMEDIATE V_SQL;
V_SQL := 'alter table ' || V_TABLE_NAME || ' add load_date date';
EXECUTE IMMEDIATE V_SQL;
END LOOP; --关闭游标
阅读(...) 评论()

我要回帖

更多关于 sql 字段相同两表合并 的文章

 

随机推荐