我看了一下stackoverflow找到类似的问题/答案,但答案不尽如人意。这就是我以不同方式提出问题的原因。
我想要的:我想在innodb表上设置最大行(或字节大小)限制。
我做了什么:
阶段1
所以我创建了一个类型为int(1)
的id列。然后我在id
列上创建了一个索引。指数选择是PRIMARY
。
见下文:
在我尝试分配的大小列1.然后单击“开始”按钮。 MySQL Server给了我以下错误:
1089 - Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys
问题:此错误消息的含义是什么?
我将“大小”列保持为空,然后单击“执行”。在这样做后,我给了id列AUTO_INCREMENT
属性。然后我插入了256行。插入的位置与预期一样。
阶段2
然后我尝试插入另外50行。我希望它们因为id的类型而失败,这就是int(1)
。令我惊讶的是插入了所有50行。
我认为int(1)
有限制256
。请参阅此链接以备份我的声明:https://dev.mysql.com/doc/refman/8.0/en/integer-types.html
问题:为什么即使列是int(1)
也可以插入超过256行?
第3阶段
我截断了表格,然后使用此查询进行了更改:
ALTER TABLE `my_table` MAX_ROWS = 256
行统计信息是:
同样,我希望能够只插入256行。因此,我希望在插入第257行后出现错误消息。所以我试着插入300行。
令我惊讶的是插入了所有300行。
主要问题:如何在MySQL表上设置行或字节大小限制?
我想回答我自己的问题,因为我自己找到了解决方案。
设置最大行限制的最简单方法是将id
列定义为以下类型之一:
TINYINT
MEDIUMINT
BIGINT
警告:类型:INT
+ size不设置最大行限制。