mariadb SQL错误(1467):无法从存储引擎读取自动增量值

yxyvkwin  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(150)

插入行时出现此错误。我重置了自动增量,验证成功。它显示最大值:18446744073709551615,我将其改回16,然后当我们插入行时,它再次出现问题。到目前为止,我们唯一注意到的是它被设置为BIGINT 19,而其他表为BIGINT 20。还有其他想法吗?
错误:
SQL错误(1467):无法从存储引擎读取自动增量值
我使用的是版本10.2.12-MariaDB。大小:63.2 MiB项目:63.2 MiB表:浏览次数:42功能:2程序:2
插入:

Insert into products 
(ProductID,`Name`,Type,Price,MSRP,ReorderAt,DepartmentID,DateAdded,Status,QtyOnHand, DefaultTaxAccount,qtyonOrder,AverageCost,CogsAccount,IncomeAccount,AssetType,DiscountRate,Track,DefaultCost)
 values 
 (3901, 'Test', 1, 3.00, 3.00, 0, 5, '1900-01-01', 1, 0, 320, 0, 0, 29, 7, 11, 0, '0', 0)

下表为:

CREATE TABLE `products` (
  `ProductIndex` bigint(19) NOT NULL AUTO_INCREMENT,
  `ProductID` bigint(19) DEFAULT 0,
  `Name` longtext DEFAULT NULL,
  `Type` int(11) DEFAULT 1,
  `Description` longtext DEFAULT NULL,
  `PartNumber` varchar(50) DEFAULT NULL,
  `UPC` varchar(50) DEFAULT NULL,
  `Price` decimal(19,4) DEFAULT 0.0000,
  `MSRP` decimal(19,4) DEFAULT 0.0000,
  `ReorderAt` decimal(30,4) DEFAULT 0.0000,
  `DepartmentID` bigint(19) DEFAULT -1,
  `DateAdded` date DEFAULT NULL,
  `Status` int(11) DEFAULT 1,
  `Version` bigint(20) DEFAULT 0,
  `QtyOnHand` decimal(30,4) DEFAULT 0.0000,
  `Track` tinyint(1) DEFAULT 0,
  `DefaultTaxAccount` int(11) DEFAULT 57,
  `OLDid` longtext DEFAULT NULL,
  `qtyonOrder` decimal(30,4) DEFAULT 0.0000,
  `LastRecieved` datetime DEFAULT NULL,
  `margin` decimal(19,4) DEFAULT NULL,
  `CogsAccount` bigint(20) DEFAULT 2,
  `IncomeAccount` bigint(20) DEFAULT 1,
  `AssetType` bigint(20) DEFAULT 91,
  `AverageCost` decimal(19,4) DEFAULT 0.0000,
  `DiscountRate` decimal(19,4) DEFAULT 0.0000,
  `QtyOnHold` decimal(30,4) DEFAULT 0.0000,
  `Points` bigint(20) DEFAULT 0,
  `Amount` decimal(19,4) DEFAULT 0.0000,
  `ImageID` bigint(20) DEFAULT 0,
  `ImageDate` timestamp NULL DEFAULT current_timestamp(),
  `GuidID` varchar(100) DEFAULT NULL,
  `Frequency` int(11) DEFAULT 3,
  `NumRecurrence` int(11) DEFAULT 0,
  `NoEnd` tinyint(1) DEFAULT 0,
  `DefaultCost` decimal(19,4) DEFAULT 0.0000,
  `SkipPrompt` tinyint(1) DEFAULT 0,
  `UseScaleWeight` tinyint(1) DEFAULT 0,
  `SaleOnline` tinyint(1) DEFAULT 0,
  `PackageWeight` decimal(19,4) DEFAULT 0.0000,
  PRIMARY KEY (`ProductIndex`),
  KEY `prdID` (`ProductID`,`Version`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8

下面是INI文件(my.ini位于mysql文件夹中):

# Generated by Percona Configuration Wizard (http://tools.percona.com/) version REL5-20120208 
# Configuration name dbserver generated for @plazsoft.com at 2017-01-14 18:20:14

[mysql]

# CLIENT #
port                           = 3306
socket                         = /tmp/mysql.sock

[mysqld]

# GENERAL #
user                           = mysql
default-storage-engine         = InnoDB
socket                         = /tmp/mysql.sock
pid-file                       = C:/Program Files/MariaDB 10.1/data/mysql.pid

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000
skip-name-resolve
sql-mode                       = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now                 = 1
innodb                         = FORCE

# DATA STORAGE #
datadir                        = C:/Program Files/MariaDB 10.1/data

# BINARY LOGGING #
log-bin                        = mysql-bin
expire-logs-days               = 14
sync-binlog                    = 1

# CACHES AND LIMITS #
tmp-table-size                 = 32M
max-heap-table-size            = 32M
query-cache-type               = 2
query-cache-size               = 128M
max-connections                = 500
thread-cache-size              = 50
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 256

# INNODB #
innodb-log-files-in-group      = 2
innodb-log-file-size           = 512M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 2G

# LOGGING #
log-error                      = C:/Program Files/MariaDB 10.1/data/mysql-error.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = C:/Program Files/MariaDB 10.1/data/mysql-slow.log
4xy9mtcn

4xy9mtcn1#

我发现这个问题可能是由于我们在一些自动递增的ID中添加了负值。
每个表只能有一个AUTO_INCREMENT列,它必须被索引,并且它不能具有DEFAULT值。AUTO_INCREMENT列仅在只包含正值时才能正常工作。插入负数被视为插入了非常大的正数。这样做是为了避免数字从正数换到负数时出现精度问题,同时也是为了确保不会意外地得到AUTO_INCREMENT列包含0的INCREMENT列。
https://mariadb.com/kb/en/auto_increment-faq/

相关问题