我table1在SQL Server 2008中有一个表,它有记录.
我希望主键table1_Sno列是自动递增列.这可以在没有任何数据传输或克隆表的情况下完成吗?
我知道我可以使用ALTER TABLE添加自动增量列,但是我可以简单地将AUTO_INCREMENT选项添加到作为主键的现有列吗?
在C++的循环中,我经常遇到要使用的情况,++或者+=1我无法区分它们.例如,如果我有一个整数
int num = 0;
Run Code Online (Sandbox Code Playgroud)
然后在循环中我做:
num ++;
Run Code Online (Sandbox Code Playgroud)
要么
num += 1;
Run Code Online (Sandbox Code Playgroud)
他们都增加了价值num,但他们的区别是什么?我怀疑num++可以比工作更快num+=1,但如何?这种差异是否足以被忽视?
我生成一个SQLite表(在java中):
create table participants (ROWID INTEGER PRIMARY KEY AUTOINCREMENT, col1,col2);
Run Code Online (Sandbox Code Playgroud)
之后我尝试使用INSERT命令添加行:
insert into participants values ("bla","blub");
Run Code Online (Sandbox Code Playgroud)
我收到错误:
java.sql.SQLException: table participants has 3 columns but 2 values were supplied
Run Code Online (Sandbox Code Playgroud)
我以为行ID会自动生成,但似乎我错过了任何东西.
我试过另一个解决方案
PreparedStatement prep = conn.prepareStatement("insert into participants values (?,?,?);");
Integer n = null;
prep.setInt(1,n);
prep.setString(2, "bla");
prep.setString(3, "blub");
prep.addBatch();
prep.executeBatch();
Run Code Online (Sandbox Code Playgroud)
结果我收到了"prep.setInt(1,n);"的空指针异常.
你看到了错吗?
一位同事让我意识到一个非常奇怪的MySQL行为.
假设您有一个包含auto_increment字段的表和另一个设置为唯一的字段(例如用户名字段).当尝试插入具有已存在于表中的用户名的行时,插入失败,如预期的那样.但是,在多次尝试失败后插入有效的新条目时,可以看到auto_increment值增加.
例如,当我们的最后一个条目看起来像这样......
ID: 10
Username: myname
Run Code Online (Sandbox Code Playgroud)
...我们在下一次插入时尝试五个具有相同用户名值的新条目,我们将创建一个新行,如下所示:
ID: 16
Username: mynewname
Run Code Online (Sandbox Code Playgroud)
虽然这本身并不是一个大问题,但似乎是一个非常愚蠢的攻击向量,通过使用失败的插入请求充斥它来杀死表,正如MySQL参考手册所述:
"如果值大于可以存储在指定整数类型中的最大整数,则不会定义自动增量机制的行为."
这是预期的行为吗?
我一直在使用INT(10),并只注意到WordPress使用BIGINT(20) - 所不同的是使用的ID自动递增BIGINT(20)和int(10)?我应该将哪一个用于id列?
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
Run Code Online (Sandbox Code Playgroud)
VS
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
Run Code Online (Sandbox Code Playgroud)
谢谢.
我需要在MySQL表中插入一个包含32个字段的长行.
我想做这样的事情:
$sql="insert into tblname values (... 32 fields ...)";
Run Code Online (Sandbox Code Playgroud)
显然,如果字段与MySQL表字段的顺序相同,则它可以正常工作.但是,我的表有一个自动增量ID,因为它是第一个字段.
我想要的是填写所有表名,但第一个(id).
建议?
我有一个奇怪的情况,我的数据库中的一些表从0开始其ID,即使TABLE CREATE具有IDENTITY(1,1).某些表格是这样,但其他表格则不然.它一直工作到今天.
我已经尝试重置标识列:
DBCC CHECKIDENT (SyncSession, reseed, 0);
Run Code Online (Sandbox Code Playgroud)
但是新的记录从0开始.我已经尝试过为所有表做这个,但有些仍然从0开始,有些从1开始.
有什么指针吗?
(我正在使用带有高级服务的SQL Server Express 2005)
我正在从MySQL切换到MongoDB.对于一个非常基本的users表,我熟悉的架构将自动递增uid.有关此用例,请参阅Mongo自己的文档.
我想知道这是否是最好的建筑决策.从UX的角度来看,我喜欢将UID作为外部引用,例如在较短的URL中:http://example.com/users/12345
还有第三种方式吗?IRC Freenode的某人#mongodb建议创建一系列ID并缓存它们.我不确定如何实际实现它,或者是否还有其他路线我可以去.我甚_id至不需要以这种方式增加自身.只要文档中users都有唯一的数字uid,我会很高兴.
如何使用MySQL在select语句中创建和自动增加临时列?
这是我到目前为止:
SET @cnt = 0;
SELECT
(@cnt =@cnt + 1) AS rowNumber,
rowID
FROM myTable
WHERE CategoryID = 1
Run Code Online (Sandbox Code Playgroud)
哪个回报:
+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+ (NULL) | 1 +
+ (NULL) | 25 +
+ (NULL) | 33 +
+ (NULL) | 150 +
+ (NULL) | 219 +
+++++++++++++++++++++
Run Code Online (Sandbox Code Playgroud)
但是我需要:
+++++++++++++++++++++
+ rowNumber | rowID +
+++++++++++++++++++++
+ 1 | 1 +
+ 2 | 25 +
+ 3 | 33 +
+ 4 | …Run Code Online (Sandbox Code Playgroud)