mysql数据库insert插入重复问题

2025-03-29 02:27:54
推荐回答(4个)
回答1:

这就是自己实现一个ID自增的东西。
比如的你有个公用类专门用来生成后面的数字,所有需要用到的方法都调用这个类的一个方法我们就叫它nextId吧,只要这个方法是线程安全的就可以了。
IdUtils.nextId()

int nextId() {
lock(this){
return this.id++;

}
}
应用启动的时候从数据库查询一下id的最大值并设置给工具类的id,让它接着增长就行了。
具体实现看你用什么语言。

请仔细阅读别人回答的是什么意思。想想oracle的sequence的实现,是不是类似?

回答2:

--自增ID 格式:yyyyMMdd***
--===================================================
--存储过程
CREATE PROCEDURE get_new_id
@NEW_ID VARCHAR(16) OUTPUT
AS
BEGIN
DECLARE @DATE DATETIME
DECLARE @YYYY VARCHAR(4)
DECLARE @MM VARCHAR(2)
DECLARE @DD VARCHAR(2)
--保存取得的当前时间
SET @DATE = GETDATE()
SET @YYYY = DATEPART(yyyy, @DATE)
SET @MM = DATEPART(mm, @DATE)
SET @DD = DATEPART(dd, @DATE)
--位数不够的前面补0
SET @YYYY = REPLICATE('0', 4 - LEN(@YYYY)) + @YYYY
SET @MM = REPLICATE('0', 2 - LEN(@MM)) + @MM
SET @DD = REPLICATE('0', 2 - LEN(@DD)) + @DD
--取出表中当前日期的已有的最大ID
SET @NEW_ID = NULL
SELECT TOP 1 @NEW_ID = [字段名] FROM [表名] WHERE [字段名] LIKE @YYYY+@MM+@DD+'%' ORDER BY [字段名] DESC
--如果未取出来
IF @NEW_ID IS NULL
--说明还没有当前日期的编号,则直接从1开始编号
SET @NEW_ID = (@YYYY+@MM+@DD+'001')
--如果取出来了
ELSE
BEGIN
DECLARE @NUM VARCHAR(3)
--取出最大的编号加上1
SET @NUM = CONVERT(VARCHAR, (CONVERT(INT, RIGHT(@NEW_ID, 3)) + 1))
--因为经过类型转换,丢失了高位的0,需要补上
SET @NUM = REPLICATE('0', 3 - LEN(@NUM)) + @NUM
--最后返回日期加编号
SET @NEW_ID = @YYYY+@MM+@DD + @NUM
END
END
GO
===================================================
--触发器
CREATE trigger [dbo].[触发器名] on [dbo].[表名]
instead of insert
AS
SET NOCOUNT ON ;
begin
declare @id varchar(16)
select * into # from inserted
EXECUTE get_new_id @id OUTPUT
update # set 字段名 = @id
insert 表名 select * from #
end

回答3:

用触发器来实现每次新增数据都加1,每次添加时用触发器来生成id值

回答4:

没具体明白你什么意思,
如果只是不想叫他重复,直接加个主键不就可以了,,,,