mysql
利用StatementexecuteUpdate(),然后StatementgetGeneratedKeys()
就可以取到刚插入的记录的自增主键
不是一句SQL能够做到,而需要写个脚本,通过循环使用index_col函数测试字段是否属于主键来实现,具体写法可以参考sp_helpindex学习得到。 use sybsystemprocs execute sp_helptext sp_helpindex 列出sp_helpindex的原始脚本
查看表的主键信息
exec sp_pkes '表名'
查看表的索引信息
exec sp_helpindex '表名'
查看表的类型长度信息
exec sp_help '表名'
thisemployee_id = employee_id;}} 其它几个属性的getter和setter省略,这里我们要用到ejb3-persistencejar,JPA的注解类就在这个包中,下面详细说明上面使用到的注解。@Entity:通过@Entity注解将一个类声明为一个实体bean@Table:通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名)@Id:用于标记属性的主键@Column:表示持久化属性所映射表中的字段,如果属性名与表中的字段名相同,则可以省略@Column注解,另外有两种方式标记,一是放在属性前,另一种是放在getter方法前,例如:@Column(name = EMPLOYEE_NAME)private String employee_name; 或者@Column(name = EMPLOYEE_NAME)public String getEmployee_name() {return employee_name;} 这两种方式都是正解的,根据个人喜好来选择。大象偏向于第二种,并且喜欢将属性名与字段名设成一样的,这样可以省掉@Column注解,使代码更简洁。@TableGenerator:表生成器,将当前主键的值单独保存到一个数据库表中,主键的值每次都是从指定的表中查询来获得,这种生成主键的方式是很常用的。这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题。大象推荐这种方式管理主键,很方便,集中式管理表的主键,而且更换数据库不会造成很大的问题。各属性含义如下:name:表示该表主键生成策略的名称,这个名字可以自定义,它被引用在@GeneratedValue中设置的generator值中table:表示表生成策略所持久化的表名,说简单点就是一个管理其它表主键的表,本例中,这个表名为GENERATOR_TABLEpkColumnName:表生成器中的列名,用来存放其它表的主键键名,这个列名是与表中的字段对应的pkColumnValue:实体表所对应到生成器表中的主键名,这个键名是可以自定义滴valueColumnName:表生成器中的列名,实体表主键的下一个值,假设EMPLOYEE表中的EMPLOYEE_ID最大为2,那么此时,生成器表中与实体表主键对应的键名值则为3allocationSize:表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50@GeneratedValue:定义主键生成策略,这里因为使用的是TableGenerator,所以,主键的生成策略为GenerationTypeTABLE,生成主键策略的名称则为前面定义的”tab-store”。这里大象想说下,网上有很多文章写的是strategy = GenerationTypeAUTO或是strategy = GenerationTypeSEQUENCE,采用SEQUENCE序列是因为Oracle数据中不支持identity自动增长,要想使用它,还得在数据库中创建一个序列,如果要更换数据库,那将是一个非常麻烦的事情。SEQUENCE生成方式我们暂且不谈,这里说下采用AUTO和IDENTITY的生成方式,本例采用的是SQL Server 2000作为数据库,所以如果想使用AUTO或是IDENTITY生成策略,则一定要对主键加上identity标识,如identity(1,1)。不过对于AUTO来说,是根据不同的数据库选择最合适的自增主键生成策略。如果使用MySQL,则主键要定义AUTO_INCREMENT,如果是Oracle,则要创建Sequence来实现自增。不管采用何种生成策略,增、删、改这些方法中一定要加入事务,否则数据是不会添加到数据库中滴~~~这是大象反复测试过的结果!
主键是能够唯一标识表中记录的属性或属性集合,比如部门号能够将不同部门区分开,所以是主键,
外键是指本关系表中的属性的属性值需要参照另外一个表中主键属性的属性值而存在的,部门表中的经理属性其值必须是一个员工编号,这个员工编号必须是员工表中员工号属性上存在的一个值,就是说得确实有这么个人,所以经理是部门表的外键
SELECT
表名=case when acolorder=1 then dname else '' end,
字段序号=acolorder,
字段名=aname,
标识=case when COLUMNPROPERTY( aid,aname,'IsIdentity')=1 then '√'else '' end,
主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
SELECT name FROM sysindexes WHERE indid in(
SELECT indid FROM sysindexkeys WHERE id = aid AND colid=acolid
))) then '√' else '' end,
类型=bname,
占用字节数=alength,
长度=COLUMNPROPERTY(aid,aname,'PRECISION'),
小数位数=isnull(COLUMNPROPERTY(aid,aname,'Scale'),0),
允许空=case when aisnullable=1 then '√'else '' end,
默认值=isnull(etext,'')
FROM syscolumns a
left join systypes b on axtype=bxusertype
inner join sysobjects d on aid=did and dxtype='U' and dname<>'dtproperties'
left join syscomments e on acdefault=eid
order by aid,acolorder
以上就是关于mysql 插入数据库后怎么获取插入后主键的值全部的内容,包括:mysql 插入数据库后怎么获取插入后主键的值、怎样得到sybase数据库中表的主键信息、怎么获取数据库表的主键,索引,类型,长度信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)