zoukankan      html  css  js  c++  java
  • mysql学习笔记(二:中的auto_increment 理解

    1、auto_increment

    理解1

    auto_increment是用于主键自动增长的,从1开始增长,当你把第一条记录删除时,再插入第二跳数据时,主键值是2,不是1。

    例如:

    create table `test`
    
    (
    
    `id` int(10) not null auto_increment, -- 表示自增列
    
    `name` varchar(20) not null,
    
    primary key(`id`)
    
    )
    

      

    auto_increment = 1; -- 表示自增起始大小-- 这样就可以创建一个表`test`,id为自增列

    -- 执行语句 insert into test (`name`) values ('名字');

    -- 就可以插入一行数据为: 1 '名字'

    扩展资料:

    在使用AUTO_INCREMENT时,应注意以下几点:

    1、AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

    2、设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。

    3、AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。AUTO_INCREMENT数据列必须具备NOT NULL属性。

    4、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

    5、当进行全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。

    这是因为进行全表操作时,MySQL(和PHP搭配之最佳组合)实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。

    如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制MySQL(和PHP搭配之最佳组合)的优化:delete from table_name where 1;

    可用last_insert_id()获取刚刚自增过的值。

    理解2

    MySQL的中AUTO_INCREMENT类型的属性用于为一个表中记录自动生成ID功能.

    可在一定程度上代替Oracle,PostgreSQL等数据库中的sequence。

    在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。

    可在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。

    可用alter table table_name AUTO_INCREMENT=n命令来重设自增的起始值。

    当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,

    情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

    情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

    如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。

    如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

    扩展资料

    在使用AUTO_INCREMENT时,应注意以下几点:

    1、AUTO_INCREMENT是数据列的一种属性,只适用于整数类型数据列。

    2、设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。

    3、AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。

    4、AUTO_INCREMENT数据列必须具备NOT NULL属性。

    5、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。

    一旦达到上限,AUTO_INCREMENT就会失效。

    6、当进行全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。

    这是因为进行全表操作时,MySQL(和PHP搭配之最佳组合)实际是做了这样的优化操作:先把数据表里的所有数据和索引删除,然后重建数据表。

    7、如果想删除所有的数据行又想保留序列编号信息,可这样用一个带where的delete命令以抑制MySQL(和PHP搭配之最佳组合)的优化:delete from table_name where 1。

    也可以用last_insert_id()获取刚刚自增过的值。

  • 相关阅读:
    RedisPlugin
    微信、支付宝授权与支付
    在手机上预览h5项目
    localStorage
    fluter中json的处理
    flutter路由
    一个类实现多个接口
    抽象类、接口
    dart中的类
    方法
  • 原文地址:https://www.cnblogs.com/isme-zjh/p/11542834.html
Copyright © 2011-2022 走看看