O gatilho de atualização do SQLite altera todas as linhas da tabela
Problema: um gatilho de atualização possível mais simples grava um novo valor em todas as linhas da tabela, em vez de apenas na linha que está sendo atualizada. Aqui está a tabela:
[nomes]
id INTEGER PRIMARY KEY
name TEXT
len INTEGER
Agora eu quero criar gatilhos para atualizar 'len' com o comprimento de 'name'. Esse gatilho INSERT parece estar fazendo o trabalho corretamente:
CREATE TRIGGER 'namelen' AFTER INSERT ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (id=NEW.id);
END;
Os problemas começam quando adiciono um gatilho UPDATE semelhante:
CREATE TRIGGER 'namelenupd' AFTER UPDATE ON 'names'
BEGIN
UPDATE 'names' SET len = length(NEW.name) WHERE (OLD.id=NEW.id);
END;
O gatilho de atualização grava o novo tamanho emtodas as linhas da tabela, apesar da cláusula WHERE. Por exemplo, se eu disser
UPDATE 'names' SET name='foo' where id=1;
então o valor de 'len' passa a 3 paratodas as linhas da mesa. Eu olhei para exemplos de acionadores sqlite e não consigo ver meu erro. O que mais devo fazer para garantir que o gatilho atualize a coluna 'len'só nas linhas que são realmente atualizadas?