mysql insert一条记录后怎样返回创建记录的主键id,last
10年积累的网站制作、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有芦淞免费网站建设让你可以放心的选择与我们合作。
使用 mysqli 的方法是:
$mysqli-insert_id 是返回刚刚插入的那条记录的 id
SELECT LAST_INSERT_ID() 是返回最后插入的记录id
如果插入数据的id是自增长的话会比较容易拿到新数据的id
mysql有提供函数LAST_INSERT_ID() 来获取最后一次插入数据的id,当发生插入新数据事件后该函数返回值才会发生变化,在下一次插入数据前无论select几次,返回的都会是同一个值
Statement暴露以下方法可以访问到主键:ResultSet getGeneratedKeys() throws SQLException;
为了简化该方法的使用,轻松获得RDBMS生成的主键,Spring内置了KeyHolder接口及GeneratedKeyHolder实现者。
下面的类的内置方法中都使用到了KeyHolder,可以使用他来访问主键。
JdbcTemplate: int update(PreparedStatementCreator psc,KeyHolder generatedKeyHolder) throws DateAccessException;
NamedParameterJdbcTemplate的两个update方法
SimpleJdbcInsert辅助类。
SqlUpdate辅助类。
等。
DataFieldMaxValueIncrementer继承链。
能够返回全局唯一、递增的取值,这种特性是企业应用的常见需求,考虑到RDBMS的不同情况,Spring提供了DataFieldMaxValueIncrementer接口,这些方法返回唯一的、递增的、不同类型的取值。
各个数据库底层都以此类为接口,来实现具体的业务逻辑。
比如:Oracle:OracleSequenceMaxValueIncrementer实现类采用Oracle数据库支持的序列发生器。
HsqlMaxValueIncrementer采用HSQLDB的表实现,从而模拟了序列发生器的行为等。
类似的还有:
MysqlMaxValueIncrementer
DerbyMaxValueIncrementer
SybaseMaxValueIncrementer
SqlServerMaxValueIncrementer
PostgreSqlSequenceMaxValueIncrementer
DB2SequenceMaxValueIncrementer
H2SequenceMaxValueIncrementer等等
Spring JDBC对行集的支持:
RowSet,用于它能够以JavaBean方式同RDBMS数据进行交互,因此比ResultSet更为灵活。
JdbcTemplate内置queryForRowSet()方法集合。
NamedParameterJdbcTemplate内置的queryForRowSet()方法集合。
都可以很方便的获取到RowSet对象,方便数据库的操作。
可以使用LAST_INSERT_ID()函数 请参考下列实验: insert into a values(null,'010'); -- 插入一条记录 select * from a; -- 查询最新情况 SELECT LAST_INSERT_ID(); -- 显示最后插入的自增ID 从图结果2,可以看到最后插入的自动id为 9
插入一条记录的时候,可以用pstmt.getGeneratedKeys(),返回相应的Id,批量插入时可以写一个存储过程,获取最后的一个Id,就可以了。