java - AUTO_INCREMENT 属性对表性能的影响?

 创意沙发2011 发布于 2022-10-28 18:23

建表语句如下所示,公司的DBA为什么规定不允许表中有两个或两个以上的字段拥有AUTO_INCREMENT 自动递增的属性,难道再插入的时候会影响性能么?

CREATE TABLE `idc_logistics_assign_rules` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `sp_id` bigint(20) unsigned NOT NULL COMMENT '物流供应商ID',
  `creator` varchar(255) NOT NULL COMMENT '创建人工号',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `modifier` varchar(255) NOT NULL COMMENT '修改人工号',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `rule_name` varchar(255) DEFAULT NULL COMMENT '规则名称',
  `rule_json_val` varchar(4096) DEFAULT NULL COMMENT '规则JSON字符串',
  `rule_content` varchar(4096) DEFAULT NULL COMMENT '规则中文描述',
  `type` varchar(128) DEFAULT NULL COMMENT '类型(同机房、同城、区域内、区域外、其他)',
  `rule_lable` varchar(256) DEFAULT NULL COMMENT '标签',
  `is_valid` char(1) DEFAULT 'y' COMMENT '是否有效(y/n),默认n',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否删除',
  `ordering` smallint(5) unsigned DEFAULT NULL COMMENT '排序字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8 COMMENT='物流工单分配供应商规则表';

==================================================================================
说明,比如说,我的表的id字段是自增的。我表中有一个排序字段,排序字段我想他也自增,当要前端修改排序的时候,我只要交换前后两个排序字段就好了。。我知道关于排序字段有更好的方案,就想问一下,一个表中能不能两个字段都设置为自增,两个字段虽然都自增,可是自增的起点这些是由mysql控制的么?还是可以认为干预的呢?

=================================================================================
果然,表中有两个自增字段是会报错的,有两个自增字段的话,其实两个字段的值就是一样的了。那还是加唯一性约束好。

[SQL]CREATE TABLE `idc_logistics_assign_rules` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `sp_id` bigint(20) unsigned NOT NULL COMMENT '物流供应商ID',
  `creator` varchar(255) NOT NULL COMMENT '创建人工号',
  `gmt_create` datetime NOT NULL COMMENT '创建时间',
  `modifier` varchar(255) NOT NULL COMMENT '修改人工号',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `rule_name` varchar(255) DEFAULT NULL COMMENT '规则名称',
  `rule_json_val` varchar(4096) DEFAULT NULL COMMENT '规则JSON字符串',
  `rule_content` varchar(4096) DEFAULT NULL COMMENT '规则中文描述',
  `type` varchar(128) DEFAULT NULL COMMENT '类型(同机房、同城、区域内、区域外、其他)',
  `rule_lable` varchar(256) DEFAULT NULL COMMENT '标签',
  `is_valid` char(1) DEFAULT 'y' COMMENT '是否有效(y/n),默认n',
  `is_deleted` char(1) NOT NULL DEFAULT 'n' COMMENT '是否删除',
  `ordering` smallint(5) unsigned DEFAULT NULL AUTO_INCREMENT COMMENT '排序字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=utf8 COMMENT='物流工单分配供应商规则表';
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
2 个回答
  • 每个表里只记录一个自动递增的序数,你要两个自动递增的字段有什么用的?这两个字段的值不都一样吗?

    2022-11-12 01:44 回答
  • 每个表只允许一个 AUTO_INCREMENT字段,Mysql下检索到两个的话会在该行报错

    2022-11-12 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有