精华内容
下载资源
问答
  • 摘要:下文讲述oracle数据库中创建标识列的相关技巧分享,如下所示;标识列:自动增长列,数据库的设计中我们经常使用此操作,那么oracle数据库中,我们如何创建标识列呢?下文将讲述具体的实现方法,如下所示:...

    摘要:

    下文讲述oracle数据库中创建标识列的相关技巧分享,如下所示;

    标识列:自动增长列,在数据库的设计中我们经常使用此操作,

    那么在oracle数据库中,我们如何创建标识列呢?下文将讲述具体的实现方法,如下所示:

    实现思路:

    步骤1: 创建数据表maomao

    create table maomao

    (keyId varchar2(20),

    info varchar2(10));

    步骤2: 创建一个序列(Sequence)

    创建序列时,按需选择属性

    如无最大值,则删除maxvalue行

    create sequence SEQMAOMAOKEYID//序列名称

    minvalue 1 //--该序列的最小值是1

    maxvalue 99999999999999 //--最大值

    nomaxvalue //--没有最大值

    start with 1 //--初始值从1开始递增

    increment by 1 //--每次递增1

    cache 20 //--设置缓存CACHE个序列,如果系统DOWN掉了或者其它情况将会导致序列不连续

    nocache //--序列不放在缓存中

    cycle //--到最大值从初始值开始

    nocycle //--一直累加,序列不循环

    order; //

    步骤3:向数据表maomao中插入值:

    currval=返回 sequence的当前值

    nextval=增加sequence的值,并返回 sequence 值

    insert into maomao values (SEQMAOMAOKEYID.nextval,'maomao1');

    insert into maomao values (SEQMAOMAOKEYID.nextval,'maomao2');

    insert into maomao values (SEQMAOMAOKEYID.nextval,'maomao3');

    insert into maomao values (SEQMAOMAOKEYID.nextval,'maomao4');

    步骤4:

    create or replace trigger tg_maomao

    before insert on maomao for each row

    as

    begin

    select SEQMAOMAOKEYID.NEXTVAL INTO :NEW.id FROM DUAL;

    end;

    展开全文
  • 一、标识列的定义以及特点SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行...二、标识列的组成创建一个标识列,通常要指定三个内容:...

    一、标识列的定义以及特点

    SQL Server中的标识列又称标识符列,习惯上又叫自增列。

    该种列具有以下三种特点:

    1、列的数据类型为不带小数的数值类型

    2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值

    3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。

    由于以上特点,使得标识列在数据库的设计中得到广泛的使用。

    二、标识列的组成

    创建一个标识列,通常要指定三个内容:

    1、类型(type)

    在SQL Server 2000中,标识列类型必须是数值类型,如下:

    decimal、int、numeric、smallint、bigint 、tinyint

    其中要注意的是,当选择decimal和numeric时,小数位数必须为零

    另外还要注意每种数据类型所有表示的数值范围

    2、种子(seed)

    是指派给表中第一行的值,默认为1

    3、递增量(increment)

    相邻两个标识值之间的增量,默认为1。

    三、标识列的创建与修改

    标识列的创建与修改,通常在企业管理器和用Transact-SQL语句都可实现,使用企业管理管理器比较简单,请参考SQL Server的联机帮助,这

    里只讨论使用Transact-SQL的方法

    1、创建表时指定标识列

    标识列可用 IDENTITY 属性建立,因此在SQL Server中,又称标识列为具有IDENTITY属性的列或IDENTITY列。

    下面的例子创建一个包含名为ID,类型为int,种子为1,递增量为1的标识列

    CREATE TABLE T_test

    (ID int IDENTITY(1,1),

    Name varchar(50)

    )

    2、在现有表中添加标识列

    下面的例子向表T_test中添加一个名为ID,类型为int,种子为1,递增量为1的标识列

    --创建表

    CREATE TABLE T_test

    (Name varchar(50)

    )

    --插入数据

    INSERT T_test(Name) VALUES('张三')

    --增加标识列

    ALTER TABLE T_test

    ADD ID int IDENTITY(1,1)

    3、判段一个表是否具有标识列

    可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:

    Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')

    如果有,则返回1,否则返回0

    4、判断某列是否是标识列

    可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法

    SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity')

    如果该列为标识列,则返回1,否则返回0

    4、查询某表标识列的列名

    SQL Server中没有现成的函数实现此功能,实现的SQL语句如下

    SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns

    WHERE TABLE_NAME='表名' AND COLUMNPROPERTY(

    OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=1

    5、标识列的引用

    如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替

    例如,若要查询上例中ID等于1的行,

    以下两条查询语句是等价的

    SELECT * FROM T_test WHERE IDENTITYCOL=1

    SELECT * FROM T_test WHERE ID=1

    6、获取标识列的种子值

    可使用函数IDENT_SEED,用法:

    SELECT IDENT_SEED ('表名')

    7、获取标识列的递增量

    可使用函数IDENT_INCR ,用法:

    SELECT IDENT_INCR('表名')

    8、获取指定表中最后生成的标识值

    可使用函数IDENT_CURRENT,用法:

    SELECT IDENT_CURRENT('表名')

    注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。

    利用 SQL 语句修改出一个标识列使用sql语句创建修改SQL Server标识列(即自动增长列)

    --将数据复制到临时表

    select * into #aclist from aclist

    --删除数据表

    drop table aclist

    --创建数据表(并设置标识列)

    create table aclist(id int identity(1,1),[date] datetime,version nvarchar(6),[class] nvarchar(10),actitle nvarchar(50),acdetail nvarchar(max),author nvarchar(50))

    --设置标识列允许插入

    set identity_insert aclist on

    --将数据从临时表转移过来

    insert into aclist(id,[date],version,[class],actitle,acdetail,author)

    select id,[date],version,[class],actitle,acdetail,author from #aclist

    --关闭标识列插入

    set identity_insert aclist off

    --强制设置标识列的起始值:

    DBCC CHECKIDENT (表名, RESEED, 1) --强制使标识值从1开始.

    ----------------

    修改原有字段中,不删除表,直接修改表中字段,删除数据后,处理。

    ---创建没有自动增长的数据表

    CREATE TABLE [tbMessage](

    [id] [decimal](18, 0),

    [msg_content] [varchar](max) NULL

    ) ON [PRIMARY]

    GO

    ----插入测试数据

    insert into [tbMessage]([id],[msg_content])

    values(20,'你知道吗?')

    insert into [tbMessage]([id],[msg_content])

    values(21,'你知道吗?201')

    go

    --查看数据

    ---select * from tbMessage

    --插入临时表

    select * into #tbMessage from [tbMessage]

    go

    --删除表数据

    delete [tbMessage]

    go

    --删除字段ID

    alter table [tbMessage] drop column [ID]

    ---增加ID自动增长字段

    alter table [tbMessage] add [id] int identity(1,1)

    set identity_insert [tbMessage] on

    --将数据从临时表转移过来

    insert into [tbMessage]([msg_content]

    ,[id])

    select [msg_content]

    ,[id] from #tbMessage

    --关闭标识列插入

    set identity_insert [tbMessage] off

    ---删除临时表

    drop table #tbMessage

    --------------------------------------------------

    /*

    drop table tbMessage

    ---------------检测自动增长字段是否正常----------

    ----获取种子数据

    SELECT IDENT_SEED ('[tbMessage]')

    ---drop table tbMessage

    ---插入二条数据

    insert into [tbMessage]([msg_content])

    values('你知道吗20111')

    insert into [tbMessage]([msg_content])

    values('你知道吗20112')

    ---查看这个ID是否,正常增长

    select * from tbMessage

    */

    展开全文
  • Oracle中创建自动标识列

    千次阅读 2010-04-04 14:05:00
    Oracle中创建标识列,不同于SQL Server中的是,SQLServer中叫自动标识列entity,而Oracle中叫序列(Sequence)。 Oracle中创建序列(Sequence)分为如下几步: 创建一个测试 create table TB_TEST(  ...

    在Oracle中创建标识列,不同于SQL Server中的是,SQLServer中叫自动标识列entity,而Oracle中叫序列(Sequence)。

    在Oracle中创建序列(Sequence)分为如下几步:

    1. 创建一个测试表

      create table TB_TEST(
        USERID number primary key,
        USERNAEM varchar2(128)not null,
        LOGNAME varchar2(128)not null,
        LOGPASSWORD varchar2(128)not null,
        DEPARTID number
      );

    2. 创建一个序列(Sequence),针对主键USERID

      create sequence SEQ_USERID    --创建一个序列
      minvalue 1                     --该序列的最小值是1
      start with 1                  --从1开始递增
      increment by 1                --每次递增1
      nomaxvalue                    --没有最大值
      nocache;                       --没有缓存
    3. 创建一个触发器(Trigger)
      begin
       execute immediate 'create or replace trigger Trigger_USERID  '||
          before insert on "TB_TEST" '||
          for each row '||
       begin  '||
          if inserting then '||
             if :NEW."USERID" is null then '||
                select SEQ_USERID.nextval into :NEW."USERID" from dual; '||
             end if; '||
          end if; '||
       end;'
      ;
      end;
    4. 激活触发器(Enable Trigger)

      alter table "SCOTT"."TB_TEST"enable all triggers;    --SCOTT为当前登录的数据库管理员,TB_TEST为当前操作的表名

    5. 插入数据进行测试

      insert into TB_TEST(USERNAME,LOGNAME,LOGPASSWORD,DEPARTID)values('Mr.Wang','admin','pwd',2);

      ------------测试成功

     

     

    展开全文
  • DB2 表中的生成列和标识列

    千次阅读 2008-10-13 10:42:00
    简介生成列是 IBM® DB2® Universal Database™ 的一个便捷特性。 一个生成列(generated column)是从表达式而... 回页首生成列和标识列请参考下列数据定义语言(DDL),它将数据库中创建一个表:db2 create tab
     
    

    简介

    生成列是 IBM® DB2® Universal Database™ 的一个便捷特性。 一个生成列(generated column)是从表达式而不是从 INSERT 或 UPDATE 操作派生其值。





    回页首


    生成列和标识列

    请参考下列数据定义语言(DDL),它将在数据库中创建一个表:

    db2 create table db2admin.actor (
         actor_id int generated by default as identity , 
         actor_name varchar(20) , 
         act_yr_of_birth smallint ,
         act_yr_of_death smallint ,
         age_at_death smallint generated always as (act_yr_of_death - act_yr_of_birth) 
        )
        in userspace1
    db2 alter table db2admin.actor
        add primary key (actor_id)
    

    该 DDL 包含生成列的简单示例。通过使用下列表达式,AGE_AT_DEATH 列由 DB2 自动生成:

    ACT_YR_OF_DEATH - ACT_YR_OF_BIRTH = AGE_AT_DEATH 

    通过在 CREATE TABLE 或 altER TABLE 语句中为列指定 GENERATED ALWAYS AS ... 子句,可以在表中创建生成列。

    我的示例还包括特定类型的生成列(称为标识列)的定义。 标识列包含可由 DB2 自动生成的数值。对于创建主键值而言,标识列确实有用。实际上,该示例包含一个 altER TABLE 语句,它将 ACTOR_ID 列定义成 ACTOR 表的主键。

    始终由 DB2 生成:DB2 可以保证以 GENERATED ALWAYS 方式定义的标识列的唯一性,因为它的值始终是由 DB2 生成的。

    我使用了 可以一词,因为许多用户误解了这种唯一性保证。这可能对也可能不对,它取决于您如何定义标识列的属性。例如,假定您已经定义了一个标识列,它在最小值 1 和最大值 10 之间循环:根据定义,除非该表包含的行非常少(10 行或更少),否则该列中的值将不唯一。

    保证列值唯一性的方法就是对列定义唯一性约束。上述表中的 actor_id 列之所以能够保证唯一性,是因为我使用了 alter table 命令将该列定义为表上的主关键字。您是不是想知道为什么我选择使用标识列,这是因为我们可以在不产生与设置表计数器有关的并发性问题的情况下生成数值。

    用户提供的标识:GENERATED BY DEFAULT 方式定义的标识列将接受由应用程序提供的值。如果应用程序不为带有这类列的表提供标识值,则 DB2 会为您生成那些值(但是它不能保证标识值的唯一性,除非已经为该表定义了唯一约束 — 就象我的示例那样)。

    在我的 actor 表中,我以 GENERATED BY DEFAULT 的方式定义了 actor_id 列,这意味着,如果我愿意,那么我可以插入自己的 actor 标识。例如,下列 INSERT 语句将三个新的行添加到 ACTOR 表:

    db2 insert into db2admin.actor (actor_id, actor_name, act_yr_of_birth)
        values (150,'Bruce Willis',1955), 
               (default,'Tom Cruise',1962),
               (default,'Tommy Lee Jones',1946)

    在上面的示例中,为第一行指定了标识值(在本例中是 150),DEFAULT 关键字用来说明 DB2 将为其余行生成标识值。在运行了这个 INSERT 语句后,您可以看到由 DB2 为 Tom Cruise 和 Tommy Lee Jones 生成的值,还可以看到用户为 Bruce Willis 提供的值 150。通过查看如 图 1所示的 ACTOR 表的内容,您可以验证这一点。


    图 1. ACTOR 表的内容
    ACTOR 表的内容

    如果我以 GENERATED ALWAYS 方式(不是 GENERATED BY DEFAULT 方式)定义 actor_id 列,那么要成功地完成运行,本示例中的 INSERT 语句将不得不指定 DEFAULT 关键字,而不是值 150;否则应用程序将收到 SQL00798 错误。

    自己动手试着进行下面的工作。利用与创建 ACTOR 表相同的 DDL 创建名为 ACTOR2 的新表,只是对下面的 粗体部分进行一些更改:

    db2 create table db2admin.
            actor2 (
         actor_id int 
            generated always as identity , 
         actor_name varchar(20) , 
         act_yr_of_birth smallint ,
         act_yr_of_death smallint ,
         age_at_death smallint generated always as (act_yr_of_death - act_yr_of_birth) 
        )
        in userspace1
    db2 alter table db2admin.
            actor2
        add primary key (actor_id)
          

    现在,对 ACTOR2 表运行与用于 ACTOR 表相同的 INSERT 语句(别忘了更改: ...insert into db2admin. actor2... )。发生了什么?您收到 SQL00798N 错误。

    现在,请运行相同的 INSERT 语句,只是对下面的 粗体部分进行一些更改:

    db2 insert into db2admin.
            actor2 (actor_id, actor_name, act_yr_of_birth)
        values (
            default,'Bruce Willis',1955), 
               (default,'Tom Cruise',1962),
               (default,'Tommy Lee Jones',1946)
          

    成功了!为什么呢?因为 ACTOR2 表创建时带有要求 DB2 必须生成标识值的选项。现在,如果浏览 ACTOR2 表的内容,它看上去将如 图 2所示。


    图 2. ACTOR2 表的内容
    ACTOR2 表的内容

    现在您应该有两个表:

    • ACTOR(利用 GENERATED BY DEFAULT 选项定义的)
    • ACTOR2(利用 GENERATED ALWAYS 选项定义的)。
    展开全文
  • 我尝试在表创建一个自动递增的,正如我在post看到的那样有两种方法,第二种使用Identity的实现是一种更优雅的解决方案,但是当我尝试实现它时,我收到以下错误:Error at Command Line : 3 Column : 31Error ...
  • SQLite 的AUTOINCREMENT是一个关键字,用于表中的字段值自动递增。我们可以在创建表时特定的名称上使用AUTOINCREMENT关键字实现该字段值的自动增加。 关键字AUTOINCREMENT只能用于整型(INTEGER)字段。 ...
  • 一、标识列的定义以及特点SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行...二、标识列的组成创建一个标识列,通常要指定三个内容:...
  • 一、标识列的定义以及特点 SQL Server的标识列又称标识符列,习惯上又叫自增列。 该种列具有以下三种特点: ...创建一个标识列,通常要指定三个内容: 1、类型(type) SQL Server 2000,标识列类型...
  • 一、标识列的定义以及特点SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行...二、标识列的组成创建一个标识列,通常要指定三个内容:...
  • MySQL标识列

    2019-07-21 18:50:05
    标识列又称为自增长列 ... 一个表中只能有一个标识列 标识列的类型只能是数值型(int double···) 标识列可以通过set auto_increment_incrment=2,设置步长 创建表时设置标识列 DROP TABLE IF EXISTS...
  • 使用sql语句创建修改SQL Server标识列

    千次阅读 2014-02-11 13:45:19
    一、标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又...3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。 由于以上特点,使得标识列数据库的设计中得到广泛的使用。 二、标识
  • 标识列

    2012-05-01 22:15:00
    一、标识列的定义以及特点 SQL Server的标识列又称标识符列,习惯上又叫自增列。 该种列具有以下三种特点: 1、列的数据类型为不带小数的数值类型 2、进行插入(Insert)操作时... 二、标识列的组成 创建一个标识列...
  • SQL Server标识列

    2012-05-09 15:49:00
    一、标识列的定义以及特点 SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点: 1、列的数据类型为不带小数的数值类型2、进行插入(Insert)操作时,...二、标识列的组成创建一个标识列...
  • SQL Server标识列

    千次阅读 2019-06-22 21:57:35
    [转] 一、标识列的定义以及特点SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行插入...二、标识列的组成创建一个标识列,通常要指定...
  • 使用DBHelper进行数据库的数据操作时,有一个表的字段设置为自增,但是执行INSERT的方式方法时报错 "当 IDENTITY_INSERT 设置为 OFF 时,不能向"XXX" 标识列插入显示值" 经过DEBUG发现...
  • 该种列具有以下三种特点: 1、列的数据类型为不带小数的数值类型 2、进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值 3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。...
  • 一个表中最多只能有一个标识列 标识列的数据类型只能是数值型 创建表时设置标识列 直接约束条件后面加上auto_increment关键字 往表中添加数据的时候,就可以不用填写(或填写null)标识列的值,该列的值会自动...
  • SQLSERVER 标识列

    2018-11-22 16:17:00
    该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行插入操作时,该列的值是由系统按一定规律生成,不允许空值3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列创建标识列 ...
  • SqlServer标识列

    2013-04-02 15:48:29
    一、标识列的定义以及特点SQL Server的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、进行...二、标识列的组成创建一个标识列,通常要指定三个内容:...
  • 大家好,我是时间财富网...2、设定表标识字段id:填写第一个列名“id”,设定数据类型为“int”,同时属性”位置标识规范”设定“是标识”的值为“是”。3、设定其它字段:依次填写字段学号stuNumb...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 729
精华内容 291
关键字:

在表中创建一个标识列