【问题标题】:SQL Error (1005): Can't create table (errno: 1) Operation not permittedSQL 错误 (1005): 无法创建表 (errno: 1) 不允许操作
【发布时间】:2015-10-27 04:30:50
【问题描述】:

下午好,我很确定我在这里遗漏了一些东西,但我不确定是什么,我的目的是为日志创建一个归档表,按周分区,以便将来删除分区。

我已经看到这是可能的,根据: http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html 我运行了相同的测试并且一切正常,但是当我尝试创建下表时:

CREATE TABLE `tbDatabaseErrors` (
    `idError` INT(6) NOT NULL AUTO_INCREMENT,
    `database` VARCHAR(50) NULL DEFAULT NULL,
    `table` VARCHAR(50) NULL DEFAULT NULL,
    `errorMessage` VARCHAR(150) NULL DEFAULT NULL,
    `severity` TINYINT(4) NULL DEFAULT NULL,
    `DateTimeCreated` DATETIME NOT NULL,
    `WeekCreated` TINYINT(2) NOT NULL,
    PRIMARY KEY (`idError`, `WeekCreated`)
)
COLLATE='latin1_swedish_ci'
ENGINE=ARCHIVE
PARTITION BY RANGE(WeekCreated) (
    PARTITION p0 VALUES LESS THAN (4),
    PARTITION p1 VALUES LESS THAN (8),
    PARTITION p2 VALUES LESS THAN (12),
    PARTITION p3 VALUES LESS THAN (16),
    PARTITION p4 VALUES LESS THAN (20),
    PARTITION p5 VALUES LESS THAN (24),
    PARTITION p6 VALUES LESS THAN (28),
    PARTITION p7 VALUES LESS THAN (32),
    PARTITION p8 VALUES LESS THAN (36),
    PARTITION p9 VALUES LESS THAN (40),
    PARTITION p10 VALUES LESS THAN (44),
    PARTITION p11 VALUES LESS THAN (48),
    PARTITION p12 VALUES LESS THAN (53)
);

我不断得到:

SQL Error (1005): Can't create table 'support.tbDatabaseErrors' (errno: 1)
Operation not permitted

有人可以帮助我调试并了解这里出了什么问题吗?

【问题讨论】:

    标签: mysql archive create-table


    【解决方案1】:

    存档引擎有很多限制,它不支持替换、更新和删除,它不接受多列主键或复合键。您需要将单列作为主键或唯一键。这对您的情况没有帮助。

    https://dev.mysql.com/doc/refman/5.0/en/archive-storage-engine.html

     CREATE TABLE `tbDatabaseErrors` (
         `idError` INT(6) NOT NULL AUTO_INCREMENT,
         `database` VARCHAR(50) DEFAULT NULL,
         `table` VARCHAR(50) DEFAULT NULL,
         `errorMessage` VARCHAR(150) DEFAULT NULL,
         `severity` INT(4) DEFAULT NULL,
         `DateTimeCreated` DATETIME DEFAULT current_timestamp,
         `WeekCreated` INT(2) NOT NULL,
      PRIMARY KEY(`idError`)
     )
     ENGINE=ARCHIVE
     COLLATE latin1_swedish_ci;
    OK, 0 rows affected (0.01 sec)
    

    错误:

     mysql> CREATE TABLE `tbDatabaseErrors` (
            ->     `idError` INT(6) NOT NULL AUTO_INCREMENT,
            ->     `database` VARCHAR(50) DEFAULT NULL,
            ->     `table` VARCHAR(50) DEFAULT NULL,
            ->     `errorMessage` VARCHAR(150) DEFAULT NULL,
            ->     `severity` INT(4) DEFAULT NULL,
            ->     `DateTimeCreated` DATETIME DEFAULT current_timestamp,
            ->     `WeekCreated` INT(2) NOT NULL,
            ->     PRIMARY KEY (`idError`, `WeekCreated`)
            -> )
            -> ENGINE=ARCHIVE
            -> COLLATE latin1_swedish_ci;
    
    ERROR 1030 (HY000): Got error -1 from storage engine
    

    同样,您不能在非主列上添加分区,这显然会导致错误。请尝试使用其他支持删除和更新操作的引擎。

    【讨论】:

    • 老实说,我不需要更新删除或替换,这正是我选择存档的原因,因为它的体积小巧。但事实上,我不能按工作日字段进行分区,这使得整个“练习”毫无意义。我接受你的回答是正确的。谢谢。
    • 这里的任何更新,因为我在将文件导入数据库时​​面临同样的问题。
    猜你喜欢
    • 2012-12-27
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2013-07-22
    • 2017-08-20
    • 2011-02-17
    相关资源
    最近更新 更多