java - AUTO_INCREMENT 属性对表性能的影响?
怪我咯
怪我咯 2017-04-18 09:44:52
0
2
407

建表语句如下所示,公司的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
怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(2)
洪涛

Setiap jadual hanya membenarkan satu medan AUTO_INCREMENT Jika dua diambil di bawah Mysql, ralat akan dilaporkan dalam baris itu

左手右手慢动作

Setiap jadual merekodkan hanya satu nombor ordinal kenaikan automatik. Apakah kegunaan dua medan kenaikan automatik? Bukankah nilai kedua-dua medan ini sama?

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan