zoukankan      html  css  js  c++  java
  • 1. mysql的auto_increment的特性

    之前学过oracle,现在在学习mysql, 刚好两个数据库可以对比一下, 

    oracle的自增使用的是序列sequence,插入数据时使用sequence, 

    而mysql使用的是auto_increment,来实现自动增加,是跟着字段走的,范围是字段的访问,如果字段id 类型为 bigint, 占了8字节, 范围是2^(2*8) 无符号的取值范围

    》》》》》》》》》》》》》》》》》

    引用他人的

    创建数据表时,经常会出现auto_increment这个词,下面就来了解一下它吧。

    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是数据列的一种属性,只适用于整数类型数据列。
    设置AUTO_INCREMENT属性的数据列应该是一个正数序列,所以应该把该数据列声明为UNSIGNED,这样序列的编号个可增加一倍。
    AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分)。
    AUTO_INCREMENT数据列必须具备NOT NULL属性。
    AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束,如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

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

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

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

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

    》https://www.cnblogs.com/jingjingzhou/p/6015425.html

  • 相关阅读:
    游遍中国 —— 大街小巷、秘境与远方
    Batch Normalization 反向传播(backpropagation )公式的推导
    Batch Normalization 反向传播(backpropagation )公式的推导
    【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
    【社会/人文】概念的理解 —— 断舍离、饭(饭制版)
    linux 线程的同步 一 (互斥量和信号量)
    linux find
    正则表达式30分钟入门教程-新
    linux sed命令详解 *****
    linux vim tutor
  • 原文地址:https://www.cnblogs.com/alisonGavin/p/8862263.html
Copyright © 2011-2022 走看看