mysql新增一列为主键

由于一次疏忽在建表的时候忘记加上主键了, 但是目前来说表里面又有数据了,所以不能删表重建,所以需要新加一列主键

然后我就新加一列,并且为auto_increment,然后设置为主键,如下:

alter table ti_ares_ztfi_bukvsckks
    add table_id int auto_increment;

alter table ti_ares_ztfi_bukvsckks
    add constraint ti_ares_ztfi_bukvsckks_pk
        primary key (table_id);

结果报了个错:

[42000][1075] Incorrect table definition; there can be only one auto column and it must be defined as a key

后来google之后发现不能这么做 , 所以在这里记一下正确的做法:

alter table ti_ares_ztfi_bukvsckks add COLUMN id bigint NOT NULL AUTO_INCREMENT PRIMARY KEY first;

原文地址:https://www.cnblogs.com/luozhiyun/p/10196523.html

时间: 2024-08-30 12:14:38

mysql新增一列为主键的相关文章

Mysql 自增列 主键

Mysql中假如有 ID Int auto_increment, CID varchar(36). 通常情况下都是 ID设置为主键. 假如要设置CID为主键.自增列ID必需是唯一索引. create table Temp ( ID bigint not null auto_increment comment '编号', CID varchar(36) not null, CreateTime datetime not null default now() comment '创建时间', uniq

mysql中InnoDB表为什么要建议用自增列做主键

InnoDB引擎表的特点 1.InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2.如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NU

[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键

[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键 http://imysql.com/2014/09/14/mysql-faq-why-innodb-table-using-autoinc-int-as-pk.shtml 我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered index): 所有的行记录都存储在B+树的叶子节点(leaf pages of the tree):

MySQL面试题之为什么要为innodb表设置自增列做主键?

为什么要为innodb表设置自增列做主键? 1.使用自增列做主键,写入顺序是自增的,和B+数叶子节点分裂顺序一致 2.表不指定自增列做主键,同时也没有可以被选为主键的唯一索引,InnoDB就会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致 所以InnoDB表的数据写入顺序能和B+树索引的叶子节点顺序一致的话,这时候存取效率是最高 原文地址:https://www.cnblogs.com/FengGeBlog/p/10284284.html

IBatisNet:让insert操作返回新增记录的主键值

项目引用ibatis包: IBatisNet.Common.dll --文件版本1.6.2.0 IBatisNet.DataAccess.dll IBatisNet.DataMapper.dll 项目目录结构: 项目中使用ibatis做数据访问层已经有好长时间了.开发小组成员反映ibatis的insert操作返回的结果是null,这一点很是不爽. 其实,大家都是希望能够把新增记录的主键值返回出来. 上上周,大家有反编译ibatis的包,查看其实现原理,后来,又尝试其他方法,都没能给实现这个功能.

MySQL自增列的步长问题

唯一索引和联合唯一 外键的变种 SQL数据行的增删改查 视图 触发器 函数 存储过程 事务 游标 动态执行SQL(防SQL注入) 1.MySQL自增列的步长问题: 1.基于会话级别(单次登陆状态下): show session variables like 'auto_inc%';    #查看自增长的默认步数,一般为1 set session auto_increment_increment=2;    #设置自增长会话步长为2 set session auto_increment_offse

mybatis生成UUID主键,且获取当前新增的UUID主键

在平时业务需求中,有可能会需要当前新增对象的主键ID. 在此我对用UUID作为主键ID做了实验. 1 <selectKey keyProperty="user.userId" resultType="java.lang.String" order="BEFORE"> 2 select uuid() 3 </selectKey> keyProperty:selectKey子元素返回值将赋值到领域模型的哪个属性中. resul

PHP获取MySql新增记录ID值的方法

今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法有 1.使用语句 mysql_query("select max(id) from user",$link); 2.使用函数msyql_insert_id(); (1)mysql版 int mysql_insert_id ([ resource $link_identifier = NUL

mysql为表添加外键完成性约束 报错Can&#39;t create table &#39;sfkbbs.#sql-513_25&#39; (errno: 150)

代码 alter table sfk_son_module add constraint foreign key(father_module_id) references sfk_father_module(id) on delete restrict on update restrict; (constraint 后面可以加上约束名字) 错误原因是之前两张表的id的类型不一样,一个时int,一个时bigint 解决办法时修改表, alter table sfk_father_module mo