- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用两个表,定义如下。
CREATE TABLE dns_addresses_resolved (
id INT(13) NOT NULL REFERENCES dns_addresses(id),
malware_id INT(13) REFERENCES malware_families(id),
type VARCHAR(10),
ttl int(10),
address VARCHAR(50),
first_resolved DATETIME,
last_resolved DATETIME,
PRIMARY KEY (id, address)
)
CREATE TABLE dns_addresses_resolved_archive (
id INT(13) NOT NULL REFERENCES dns_addresses(id),
malware_id INT(13) REFERENCES malware_families(id),
type VARCHAR(10),
ttl int(10),
address VARCHAR(50),
first_resolved DATETIME, /* When was this IP first seen */
archived_date DATETIME, /* The date that the IP changes, and the 'old' IP is archived */
PRIMARY KEY (id, address)
)
What I'm trying to do is:
- INSERT row if dns_addresses_resolved.id AND dns_addresses_resolved.resolved_address don't exist
- ON DUPLICATE KEY {in dns_addresses_resolved} UPDATE last_resolved = NOW()
- Here's the part I get stuck on. When dns_addresses_resolved.resolved_address changes, move the data currently in that row to
dns_addresses_resolved_archive
. I was looking at using a trigger to do this last part, but where I get stuck is when just resolved_address changes.I'm thinking that I came up with two of the three parts, as seen below and I was just wondering of anyone could shed some light on this for me! I know that I could use logic within code to do this, but I'm making life hard on myself because .. well, learning is fun!
INSERT INTO dns_addresses_resolved (id, type, ttl, resolved_address, first_resolved, last_resolved) VALUES ( ?, ?, ?,
?, NOW(), NOW() ) ON DUPLICATE KEY UPDATE last_resolved = NOW()
CREATE TRIGGER dns_resolved_archive BEFORE UPDATE ON dns_addresses_resolved.resolved_address FOR EACH ROW BEGIN INSERT
INTO dns_addresses_resolved_archive VALUES ($oldTable.id, $oldTable.malware_id, $oldTable.type, $oldTable.ttl, $oldTable.resolved_address, $oldTable.first_resolved, NOW()); END
I'm also more than open to suggestions if anyone has a more logical way of doing what I'm trying to do. I'd love your input!
编辑:我找到了一个触发器,尽管对“地址”的更新失败,并导致 mysql 错误,我不知道为什么。错误是
ERROR 1054 (42S22): Unknown column 'dns_addresses_resolved.id' in 'field list'
乍一看这似乎完全简单。当我使用触发器运行以下更新时,出现错误。当我在没有触发器的情况下运行相同的查询时,更新工作正常。
update dns_addresses_resolved set address = 'google.com' where id = 1;
下面是我的触发器。
CREATE TRIGGER archive_old_dns_resolution
BEFORE UPDATE ON dns_addresses_resolved
FOR EACH ROW
BEGIN
IF NEW.address <> OLD.address THEN
INSERT INTO dns_addresses_resolved_archive
VALUES ($oldTable.id, $oldTable.malware_id, $oldTable.type, $oldTable.ttl, $oldTable.address, $oldTable.first_resolved, NOW());
END IF;
END
鉴于触发器似乎是我想要做的事情的最合乎逻辑的解决方案,为什么这个触发器会在更新时导致 SQL 错误?
最佳答案
如果 resolved_address
发生更改,您将不会获得重复项,因为该 id
/ 不存在复合主键solved_address
组合。在这种情况下,将会发生直插入。我也不认为 UPDATE 触发器适合您,因为即使您为 id
寻址单独的索引,以便触发更新,您也无法知道更新是否在仅应更新时间戳的情况下或在提供新的 resolved_address
时触发。
我猜测您正在尝试通过对服务器的单个查询来完成此操作,但我不知道您是否有一个干净的解决方案,因为本质上您有两个唯一索引(一个位于 id
和 id
、resolved_address
上的一个),您希望在尝试插入时为已存在的条目提供不同的行为。
我的猜测是,您要么需要创建一个存储过程(如果您想要单个数据库调用),要么需要使用多个查询来实现您想要做的事情。
关于MySQL插入新行,更新重复键,如果一个键发生变化则触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907014/
下面的代码旨在在首次打开工作簿时运行。 Sub Auto_Open() Dim LastRow As Integer LastRow = Sheet6.UsedRange.Rows.Count Act
当我尝试操作我的代码时,除了弹出调试错误外,它执行得很好。错误信息在这里。 我的完整代码在这里。 #include using namespace std; class String { publi
The invocation of the constructor on type 'WpfApplication1.MainWindow' that matches the specified bi
我正在使用 BaseAdapter: public class MyAdapter extends BaseAdapter{ private final LayoutInflater mInflate
我想做网页抓取。我写了代码 var connection = require('./mysqlConnection'); var c = new Crawler({ maxConnections
我的系统中发生 Java 堆空间错误。我尝试了很多来自 Stack Overflow 的解决方案,但没有任何效果。当我工作时 当按下 OK 然后 (我的项目没有错误) 我的 eclipse.ini 是
环境: i5 750 DDR3 4GWin7 专业版 x64 sp1 DXSDK 9.0c 2010 年 6 月 GeForce GT240(驱动程序 275.33)512MB MSVC 2008 s
这段代码是我写的。 import socket host = 'localhost' port = 3794 s = socket.socket(socket.AF_INET, socket.SOCK
我正在尝试引用 UTC 时间间隔获取本地日期时间,我正在执行下面的代码。 var dtString =DateTime.UtcNow.ToString(@"yyyy-MM-ddTHH\:mm\:ss
我有一个非常简单的 C# 问题,它从库中加载 Windows WPF 窗口。这是代码: public partial class App : Application { public App(
我目前正在使用带有导航组件的底部导航,它工作正常但是当我们点击导航项 fragment 正在加载然后闪烁正在发生,即使当前选择的项目也会发生闪烁。它在加载 fragment 时发生。我的应用程序屏幕背
我是新来的 kotlin , 当我开始 Null Safety 时,我对下面的情况感到困惑. There's some data inconsistency with regard to initia
我有一个框,其中包含同时发生的两个独立的 css 转换。 当转换发生时,图标下方的标题和段落文本移动位置 参见 JS Fiddle:http://jsfiddle.net/Lsnbpt8r/ 这是我的
在为黑莓 10 构建电话间隙应用程序时,我遇到了异常情况。 [BUILD] Populating application source [BUILD] Parsing config.xml [
这个问题在这里已经有了答案: How to properly stop the Thread in Java? (8 个回答) 3年前关闭。 我看过How to properly stop the T
我试图弄清楚发生 fatal error 时如何刷新页面。基本上我正在访问图像 api 并将图像复制到我的服务器。我还每次都创建照片的缩略图版本。我会每隔一段时间收到一条错误消息,指出我的脚本试图分配
我正在尝试使用断言函数检查元素是否在屏幕上。我在我的测试应用程序 (AndroidDriver) 中使用 Appium 和 Java。我期望的是,如果元素在屏幕上,则返回 1;如果不在屏幕上,则返回
我正在开发图像上传系统。我使用 CommonsMultipartResolver 设置 maxUploadSize。当我尝试上传超过最大尺寸的图像文件时,会发生 MaxUploadSizeExcced
我有以下代码和@ComponentScan(basePackages = "com.project.shopping"),包结构为 com.project.shopping.Controller co
我尝试运行此程序作为测试,但收到错误“发生了 JNI 错误,请检查您的安装并重试”,然后是“发生了 Java 异常”。关于如何解决这个问题有什么想法吗? package java; public cl
我是一名优秀的程序员,十分优秀!