在本文中,我们将给您介绍关于如何在sql中获取下一个autoincrement值的详细内容,并且为您解答sql获取guid的相关问题,此外,我们还将为您提供关于ALTER表-在MySQL中添加AUTO
在本文中,我们将给您介绍关于如何在sql中获取下一个autoincrement值的详细内容,并且为您解答sql获取guid的相关问题,此外,我们还将为您提供关于ALTER表-在MySQL中添加AUTOINCREMENT、android – 如何在SVN中获取下一个修订号、Autoincrement In SQLite、java – 在mysql中获取最后插入的auto increment id的知识。
本文目录一览:- 如何在sql中获取下一个autoincrement值(sql获取guid)
- ALTER表-在MySQL中添加AUTOINCREMENT
- android – 如何在SVN中获取下一个修订号
- Autoincrement In SQLite
- java – 在mysql中获取最后插入的auto increment id
如何在sql中获取下一个autoincrement值(sql获取guid)
我正在用c#。创建一个Winform应用程序,并使用sql数据库。
我有一个表,employee_master
其中有列,如Id,name,address
和phone
no
。Id
是自动递增,所有其他数据类型是varchar
。
我正在使用此代码来获取下一个自动增量值:
string s = "select max(id) as Id from Employee_Master";
SqlCommand cmd = new SqlCommand(s,obj.con);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
int i = Convert.ToInt16(dr["Id"].ToString());
txtId.Text = (i + 1).ToString();
我在textBox上显示。
但是,当删除表中的最后一行时,我仍然得到该值,该值最近在文本框中删除了
我应该如何获得下一个自动增量值?
ALTER表-在MySQL中添加AUTOINCREMENT
我在MySQL的on列中创建了一个表itemID
。创建表格后,现在我想将此列更改为AUTOINCREMENT
。如何使用ALTER语句完成此操作?
表定义:
ALLITEMS (itemid int(10) unsigned, itemname varchar(50))
我正在使用以下代码,但会引发 错误:语法错误 。
ALTER TABLE allitemsMODIFY itemid INT(10) UNSIGNED AUTOINCREMENT;
答案1
小编典典CREATE TABLE ALLITEMS( itemid INT(10)UNSIGNED, itemname VARCHAR(50));ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;DESC ALLITEMS;INSERT INTO ALLITEMS(itemname)VALUES (''Apple''), (''Orange''), (''Banana'');SELECT *FROM ALLITEMS;
我之前也对CHANGE
和MODIFY
关键字感到困惑:
ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY;ALTER TABLE ALLITEMS MODIFY itemid INT(5);
在此期间,还请注意,AUTO_INCREMENT
也可以以预定义的数字开头:
ALTER TABLE tbl AUTO_INCREMENT = 100;
android – 如何在SVN中获取下一个修订号
我正在开发使用eclipse和svn进行版本控制的android应用程序.
在提交项目源之前,我想知道svn的下一个版本号.
表单属性 – >团队 – >显示历史记录,我可以获取当前的修订版号,但我不能假设下一个修订版号将始终为1,因为如果进行任何提交,则从分支处开始,那么下一个修订版号将为2或3取决于分支的提交数量.
所以请有人告诉我如何获得下一个版本号.
谢谢
解决方法:
I wanted to kNow the next Revision number of svn before committing my project source.
我不认为这是可能的,因为你说的确切原因:在你收到号码和你提交时之间可能有修改.据我所知,Subversion不允许“锁定”修订号 – 也没有意义.
i’m trying to set the Next Revision number as my version code
有一个已建立的工作流程,用于将修订号插入代码库.这可能就是你想要的.它在this question.中解释
Autoincrement In SQLite
- 概要
- 背景
- AUTOINCREMENT关键字
概要
AUTOINCREMENT
关键字消耗了额外的cpu,内存,磁盘空间以及磁盘输入/输出开销,如果不是严格需要的话,那么应该避免使用它。通常来说也不需要使用该关键字。- 在sqlite中,类型为
INTEGER PRIMARY KEY
的列就是ROWID(除了使用WITHOUT ROWID的表)的别名,ROWID总是64位的有符号整数。 - 在INSERT操作时,如果ROWID或者INTEGER PRIMARY KEY的列没有显示给出值,那么该列将会用未使用过的整数自动填充,通常来说,该整数比当前正在使用的最大ROWID大。
- 如果AUTOINCREMENT关键字出现在
INTEGER PRIMARY KEY
之后,这样会在整个数据库生命周期内改变自动ROWID的赋值算法以防止ROWIDs的重复使用。换句话说,AUTOINCREMENT的目的就是防止之前被删除过的行的ROWIDs被重复使用。
背景
在sqlite中,表的行一般有一个64位的有符号整数ROWID,在同一个表里,在所有的行中它是唯一的(WITHOUT ROWID的表是例外)。
你可以使用一个特别的列名ROWID,_ROWID_,或者OID来访问一张sqlite表的ROWID。除非如果你声明了一个普通的列去使用这些特别的名称之一,那么那个名称的使用将会指向声明的列而非内部的ROWID。
如果一张表包含了一个类型为INTEGER PRIMARY KEY的列,那么那个列就成为了ROWID的别名。你可以使用四个名称中的任意一个,以及最初上面描述过的最初的三个名称,或者是指定了INTEGER PRIMARY KEY列的名称来访问ROWID。
当一个新行插入到一张sqlite表时,ROWID可以作为INSERT语句的一部分指明,或者由数据库引擎自动赋值。手动指定一个ROWID时,只要把它包含到要插入的值列表中即可。例如:
CREATE TABLE test1(a INT,b TEXT);
INSERT INTO test1(rowid,a,b) VALUES(123,5,‘hello’);
如果在插入语句中ROWID没有被指定,或者如果指定的ROWID的值为NULL,那么一个合适的ROWID将会自动创建。通常的算法是给新建的行一个比之前插入到表中的最大ROWID还大的ROWID。如果表是初始化空闲的,那么1的ROWID就会被使用。如果最大的ROWID等于最大的整数(9223372036854775807,64位),那么数据库引擎就会开始随机挑选候选的ROWID,直到找到一个之前未使用过的ROWID。如果在查找合理的数字尝试之后依然没有找到未使用的ROWID,那么会报出一个插入操作SQLITE FULL的错误。
以上描述的正常ROWID选择算法会单调地自动增加唯一的ROWIDs,只要你从没有使用改过最大的ROWID的值,并且你从没有使用最大的ROWID删除表里的条目。如果你曾经使用最大ROWID删除了多行或者如果你曾经使用最大ROWID创建了一行,那么当新建的行和新建的ROWIDs可能没有以严格递增的顺序时,之前删除过的行的ROWIDs可能被再次使用。
AUTOINCREMENT关键字
如果一个列拥有类型INTEGER PRIMARY KEY AUTOINCREMENT,那么略微不同的ROWID选择算法就被使用。被选择的新行ROWID至少会比最大的之前在同一张表中存在过的ROWID大1。如果表在包含数据之前从未被使用过,那么值为1的ROWID就会被使用。如果表之前持有过使用了最大ROWID,那么新的插入操作不会被允许,并且任何试图插入新行将会报sqlITE FULL的错误。只有之前提交过的事务操作ROWIDs的值才会被考虑。被回滚的ROWID的值会被忽略并且被重新使用。
sqlite会记录一张表曾经持有使用名称为“SQLite序列”的”内部表“的最大ROWID。每当一张正常的包含有AUTOINCREMENT的列的表被创建时,sqlite序列表被创建并且被自动初始化。sqlite序列表的内容可以使用普通的UPDATE,INSERT和DELETE语句修改。但是对这张表做修改很可能会扰乱AUTOINCREMENT key的生成算法。你要确定在你做这样的改变之前,知道你在做什么。
由AUTOINCREMENT关键字执行的行为会和默认的行为微妙的区别。使用AUTOINCREMENT,自动被选择的ROWIDs的行能保证在同一个数据的同一个表中有从未被使用过的ROWID。并且自动增加的ROWIDs能保证单调增加。这些行为在在某些应用中是很重要的属性。但是如果你的应用不需要这些属性,那么你应该保留默认行为,因为当每行插入时,AUTOINCREMENT会需要额外的工作并且会造成插入操作运行得更慢一点。
记住,“单调递增”并不意味着ROWID总是能准确地增加1。1表示通常的增加。可是,如果一个插入操作由于某个独特的约束失败了,那么失败的插入企图的ROWID可能不会在后来的插入操作中使用,于是就导致了ROWID序列的间隔。AUTOINCREMENT保证自动选择的ROWIDs会增加但是不是连续地增加。
因为AUTOINCREMENT关键字改变了ROWID选择算法的行为,所以AUTOINCREMENT不会允许在WITHOUT ROWID的表或者在未使用INTEGER PRIMARY KEY的表。任何试图在WITHOUT ROWID表或者未使用INTEGER PRIMARY KEY的列的表使用AUTOINCREMENT会导致错误。
java – 在mysql中获取最后插入的auto increment id
rs = st.executeQuery("select last_insert_id() from schedule"); lastid = rs.getString("last_insert_id()");
我的lastid被宣布为INT.我没有在rs.get中使用什么,还有参数..
解决方法
rs = st.executeQuery("select last_insert_id() as last_id from schedule"); lastid = rs.getString("last_id");
关于如何在sql中获取下一个autoincrement值和sql获取guid的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于ALTER表-在MySQL中添加AUTOINCREMENT、android – 如何在SVN中获取下一个修订号、Autoincrement In SQLite、java – 在mysql中获取最后插入的auto increment id的相关知识,请在本站寻找。
本文标签: