我有一个MySQL表,主键字段打开AUTO_INCREMENT.在阅读了这里的其他帖子之后,我注意到有相同问题并且答案各不相同的人.有人建议不要使用此功能,其他人说它不能"修复".
我有:
table: course
fields: courseID, courseName
Run Code Online (Sandbox Code Playgroud)
示例:表中的记录数:18.如果我删除记录16,17和18 - 我希望输入的下一条记录的课程ID为16,但是它将是19,因为最后输入的课程ID是18.
我的SQL知识并不令人惊讶,但无论如何使用查询(或phpMyAdmin界面中的设置)刷新或更新此计数?
该表将与数据库中的其他表相关.
鉴于所有的建议,我决定忽略这个'问题'.我将简单地删除并添加记录,同时让自动增量完成它的工作.我想这个数字到底是什么并不重要,因为它只被用作唯一标识符,并且没有(如上所述)商业含义.
对于那些我可能与我的原帖混淆的人:我不想用这个字段来知道我有多少记录.我只是希望数据库看起来整洁,并且具有更多的一致性.
我正在实现一个数据库应用程序,我将使用JavaDB和MySQL作为数据库.我的表中有一个ID列,其类型为整数,我使用数据库auto_increment-function作为值.
但是当我获得超过2(或4)亿个帖子和整数时,会发生什么呢?整数溢出并继续或者是我可以处理的异常抛出?
是的,我可以更改为数据类型,但如何检查何时需要?我认为获取last_inserted_id()函数是有问题的,如果我使用long作为ID列的数据类型.
我有这样的表
table
id Varchar(45) NOT NULL AUTO_INCREMENT PRIMARY KEY,
name CHAR(30) NOT NULL,
Run Code Online (Sandbox Code Playgroud)
我想增加我的id字段,比如'LHPL001','LHPL002','LHPL003'......等等.我应该为此做些什么?请让我知道任何可能的方式.
有没有办法在使用带有预准备语句的java查询时从数据库查询中检索自动生成的密钥.
例如,我知道AutoGeneratedKeys可以如下工作.
stmt = conn.createStatement();
stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
if(returnLastInsertId) {
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
auto_id = rs.getInt(1);
}
Run Code Online (Sandbox Code Playgroud)
然而.如果我想使用准备好的Statement进行插入,该怎么办?
String sql = "INSERT INTO table (column1, column2) values(?, ?)";
stmt = conn.prepareStatement(sql);
//this is an error
stmt.executeUpdate(Statement.RETURN_GENERATED_KEYS);
if(returnLastInsertId) {
//this is an error since the above is an error
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
auto_id = rs.getInt(1);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,我不知道.从javadoc看来,PreparedStatements无法返回自动生成的ID.
我从另一个开发者处获得了一个数据 他没有在任何桌子上使用auto_incrementers.它们都有主键ID,但是他在代码中手动完成了所有增量操作.
我现在可以把它们变成Auto_incrementers吗?
哇,非常好,谢谢你.它在我的一张桌子上毫无障碍地工作.但是第二个表,我收到此错误...将'.\ DBNAME#sql-6c8_62259c'重命名为'.\ DBNAME\dealer_master_events'时出错
我有一个数据库,快速填充我们每天10-20k行的数据.
ID和自动增量选项的限制是多少?如果ID被创建为INTEGER,那么我可以为无符号值做最大值2,147,483,647?
但是当自动增量高于此值时呢?这一切都崩溃了吗?那会有什么解决方案呢?
我相信很多人都拥有大型数据库,我想听听他们的意见.
谢谢.
我有一个表设置,目前没有主键.我需要做的就是添加一个primary key, no null, auto_increment.
我正在使用Microsoft SQL Server数据库.我知道它不能在单个命令中完成,但我尝试的每个命令都会返回语法错误.
编辑---------------
我创建了主键,甚至将其设置为非null.但是,我无法设置auto_increment.
我试过了:
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment
ALTER TABLE tableName MODIFY id NVARCHAR(20) auto_increment
ALTER TABLE tableName ALTER COLUMN id NVARCHAR(20) auto_increment
Run Code Online (Sandbox Code Playgroud)
我正在使用,NVARCHAR因为它不会让我NOT NULL在int下设置
我在postgres中有下表:
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
Run Code Online (Sandbox Code Playgroud)
我正在做以下插入:
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
Run Code Online (Sandbox Code Playgroud)
在前2个插入中,我明确提到了id.但是,在这种情况下,表的自动增量指针不会更新.因此在第3个插入中我得到错误:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
Run Code Online (Sandbox Code Playgroud)
我从未在MyISAM和INNODB引擎中的Mysql中遇到过这个问题.显式与否,mysql总是根据最大行id更新自动增量指针.
postgres中这个问题的解决方法是什么?我需要它,因为我希望对我桌子中的某些ID进行更严格的控制.
更新: 我需要它,因为对于某些值我需要有一个固定的ID.对于其他新条目,我不介意创建新的条目.
我认为可以通过在我明确插入id时手动递增nextval指针来实现max(id) + 1.但我不知道该怎么做.
是否有一个表的auto_incrementing BIGINT ID.它可以这样定义
id bigint auto_increment
Run Code Online (Sandbox Code Playgroud)
但这没有效果(它不会自动增加).我想插入所有字段,但ID字段 - ID字段应由DBMS提供.或者我需要调用一些东西来增加ID计数器吗?
想知道是否有速记版本将新记录插入到启用了主键的表中?(即不必在查询中包含键列)让我们说键列是ID,其他列是Fname,Lname和Website
$query = "INSERT INTO myTable VALUES ('Fname', 'Lname', 'Website')";
Run Code Online (Sandbox Code Playgroud) auto-increment ×10
mysql ×6
database ×3
primary-key ×2
sql ×2
h2 ×1
insert ×1
integer ×1
java ×1
lastinsertid ×1
php ×1
postgresql ×1
sql-server ×1