【问题标题】:MariaDB 10.1 Truncate table cascade syntax errorMariaDB 10.1 截断表级联语法错误
【发布时间】:2017-08-31 22:45:58
【问题描述】:

当我尝试执行以下 sql statemant MariaDB 时出现错误: SQL: TRUNCATE $table CASCADE;

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 语句有问题?

【问题讨论】:

  • dev.mysql.com/doc/refman/5.7/en/truncate-table.html 我这里没看到关键字CASCADE 你确定mysql完全支持吗?
  • 级联用于删除或更新相关记录,其中有时会在删除子记录时使用,当在父子层次结构中删除子记录并且父记录被删除时,这有助于保持参照完整性 - 通常在这方面级联删除。 - 你只是想在这里截断 1 个表吗?
  • 我尝试截断一个表并删除其他表中的所有关联记录。
  • 那么你需要级联删除而不是截断

标签: mariadb


【解决方案1】:

如果您希望级联删除和更新,则必须在创建或更改表时存储定义,并将应用于允许在关联表中删除子记录的键(或关联表中的 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;

【讨论】:

  • 请记住TRUNCATE 忽略ON DELETE CASCADE;您必须使用DELETE 语句。
猜你喜欢
  • 1970-01-01
  • 2016-02-16
  • 2020-02-01
  • 2016-04-08
  • 2018-06-06
  • 1970-01-01
  • 2017-08-28
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多