Jak mogę wymusić tabelę, aby mieć tylko jeden wiersz? Poniżej jest to, co próbowałem. Wyzwalacz UPDATE
może zadziałać, jednak wyzwalacz CREATE
zdecydowanie nie zadziała. Dla CREATE, chciałbym użyć SET
, jednak SET
nie jest obsługiwany przez SQLite.Upewnij się, że tabela SQLite ma tylko jeden wiersz
CREATE TABLE IF NOT EXISTS `config` (
`id` TINYINT NOT NULL DEFAULT 0,
`subdomain` VARCHAR(45) NOT NULL,
`timezone` CHAR(3) NOT NULL,
`timeout` TINYINT NOT NULL,
`offline` TINYINT NOT NULL,
`hash_config` CHAR(32) NOT NULL,
`hash_points` CHAR(32) NOT NULL,
PRIMARY KEY (`id`));
INSERT INTO config(id,subdomain,timezone,timeout,offline,hash_config,hash_points) VALUES(0,'subdomain','UTC',5,0,'hash_config','hash_points');
CREATE TRIGGER `config_insert_zero`
BEFORE INSERT ON `config`
FOR EACH ROW
BEGIN
-- SET NEW.id=0;
NEW.id=OLD.id;
END;
CREATE TRIGGER `config_update_zero`
BEFORE UPDATE ON `config`
FOR EACH ROW
BEGIN
-- SET NEW.id=0;
NEW.id=OLD.id;
END;
Podoba mi się twoje drugie rozwiązanie! Dzięki za wyjaśnienie dotyczące "RAISE". Nie, że będę musiał użyć wyzwalacza, biorąc pod uwagę twoje drugie rozwiązanie, w jaki sposób wymusić ograniczenie 'UPDATE'? Jak pokazałem to za pomocą 'CREATE TRIGGER config_update_zero PRZED AKTUALIZACJĄ DLA konfiguracji DLA KAŻDEGO WIERSZA BEGIN NEW.id = OLD.id; END; NEW.id = OLD.id; '? – user1032531
Do czego potrzebny byłby wyzwalacz UPDATE? –
Nie można zezwolić na 'UPDATE config SET id = 2'. To prawda, twoje drugie rozwiązanie temu zapobiega i po prostu ciekawiło się, jak to zrobić z wyzwalaczem. – user1032531