MySql添加主键的序列号

本文介绍如何将STORE_CATEGORY表的主键uid从varchar类型改为int类型并启用auto_increment属性实现自动增长。此方法适用于已存在大量数据的情况。


项目中STORE_CATEGORY中已经存在大量数据,而主键uid是varchar类型,并且没有维护的sequnce,在写insert语句的时候需要指定uid,可以添加auto_increment的方法是主键自动增长,语句如下:

alter table ofbiz.STORE_CATEGORY modify column uid int(4) auto_increment;


MySQL 中获取自增主键值是数据库操作中常见的需求,尤其是在插入数据后需要立即使用该主键进行后续处理。以下是几种实现方法: ### 使用 MyBatis 获取自增主键值 MyBatis 提供了便捷的方式来获取数据库自动生成的主键值。在 SQL 映射文件中,可以通过设置 `useGeneratedKeys="true"` 和 `keyProperty="property_name"` 来启用此功能。以下是一个示例配置: ```xml <insert id="insertEmployee" useGeneratedKeys="true" keyProperty="id"> INSERT INTO t_employee (username, gender, email) VALUES (#{username}, #{gender}, #{email}) </insert> ``` 在这个例子中,`id` 是 Java 对象中的属性名,插入操作完成后,MySQL 生成的自增主键将自动绑定到这个属性上 [^3]。 ### 使用 JDBC 获取自增主键值 除了通过 MyBatis 配置外,还可以直接使用 JDBC 的 `Statement.getGeneratedKeys()` 方法来获取自增主键值。这种方法适用于更广泛的数据库支持,并且提供了更大的灵活性。下面是一个简单的代码示例: ```java String sql = "INSERT INTO t_employee (username, gender, email) VALUES (?, ?, ?)"; try (Connection conn = dataSource.getConnection(); PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { pstmt.setString(1, "John Doe"); pstmt.setString(2, "Male"); pstmt.setString(3, "john.doe@example.com"); int affectedRows = pstmt.executeUpdate(); if (affectedRows == 0) { throw new SQLException("Creating employee failed, no ID obtained."); } try (ResultSet rs = pstmt.getGeneratedKeys()) { if (rs.next()) { int id = rs.getInt(1); System.out.println("Inserted with ID: " + id); } else { throw new SQLException("Creating employee failed, no ID obtained."); } } } catch (SQLException e) { // Handle errors } ``` 这段代码展示了如何执行插入操作并检索生成的主键值 [^4]。 ### 注意事项 - 确保数据库表的主键列已定义为 `AUTO_INCREMENT`。 - 当使用 `getGeneratedKeys()` 方法时,必须确保在创建 `PreparedStatement` 时指定了 `Statement.RETURN_GENERATED_KEYS` 参数。 - 如果有多列被标记为生成键,则结果集将包含多个条目,需根据实际情况处理。 通过以上方法,可以在 MySQL 数据库中有效地获取到自增主键值,从而满足业务逻辑的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值