JDBC 复习5 mysql 的自增长主键 auto_increment

时间:2021-11-21 02:03:23

MySQL 自增长主键

(1)如果把一个NULL插入到一个AUTO_INCREMENT数据列里去,MySQL将自动生成下一个序列编号。编号从1开始,并1为基数递增。
(2)把0插入AUTO_INCREMENT数据列的效果与插入NULL值一样。但不建议这样做,还是以插入NULL值为好。
(3)当插入记录时,没有为AUTO_INCREMENT明确指定值,则等同插入NULL值。
(4)当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。
(5)如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

测试代码

项目结构(记得添加mysql的驱动jar包)

JDBC 复习5 mysql 的自增长主键 auto_increment

数据库连接配置文件

JDBC 复习5 mysql 的自增长主键 auto_increment

建表

JDBC 复习5 mysql 的自增长主键 auto_increment

package dbex.mysql;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import dbex.DBUtil;

/**
 * 
 * @ClassName: AutoKey 
 * @Description: 测试mysql 的 自增长主键
 * @author penny
 * @date 2017年11月29日 下午1:07:17 
 *
 */
public class AutoKey {

    void doAuto() throws SQLException, IOException{
        Connection conn = DBUtil.getConnection();
        PreparedStatement ppst = null;
        ResultSet rs = null;
        
        try {
            ppst = conn.prepareStatement("insert into auto_key(txt) values('testAuto')");
            for (int i = 0; i <100; i++) {
                ppst.addBatch();
            }
            ppst.executeBatch();
            ppst= conn.prepareStatement("select * from auto_key");
            rs = ppst.executeQuery();
            while(rs.next()){
                System.out.println(rs.getInt(1)+"\t"+rs.getString(2));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            DBUtil.closeAll(conn, ppst, rs);
        }
    }
    public static void main(String[] args) throws SQLException, IOException {
        new AutoKey().doAuto();
    }
}

效果展示

JDBC 复习5 mysql 的自增长主键 auto_increment

JDBC 复习5 mysql 的自增长主键 auto_increment