2017-08-31 40 views
0

當我嘗試執行以下SQL狀態MariaDB給出錯誤: SQL:TRUNCATE $ table CASCADE;MariaDB 10.1截斷表級聯語法錯誤

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASCADE' at line 1 (SQL: TRUNCATE wortmann_products CASCADE;)

被級聯MariaDB的移除或者是有什麼錯絲毫的sql語句?

+1

https://dev.mysql.com/doc/refman/5.7/en/truncate -table.html我在這裏沒有看到關鍵字'CASCADE'你確定它是否支持mysql? –

+0

級聯用於刪除或更新關聯記錄,其中在父子記錄和父記錄被刪除時刪除子記錄時有時會使用依賴項,這有助於保持參照完整性 - 通常級聯刪除這方面的內容。 - 你只是試圖在這裏截斷一個表嗎? – jimmy8ball

+0

我嘗試截斷表並刪除其他表中的所有關聯記錄。 –

回答

0

如果您希望級聯刪除和更新,那麼在創建或更改表時必須存儲該定義,並且將應用於鍵(或關聯表中的FK),以允許在關聯中刪除子記錄父表記錄被刪除時的表。有很多關於這個資源,我列出了一個位置:https://mariadb.com/kb/en/the-mariadb-library/foreign-keys/ - 從這個資源採取的是下面的例子:

CREATE TABLE author (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(100) NOT NULL 
) ENGINE = InnoDB; 

CREATE TABLE book (
    id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    title VARCHAR(200) NOT NULL, 
    author_id SMALLINT UNSIGNED NOT NULL, 
    CONSTRAINT `fk_book_author` 
     FOREIGN KEY (author_id) REFERENCES author (id) 
     ON DELETE CASCADE 
     ON UPDATE RESTRICT 
) ENGINE = InnoDB; 
+0

並記住'TRUNCATE'忽略'ON DELETE CASCADE';你必須使用'DELETE'語句。 –