进入设计表界面
首先将该字段的数据类型选成数值型的,比如decimal或者bigint
然后在下面列的标识处,选择“是”
然后下面两行,标识种子:表示自动增长的起点是几,默认1
标识增量:表示每次自增的时候跨度是多少,默认每次自增1
1、需要表结构,如字段名等
2、“另一库的同名表”有歧义,和哪个表同名?还是也有两个表,分别同名?
经补充说明后,这的确是个好问题。
感觉上只能写个存储过程,采用游标逐行遍历DBA的TBA之待增数据,插入DBB的TBA之后,马上获取刚刚采用的自增序列值,修正TBB的该字段。
建议你仔细想想,亲自实现,这样既能印象深刻,又会有成就感,若实在因事急迫,再来求“鱼”。
假设我们有一个java实体类User,它有三个属性:
1
2
3
private Integer id; //主键
private String name; //姓名
private double rate; //进度
构造方法、setter、getter都是正常且完善的。
数据库中有一张对应的t_user表:
1
2
3
4
5
6
7
--mysql数据库
create table t_user
(
id integer primary key auto_increment,
name varchar(20),
rate double
)engine=INNODB;
或者
1
2
3
4
5
6
7
8
9
10
--oracle数据库
create table t_user
(
id number(11) primary key,
name varchar2(20),
rate number(10,2)
);
--主键序列
create sequence seq_user_id;
在Userxml配置文件中,插入User的配置一般为:
<insert id="insertUser" parameterClass="User">
insert into t_user (ID, NAME, RATE) values (#id#, #name#, #rate#)
</insert>
这样,在java代码中调用方式为:
1
sqlMapperinsert("insertUser", user); //此处的user应该保证id是正确的
为了使用ibatis生成主键,我们可以使用如下配置:
1
2
3
4
5
6
7
8
<!-- mysql -->
<insert id="insertUserByAutoIncrement" parameterClass="User">
insert into t_user (NAME,RATE) values (#name#, #rate#)
<!-- 注意:上述SQL语句中不插入主键id -->
<selectKey resultClass="int" keyProperty="id">
SELECT LAST_INSERT_ID() AS VALUE
</selectKey>
</insert>
或者
<!-- Oracle -->
<insert id="insertUserBySequence" parameterClass="User">
<selectKey resultClass="int" keyProperty="id">
SELECT seq_user_idNEXTVAL AS VALUE FROM DUAL
</selectKey>
<!-- 注意:下列SQL语句中必须插入ID -->
insert into t_user (ID, NAME, RATE) values (#id#, #name#, #rate#)
</insert>
注意,这里需要说明一下,不同的数据库,主键生成方式是不同的
mysql:SELECT LAST_INSERT_ID() AS VALUE
mssql:select @@IDENTITY as value
oracle:SELECT SEQUENCENEXTVAL [AS VALUE] FROM DUAL
还有一点需要注意的是有些数据库是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL,有些数据库是事后生成(post-generate)主键的,如MySQL和SQL Server。所以如果是Oracle数据库,则需要将selectKey写在insert之前。
sequence就是一个序列,你每次执行 select CASE_SEQnextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个 *** 作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。 代码: string sql = "Select CASE_SEQcurrval from dual"; OracleConnection conn = DBgetCon(); OracleCommand cmd = connCreateCommand(); connOpen(); string returnID = null; cmdCommandText = sql; returnID = ConvertToString(cmdExecuteScalar()); //获取ID sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"; //将ID插入数据库 cmdCommandText = sql; cmdExecuteNonQuery(); connClose(); 结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的
SELECTIDENT_CURRENT('TableName')--返回当前的最后自动编号SELECTIDENT_INCR('TableName')--返回增量值SELECTIDENT_SEED('TableName')--返回种子值返回下一个自动编号:SELECTIDENT_CURRENT('TableName')+(SELECTIDENT_INCR('TableName'))--创建数据库和表createdatabaseMyDataBaseuseMyDataBasecreatetablemytable(idintidentity(1,1),namevarchar(20))--执行这个SQL,就能查出来刚插入记录对应的自增列的值insertintomytablevalues('李四')select@@identitydeclare@new_idintinsertintotest_idvalues('haha')
以上就是关于数据库表ID怎么设置自动增长全部的内容,包括:数据库表ID怎么设置自动增长、MSSQL,两表通过一个自增字段关联,怎样将两表数据批量插入另一库的同名表(有数据)中、ibatis循环批量插入数据,表中五个字段,id自增长,我需要把最重要的两个字段插入,怎么写xml的sql呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)