关于 建表 ERROR 129错误解决

本文介绍在MySQL中创建包含多个TIMESTAMP字段的表时遇到的错误,并提供两种解决方案,一是调整字段顺序,二是升级数据库版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当你建立数据库的时候出现以下这个错误

ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

本人在执行如下sql 时 报错

CREATE TABLE `App` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',
  `OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',
  `OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',
  `OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',
  `OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DataChange_CreatedBy` varchar(32) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(32) DEFAULT '' COMMENT '最后修改人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  PRIMARY KEY (`Id`),
  KEY `AppId` (`AppId`(191)),
  KEY `DataChange_LastTime` (`DataChange_LastTime`),
  KEY `IX_Name` (`Name`(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应用表';

创建时间 和 最后修改时间 都为 timestamp

如果你有多个timestamp字段,只需要把第一个设定为current_timestamp而后面没有设定默认值,mysql也能成功建表,但是反过来就不行…

第一种解决方案:

在这里 需要改为 如下 就可以执行成功

CREATE TABLE `App` (
  `Id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `AppId` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'AppID',
  `Name` varchar(500) NOT NULL DEFAULT 'default' COMMENT '应用名',
  `OrgId` varchar(32) NOT NULL DEFAULT 'default' COMMENT '部门Id',
  `OrgName` varchar(64) NOT NULL DEFAULT 'default' COMMENT '部门名字',
  `OwnerName` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerName',
  `OwnerEmail` varchar(500) NOT NULL DEFAULT 'default' COMMENT 'ownerEmail',
  `IsDeleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '1: deleted, 0: normal',
  `DataChange_CreatedBy` varchar(32) NOT NULL DEFAULT 'default' COMMENT '创建人邮箱前缀',
  `DataChange_LastTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',
  `DataChange_CreatedTime` timestamp NOT NULL DEFAULT  COMMENT '创建时间',
  `DataChange_LastModifiedBy` varchar(32) DEFAULT '' COMMENT '最后修改人邮箱前缀',
第二种 解决方案:

这里我的mysql 数据路版本为5.5 版本过低的原因 所以我换成了 5.7 不用改sql 语句 执行成功

有问题 欢迎下方留言 共同进步

### 关于 MySQL 错误代码 1061 的解决方案 MySQL 错误代码 1061 示重复的键定义,通常发生在创或修改结构时尝试添加已经存在的索引名称。此错误提示明数据库中已存在具有相同名称的索引,无法再次创同名索引。 以下是针对该问题的具体处理方式: #### 1. 检查现有索引 在执行 `CREATE INDEX` 或其他涉及索引的操作之前,应先确认目标中的索引列是否存在冲突。可以使用以下查询来查看当前上的所有索引: ```sql SHOW INDEX FROM table_name; ``` 通过上述命令获取索引详情并验证是否有重名索引[^3]。 #### 2. 删除冗余索引 如果发现确实存在重复命名的索引,则可以通过删除其中一个实现解决问题。例如: ```sql DROP INDEX index_name ON table_name; ``` 这里需要注意的是替换掉 `index_name` 和 `table_name` 成实际使用的对象名字[^4]。 #### 3. 避免索引名称冲突 为了避免将来发生类似的错误,在设计数据库模式阶段就应该规划好唯一性的索引命名策略。推荐采用统一前缀或者基于字段组合的方式生成特定化的索引名称[^5]。 #### 示例调整后的语句 假设原计划如下所示但由于疏忽造成了重复定义: ```sql CREATE TABLE example ( id INT PRIMARY KEY, name VARCHAR(50), UNIQUE(name) ); ALTER TABLE example ADD UNIQUE(name); -- 这里会产生 ERROR 1061 ``` 修正版本只需移除多余的声明即可: ```sql CREATE TABLE example_corrected ( id INT PRIMARY KEY, name VARCHAR(50), UNIQUE(name) -- 只保留一处约束说明就足够了 ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值