对MySQL自增字段的操作

插入数据

首先我们建表如下:

 

index.jsp

<%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>

<HTML>

       <HEAD>

              <TITLE>JDBC连接</TITLE>

       </HEAD>

       <BODY>

       <%

              String DBDRIVER = "com.mysql.jdbc.Driver" ;

              String DBURL = "jdbc:mysql://localhost:3306/test" ;

              String DBUSER = "niexin" ;

              String DBPASSWORD = "niexin" ;

              String sql = null ;

              Connection conn = null ;

              Statement stmt = null ;

       %>

       <%

              try

              {

                     Class.forName(DBDRIVER) ;

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

                     stmt = conn.createStatement() ;

                     sql = "insert into inctable (name) values ('张三')" ;

                     stmt.executeUpdate(sql) ;

                     out.println("数据库插入成功");

                     stmt.close() ;

                     conn.close() ;

              }

              catch(Exception e)

              {

                     out.println(e) ;

              }

       %>

       </BODY>

</HTML>

 

我们在写SQL插入语句时,应当省略掉自增字段。

取得自增字段当前值

index.jsp

<%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>

<HTML>

       <HEAD>

              <TITLE>JDBC连接</TITLE>

       </HEAD>

       <BODY>

       <%

              String DBDRIVER = "com.mysql.jdbc.Driver" ;

              String DBURL = "jdbc:mysql://localhost:3306/test" ;

              String DBUSER = "niexin" ;

              String DBPASSWORD = "niexin" ;

              String sql = null ;

              Connection conn = null ;

              Statement stmt = null ;

              ResultSet rs = null ;

       %>

       <%

              try

              {

                     Class.forName(DBDRIVER) ;

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD) ;

                     stmt = conn.createStatement() ;

                     sql = "insert into inctable (name) values ('张三')" ;

                     stmt.executeUpdate(sql) ;

                     out.println("数据库插入成功");

                     int autoIncKey = -1;

                     rs = stmt.getGeneratedKeys();

                     if (rs.next()) {

                 autoIncKey = rs.getInt(1);

            }

                     rs.close();

                     out.println("自增字段当前值:"+ autoIncKey);

                     stmt.close() ;

                     conn.close() ;

              }

              catch(Exception e)

              {

                     out.println(e) ;

              }

       %>

       </BODY>

</HTML>

 

    注意:如果这里使用的是PreparedStatement对象,getGeneratedKeys()方法同样适用。

### MySQL字段使用方法 在MySQL中,`AUTO_INCREMENT`关键字用于为表中的某一列提供自动生成的唯一标识符。当插入新记录时,如果没有显式地给定该列的值,则数据库会自动为其分配下一个可用的最大整数值。 #### 创建带有自字段的数据表 要创建具有自特性的表格,可以在定义模式时指定某列为 `AUTO_INCREMENT` 并将其设为主键或至少部分组成某个索引: ```sql CREATE TABLE example ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), PRIMARY KEY (id) ); ``` 此命令建立了一个名为 `example` 的表,其中包含两个字段:一个是作为主键并启用自长功能的 `id` 列;另一个是非必填项 `name` 字段[^5]。 #### 插入数据至含有自字段的表内 向设置了 `AUTO_INCREMENT` 属性的表里添加新的行时,只需省略对应于这个特殊类型的那一栏即可——系统将会负责填充它: ```sql INSERT INTO example(name) VALUES ('Alice'); -- 或者更简洁的方式 INSERT INTO example VALUES (NULL,'Bob'); -- 这里的第一个参数是null表示让MYSQL自行决定ID值 ``` 如果尝试手动设定已存在或者不符合预期范围内的 ID 值可能会引发异常情况,因此通常情况下不推荐这样做除非确实有必要重置序列起点等特殊情况处理[^3]. #### 更新已有记录中的自量 对于已经存在的记录来说,修改其关联着 `AUTO_INCREMENT` 的那部分信息并不是一件容易的事儿。因为这涉及到整个表结构以及可能影响其他依赖于此关系的对象(比如外键约束)。一般而言,直接更改这类属性并不常见也不太安全,但如果真的需要这么做的话可以通过先删除再重新插入的方法实现目的,不过要注意备份好重要资料以防万一[^2]. 另外值得注意的一点是在高并发环境下操作涉及到了多个客户端同时入相同资源的情况下,为了避免冲突发生还需要考虑采用合适的锁定机制来保障事务隔离级别下的安全性[^4]. ### 注意事项 - **单一性**: 每张表仅允许拥有单个 `AUTO_INCREMENT` 类型的字段; - **必需索引化**: 此类字段应当参与构成某些形式上的索引来提高查询效率; - **不可回滚特性**: 一旦提交了对含此类字段操作之后就无法撤销,所以在执行前务必确认无误; - **性能考量**: 频繁地调整起始位置或者其他相关配置选项可能导致额外开销从而降低整体表现水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值