当前位置: 首页 > 面试题库 >

在mysql表中创建一个ID auto_increment(在事实之后)

彭宜人
2023-03-14
问题内容

我从另一个开发人员那里获得了一个数据库。他没有在任何表上使用auto_incrementers。它们都有主键ID,但是他用代码手动完成了所有增量操作。

我现在可以把它们变成自动增量器吗?

哇,非常好,非常感谢。我的一张桌子工作顺利。但是在第二张表中,我收到此错误…将’。\ DBNAME#sql-6c8_62259c’重命名为’。\
DBNAME \ dealer_master_events’时出错


问题答案:

例如,这是一个具有主键但不是的表AUTO_INCREMENT

mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

您可以MODIFY使用以下AUTO_INCREMENT选项将该列重新定义:

mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

验证这已生效:

mysql> SHOW CREATE TABLE foo;

输出:

CREATE TABLE foo (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

请注意,您已经修改了列定义,而无需创建第二列并删除原始列。该PRIMARY KEY约束是不受影响的,你不需要提及的ALTER TABLE声明。

接下来,您可以测试插入是否生成新值:

mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

输出:

+----+
| id |
+----+
|  1 | 
|  2 | 
|  5 | 
|  6 | 
+----+
4 rows in set (0.00 sec)

我在Mac OS X的MySQL 5.0.51上对此进行了测试。

我还测试了ENGINE=InnoDB和依赖表。修改id列定义不会中断引用完整性。

为了响应您在注释中提到的错误150,这可能与外键约束冲突。我道歉,在测试之后,我认为它会起作用。这里有一些链接可能有助于诊断问题:

  • mysql错误1025(HY000):“ ./ foo”重命名错误(错误编号:150)是什么意思?
  • http://www.simplicidade.org/notes/archives/2008/03/mysql_errno_150.html


 类似资料:
  • 问题内容: 我正在使用MySQL。我有一个名为EMP的表,现在我需要再创建一个具有相同架构,相同列和相同约束的表(EMP_TWO)。我怎样才能做到这一点? 问题答案: 要基于其他表结构/约束创建新表,请使用: 要跨多个数据复制,请使用 创建表格文档 当心关于LIKE选项的注意事项: 使用LIKE根据另一个表的定义(包括原始表中定义的任何列属性和索引)创建一个空表: CREATE TABLE new

  • 问题内容: 当我创建一个MySQL表时,它会成功创建,但是当我对它执行任何查询时,它说。 当我将名称更改为时,它可以正常工作。 但我不想更改名称。如何对表执行查询? 问题答案: 你可以使用类似的东西吗?

  • 本文向大家介绍怎样在react中创建一个事件?相关面试题,主要包含被问及怎样在react中创建一个事件?时的应答技巧和注意事项,需要的朋友参考一下 var EventEmitter = require('events').EventEmitter; class App extends Component{ constructor(props){ super(props); } componentD

  • 问题内容: 我正在尝试在MySQL中生成一个大的连续数字表。 我只想要2列;一个主键和一个数字列,范围在0-X之间,其中X很大。大约 应该有64,000行。我尝试了以下代码,但没有成功: 我得到这个错误: #1064-您的SQL语法有误;在第3行的“ CONSTRAINT XPKnumbers PRIMARY KEY CLUSTERED(number))INSERT INTO n”附近检查与您的M

  • 问题内容: 在Python中创建新的空列表的最佳方法是什么? 要么 我之所以这样问是因为两个原因: 技术原因,关于哪个更快。(创建一个类会导致开销吗?) 代码可读性-这是标准约定。 问题答案: 您可以通过以下方法测试哪段代码更快: 但是,实际上,这种初始化很可能只是程序的一小部分,因此担心此初始化可能会出错。 可读性非常主观。我更喜欢,但是像AlexMartelli这样的一些非常博学的人更喜欢,因

  • 问题内容: 我有一个包含以下各列的表 它具有诸如 是否可以在postgres中执行sql select语句,该语句将返回每一行以及具有下一个最高order_id的ID?所以我想要类似… 谢谢 问题答案: