2015-10-13 58 views
0

我有一個表,並希望確保它只包含一行。因此,我添加了幾個觸發器,但收到以下錯誤。在帶分隔符的文件中創建SQLite觸發器

應該如何使用分隔符,並且在兩個觸發器周圍只能有一個分隔符?

PS。不是問題的一部分,但希望評論我是否應該使用BEFORE或AFTER以確保我只有一行。

[email protected] /var/www $ sqlite3 testing.db < testing.sql 
Error: near line 81: near "DELIMITER": syntax error 
Error: near line 87: near "$$": syntax error 
Error: near line 95: near "$$": syntax error 
[email protected] /var/www $ 


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, 
    `hash_config` CHAR(32) NOT NULL, 
    `hash_points` CHAR(32) NOT NULL, 
    PRIMARY KEY (`id`)); 

DELIMITER $$ 
CREATE TRIGGER `config_insert_zero` 
BEFORE INSERT ON `config` 
FOR EACH ROW 
BEGIN 
    SET NEW.id=0; 
END $$ 

CREATE TRIGGER `config_update_zero` 
BEFORE UPDATE ON `config` 
FOR EACH ROW 
BEGIN 
    SET NEW.id=0; 
END $$ 

DELIMITER ; 
+0

SQLite沒有SET語句。將表限制爲一行將需要不同的算法。 –

+0

@CL。啊,沒有'SET'。你認爲'NEW.id = OLD.id;'會工作嗎?另外,觸發器中的「BEFORE」或「AFTER」?謝謝 – user1032531

+0

要問一個問題,請使用「提問」按鈕。 –

回答

1

SQLite沒有自定義分隔符。

SQL標準說,語句用分號分隔,所以這是SQLite使用的。 (它足夠聰明,可以檢測觸發器本體的結束位置。)