我使用GUID作为我所有其他表的主键,但我有一个需要增加数字的要求.我尝试使用自动增量在表中创建一个字段,但MySql抱怨它需要是主键.
我的应用程序使用MySql 5,nhibernate作为ORM.
我想到的可能的解决方案是:
将主键更改为自动增量字段,但仍将Id作为GUID,以便我的应用程序的其余部分保持一致.
使用GUID和自动增量字段创建复合键.
我现在的想法是倾向于复合的关键想法.
编辑:行ID(主键)是当前的GUID.我想添加一个自动增量的INT字段,以便它是人类可读的.我只是不想放弃使用GUID作为主键的应用程序中的当前标准.
我正在插入一个带有char列的行,用于基于(除其他外)行的自动id之外的哈希.
我知道我可以插入它,获取insert_id,计算哈希值并更新它.
有没有人知道在单个查询中执行此操作的方法?插入时需要插入行insert_id.那是完全不可能的,还是有类似current_insert_id()的东西......
谢谢!
Sybase手册和大量示例声称我可以写:
create table run_log (
run_id integer not null default autoincrement
);
Run Code Online (Sandbox Code Playgroud)
但Sybase 15表示存在语法错误 default
可能是一个微不足道的问题,但我希望得到最好的解决方案.
问题:
我有两个或更多工作人员将密钥插入一个或多个表.当两个或多个工作人员试图同时将同一个密钥插入其中一个密钥表时,就会出现问题.典型的问题.
关键表是简单的对.第一列是自动递增整数,第二列是varchar键.
这种并发问题的最佳解决方案是什么?我认为这是一个常见的问题.一种可靠的方法是处理抛出的异常,但不知何故我不相信这是解决这个问题的最佳方法.
我使用的数据库是Firebird 2.5
编辑:
一些额外的信息,以使事情清楚.
典型的这种表是用户表.例如:
1 2056 2 1044 3 1896 4 5966 ...
每个工作人员检查用户"xxxx"是否存在,如果不存在则插入.
编辑2:
仅供参考,如果有人会走相同的路线.IB/FB返回错误代码对(我正在使用InterBase Express组件).检查重复值违规是这样的:
except
on E: EIBInterBaseError do
begin
if (E.SQLCode = -803) and (E.IBErrorCode = 335544349) then
begin
FKeysConnection.IBT.Rollback;
EnteredKeys := False;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我有一个现有的mysql表,其id列定义为primary,并且auto-increment设置为true.现在,我想知道我是否可以将自动增量设置为从预定义值开始,例如5678,而不是从1开始.
我还想知道我是否可以设置自动递增的步骤,比如每个新记录插入增加15(而不是默认增量值1).
注意 - 我使用phpmyadmin来玩数据库,我有很多表但只有一个数据库.
谢谢.
所以我有一个MySQL数据库,我正在使用PHP网站.在几周的发展过程中,我留下了类似的东西:
Table: users
id | name
-----------
12| Bob
34| Jen
155| John
154| Kyle
Run Code Online (Sandbox Code Playgroud)
除此之外,还有数百条记录,而且数以千计.
我正在寻找一个脚本,我可以运行将键重命名为最低值(保留各自的行),然后重置AUTO_INCREMENT为下一个id
期望的输出是:
Table: users
id | name
-----------
1| Bob
2| Jen
3| Kyle
4| John
Run Code Online (Sandbox Code Playgroud)
和 ALTER TABLE users AUTO_INCREMENT = 5;
(通知Kyle和John)
我意识到我必须修复任何引用它的东西users.id.
有没有人知道在MySQL或PHP脚本中这样做的方法?
当我从用户那里收到数据时,我每次都会验证输入的格式(PHP).我唯一无法验证(或者我不想)的是约束(例如外键)违规.我让DML引发错误并且数据库驱动程序抛出异常.在捕获它之后,我只是通过MySQL的错误代码打印出一些错误消息.
问题是,即使插入失败,我看到autoincrement序列仍然增长,增加.我怎么能防止这种情况?
我有一个具有以下结构的表:
id | number | text
----------------------
1 | 1 | test
Run Code Online (Sandbox Code Playgroud)
其中,id是我的主键,具有自动增量值.我想将数字作为自动增量值.是否可以在一个表中包含多个自动增量列?
我正在使用mysql.我有一个带auto_increment计数器集的数据库表.现在因为要求我需要离开100个ID并从101开始移动所有现有记录,所以当前id 1将变为101,id 2将变为102,依此类推.
我能够将记录移动到101,但问题是如何将auto_increment计数器更改为max(id)+1.
这里的主要约束是我需要在单个sql语句中执行它.我无法使用@counter保存该值并在以后使用它.
我尝试使用以下查询
ALTER TABLE role AUTO_INCREMENT = (SELECT rd.counter FROM (SELECT (MAX(id) + 1) AS counter FROM role r) rd);
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我希望每次运行该脚本时,脚本中的变量都会递增.像这样的东西:
#!/bin/bash
n=0 #the variable that I want to be incremented
next_n=$[$n+1]
sed -i "2s/.*/n=$next_n/" ${0}
echo $n
Run Code Online (Sandbox Code Playgroud)
我会完成这项工作,但如果我在设置变量的行之前将其他行添加到脚本中并且忘记更新该行,那就不太好了sed -i "2s/.*/n=$next_n/" ${0}.
另外,我更喜欢不使用另一个保存变量值的文件.
其他一些想法?
auto-increment ×10
mysql ×7
sql ×3
php ×2
bash ×1
concurrency ×1
database ×1
default ×1
delphi ×1
firebird ×1
increment ×1
insert-id ×1
nhibernate ×1
primary-key ×1
sybase-ase ×1
syntax ×1