怎么给mysql中已有值的字段自动录入ID

上周有客户问我如何在MySQL中已有数据的表中添加自动扩展的ID字段。
我告诉他,这实际上很简单,但有一些注意事项。

首先,可以直接在表中添加一个自增整型字段,然后将其设置为主键。
例如,如果您有一个名为 user 的表,您可以这样做:
sql 更改用户添加表 id COLUMN INT AUTO_INCRMENT PRIMARY KEY;
该 SQL 语句将在用户表中添加一个名为 id 的整型字段,该字段将自动增长,并在每次插入新记录时自动分配一个唯一的 ID 值。

但是,如果你的表已经有数据了,那么新添加的id字段会自动从1 开始增长。
如果你想从某个值开始,比如从1 00开始,你可以在创建表的时候指定这个值,但是这个操作只能在表为空或者所有数据都被删除的情况下进行。
例如:
sql 更改表用户 AUTO_INCRMENT = 1 00;
此方法不适用于有数据的表。

如果需要更复杂的逻辑控制,或者想在插入记录时执行一些额外的操作,可以创建触发器。
例如,您可以创建一个触发器,在每次插入新记录时自动设置 ID。

最后,定期检查自增字段的状态非常重要。
可以通过查询INFORMATION_SCHEMA.TABLES:
sql表来获取当前的自增值 SELECT AUTO_INCRMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '数据库名称' AND TABLE_NAME = '表名称';
这样,您可以确保自增字段处于正确的状态,避免意外情况引起的问题。
不管怎样,这取决于你,这应该适合你的需要。
我还在思考这个问题。
毕竟,数据库设计有时相当复杂。

SQL 如何添加自增列

说实话,当我第一次在MySQL的表中添加自增列时,就像在迷宫里旋转一样。
我记得当时我们有一个客户表,突然我们必须自动为每个用户分配一个唯一的号码。
最好直接使用AUTO_INCRMENT。
但说实话,这一路走来也有很多曲折。
现在想想,我可以总结出几个要点。

首先给大家介绍一下核心操作。
在客户端上创建 ALTERTABLEcustomersADDCOLUMNcustomer_idINTNOTNULLAUTO_INCREMENT 行时,请确保正确创建表名 customer 表。
我的朋友将手表的名称错误地输入为 customer2 ,我花了整个早上的时间来找出答案。
当时我的血压飙升到1 8 0。
最棒的是,添加完数据后可以直接输入数据。
您不必担心自动增量列的填充内容。
数据库将为您进行计算。
比如你先插入3 条数据,然后再插入一条新记录,数据库会自动将customer_id设置为4 这比抢红包更准时。

但最有可能的问题就出在这里。
如果表已经有主键,直接添加AUTO_INCRMENT列会发生什么情况?我第一次这样做时报告了一个错误,指出主键冲突。
当时我的手都在颤抖,所以我自己用DROPPRIMARYKEY删除了。
我吓得差点当场裂开。
正确的做法是首先使用 ALTER TABLE customer AUTO_INCRMENT = 1 00 更改起始值,然后删除原始主键,最后再次添加自动增量列使其成为主键。
我记得一位技术主管告诉我,改变表结构就像拆除炸弹,所以你需要先备份它。

有趣的是,跨不同的数据库有很多有趣的工作要做。
在 SQL Server 中,它称为 IDENTITY,其用法完全不同。
当将项目从MySQL转移到SQL Server时,我直接复制了AUTO_INCRMENT。
结果插入数据的时候全部报错。
我花了两天的时间调试才发现这一点。
还有PostgreSQL的SERIAL,它与MySQL的AUTO_INCRMENT语法有很大不同。
当我接手一个旧的Oracle项目时,我发现我使用Sequence + ALTERTABLE添加了默认值。
我当时很困惑。
你几岁了还在用这么古老的技术?
最有问题的是“多个 AUTO_INCRMENT 列”错误。
想一想。
您真的想在表中添加两个自动增量列吗?这就像在自行车上加两个车把一样荒谬。
后来我了解到,如果我有这样的需求,我要么使用触发器,要么直接在程序中生成ID。
我参与了一个金融系统。
因为我们需要同时生成交易序列号和操作员ID,所以最终我们使用Java程序自己计算。
代码写得像圣经一样,但我实际运行起来没有任何错误。

现在想来,我想如果我好好利用自己的附加栏的话,其实会省很多力气。
但正如我的朋友所说,“AUTO_INCRMENT 是魔鬼。
如果使用太多,就会发生意外。
”电商餐桌上添加自增列时忘记设置步长。
这样一来,当每分钟插入1 00条数据时,ID就会卡在某个值上。
这比双十一的抢购还要刺激。
所以现在我教新人的时候,总是要求他们备份更多的数据,然后先在临时表上练习。
最后,数据库世界里最可怕的事情是,“我以为它会起作用,但它全部失败了”。

SQL Server 2008怎样添加自增列实现自增序号

上周 我的那个朋友 让我告诉你 T-SQL 中的 IDENTITY 添加列的时候,这样写 重命名表table,添加列名整数identity(1 ,1 ) not null
identity(1 ,1 ) 第一个 1 是起始数字 第二个 1 是 Enterprise Manager 中的步长 创建新表 单击插入列 设置列属性
身份种子是起始编号 将成长视为一个阶段
这两种方法 同样的效果 这取决于你

SQL Server Oracle如何实现自增ID

在SQL Server中,ID自增的事情很简单。
它只是一个IDENTITY函数,是在写表时添加的。
例如:创建一个名为ZTB_ZHSP_TEST的表,字段id为int类型,主键并创建IDENTITY(1 ,1 )。
意思是从1 开始,每次加1 ,输入数据,只要输入,ID就会自动增长。
你不必自己写。
比如输入一条数据,什么是MATNR,1 4 005 001 0003 4 ,什么是MAKTX,FS9 03 +FS5 6 00七夕限定礼盒套装,就这么简单。

到了Oracle,自增ID有点复杂。
您需要自己创建序列,然后创建触发器。
首先创建一个序列,叫ZTB_ZHSP_TEST_FID,每次加1 ,从1 开始,不缓存,然后表中一定有一个F。
ID字段,数字类型,1 0位。
然后,在输入数据之前编写触发器和触发器。
每次从序列中获取一个值并填充到 FID 字段中。
编写触发器并输入数据后,FID 字段将自动更新。

两种方法都保证了ID的连续性和唯一性。
SQLServer简单,Oracle稍微麻烦一些,但是功能是一样的。