Oracle创建表并设置主键自增

Oracle创建表并设置主键自增
Oracle创建表并设置主键自增

Oracle数据库如何创建表并设置主键自增

首先我们使用oracle sql developer官方管理工具来新建表并色织主键自增,首先连接数据库想必不用多说。创建表

在表那个文件夹上右键选择新建表

弹出如下图所示:

输入你想要的表名和列名并设置数据类型主键一定要设置NUMBER类型

设置主键

只要在主键那一行单件一下最前面的小方块就行,产生如何所示的效果即可:

主键的标识就是那个小钥匙。

设置主键自增

下面我们设置主键自增,选中主键所在那一行,找到下面的身份列单击(如图所示):

如下图所示看到类型点击下拉菜单选择列序列:

此时系统自动生成触发器和序列不用做任何修改点击确定那个么一个主键自增的表就已经成功的生成了。

测试

下面我们测试一下数据插入是否成功,这里我们直插入name列不插入主键看看主键是否能够自增。

Select一下发现主键确实自动生成并且自增了,如果不放心可以多加几条测试数据,这里我就不多加描述了

Oracle自动增长列的设置

SQL SERVER 和ACCESS 以及MYSQL 中,都有一种自增字段,通常被用来做主键或索引键,但是ORACLE 中,确并没有提供这种功能,但我们确经常需要这个功能,可以用以下方法解决, 一,如果你不在集群环境下使用,并且用到了hibernate,那么可以用hibernate提供的产生自动增长类型主键的increment策略,如下 在**.hbm.xml(hibernate映射文件)中配置如下 //该句指定使用hibernate自带的increment策略生成主键 这样,在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可, 注意,increment 实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键,increment不能在集群环境下使用, 二,使用hibernate的sequence策略,在oracle中新建一个sequence,在hibernate中使用,如下 在**.hbm.xml(hibernate映射文件)中配置如下 //该句指定使用hibernate自带的sequence策略生成主键,TEST_SEQ是在数据库中新建的sequence的名称 TEST_SEQ 这样,在java文件中对表增加记录时,只需添加除ID外的其他字段,然后save即可, 三,以上两种方法都是通过hibernate实现的,下面给出ORACLE的一种实现方式 1. 建立SEQUENCE CREATE [ OR REPLACE ] SEQUENCE sequence_identity START WITH initial seed

关于SQL主键GUID和Identity的看法

据库中使用自增量字段与Guid字段主键的性能对比 1.概述: 在我们的数据库设计中,数据库的主键是必不可少的,主键的设计对整个数据库的设计影响很大.我就对自动增量字段与Guid字段的性能作一下对比,欢迎大家讨论. 2.简介: 1.自增量字段 自增量字段每次都会按顺序递增,可以保证在一个表里的主键不重复。除非超出了自增字段类型的最大值并从头递增,但这几乎不可能。使用自增量字段来做主键是非常简单的,一般只需在建表时声明自增属性即可。 自增量的值都是需要在系统中维护一个全局的数据值,每次插入数据时即对此次值进行增量取值。当在当量产生唯一标识的并发环境中,每次的增量取值都必须最此全局值加锁解锁以保证增量的唯一性。这可能是一个并发的瓶颈,会牵扯一些性能问题。 在数据库迁移或者导入数据的时候自增量字段有可能会出现重复,这无疑是一场恶梦(本人已经深受其害). 如果要搞分布式数据库的话,这自增量字段就有问题了。因为,在分布式数据库中,不同数据库的同名的表可能需要进行同步复制。一个数据库表的自增量值,就很可能与另一数据库相同表的自增量值重复了。 2.uniqueidentifier(Guid)字段 在MS Sql 数据库中可以在建立表结构是指定字段类型为uniqueidentifier,并且其默认值可以使用NewID()来生成唯一的Guid(全局唯一标识符).使用NewID生成的比较随机,如果是SQL 2005可以使用NewSequentialid()来顺序生成,在此为了兼顾使用SQL 2000使用了NewID(). Guid:指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,其算法是通过以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字生成。其格式为:04755396-9A29-4B8C-A38D-00042C1B9028. Guid的优点就是生成的id比较唯一,不管是导出数据还是做分步开发都不会出现问题.然而它生成的id比较长,占用的数据库空间也比较多,随着外存价格的下降,这个也无需考虑.另外Guid不便于记忆,在这方面不如自动增量字段,在作调试程序的时候不太方便。 3.测试:

关于数据库中的主键的自动增长

Mysql、SqlServer、Oracle主键自动增长的设置 1、把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: create table customers(id int auto_increment primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); 2、在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如: create table customers(id int identity(1,1) primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。 3、Oracle列中获取自动增长的标识符 在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。 例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。方法一、 create sequence customer_id_seq INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; 一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。curval:返回序列的当前值 nextval:先增加序列的值,然后返回序列值 create table customers(id int primary key not null, name varchar(15)); insert into customers values(customer_id_seq.curval, "name1"),(customer_id_seq.nextval, "name2"); 方法二、或者通过存储过程和触发器: 1、通过添加存储过程生成序列及触发器: create or replace PROCEDURE "PR_CREATEIDENTITYCOLUMN" (tablename varchar2,columnname varchar2) as strsql varchar2(1000); begin strsql := 'create sequence seq_'||tablename||' minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 nocache'; execute immediate strsql; strsql := 'create or replace trigger trg_'||tablename||' before insert on '||tablename||' for each row begin select seq_'||tablename||'.nextval into :new.'||columnname||' from dual; end;'; execute immediate strsql; end;

SQL Server 返回最后插入记录的自动编号ID

SQL Server 返回最后插入记录的自动编号ID 最近在开发项目的过程中遇到这么一个问题,就是在插入一条记录的后立即获取其在数据库中自增的ID,以便处理相关联的数据,怎么做?在sql server 2000中可以这样做,有几种方式。详细请看下面的讲解与对比。 一、要获取此ID,最简单的方法就是:(以下举一简单实用的例子) --创建数据库和表 create database MyDataBase use MyDataBase create table mytable ( id int identity(1,1), name varchar(20) ) --执行这个SQL,就能查出来刚插入记录对应的自增列的值 insert into mytable values('李四') select @@identity 二、三种方式的比较 SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和@@IDENTITY,它们都返回插入到IDENTITY 列中的值。IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 例如,有两个表T1 和T2,在T1 上定义了一个INSERT 触发器。当将某行插入T1 时,触发器被激发,并在T2 中插入一行。此例说明了两个作用域:一个是在T1 上的插入,另一个是作为触发器的结果在T2 上的插入。 假设T1 和T2 都有IDENTITY 列,@@IDENTITY 和SCOPE_IDENTITY 将在T1 上的INSERT 语句的最后返回不同的值。 @@IDENTITY 返回插入到当前会话中任何作用域内的最后一个IDENTITY 列值,该值是插入T2 中的值。

关于数据库设计中主键问题的思考

关于数据库设计中主键问题的思考 文章摘要:数据库主键在数据库中占有重要地位。主键的选取策略决定了系统是否可靠、易用、高效。本文探讨了数据库设计过程当中常见的主键选取策略,并剖析了其做主键的优缺点,提出了相应的解决问题的方法。 关键字:自增标识GUID COMB 在基于关系型数据库设计时候,通常要为每张表指定一个主键,所谓主键就是能够唯一标识表中某一行记录的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除、修改时不出现错误。当然,其它字段可以辅助我们在执行这些操作时消除共享冲突,不是本文讨论的重点,不再赘述。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。所以数据库在设计时,主键起到了很重要的作用。常见的数据库主键选取方式有:自动增长式、手动增长式、UniqueIdentifier、联合式(复合式)、时间序列+随机数式、“COMB(Combine)”类型。 一、自动增长式 很多数据库设计者喜欢使用自动增长型字段,因为它使用简单。自动增长式允许我们在向数据库添加数据时,不考虑主键的取值,记录插入后,数据库系统会自动为其分配一个值,确保绝对不会出现重复。如果使用SQL Server数据库的话,我们还可以在记录插入后使用@@IDENTITY全局变量获取系统分配的主

键值。 尽管自动增长式字段会省掉我们很多繁琐的工作,但使用它也存在潜在的问题,那就是在数据缓冲模式下,很难预先填写主键与外键的值。假设有主辅两张表: Order(OrderID, OrderDate) 订单表 OrderDetial(OrderID, LineNum, ProductID, Price) 订单明细表Order 表中的OrderID是自动增长型的字段。假设现在需要我们录入一张订单,包括在Order表中插入一条记录以及在OrderDetail表中插入若干条记录。因为Order表中的OrderID是自动增长型的字段,那么我们在记录正式插入到数据库之前无法事先得知它的取值,只有在更新后才能知道数据库为它分配的是什么值。这会造成以下矛盾发生: 首先,为了能在OrderDetail的OrderID字段中添入正确的值,必须先更新Order表以获取到系统为其分配的OrderID值,然后再用这个OrderID填充OrderDetail表的OrderID列。最后更新OderDetail表。但是,为了确保数据的一致性,Order与OrderDetail在更新时必须在事务模式下进行的,即要么两张表同时同时更新成功、要么全部失败,显然它们是相互矛盾的。 其次,当我们需要在多个数据库间进行数据的复制时(SQL Server的数据分发、订阅机制允许我们进行库间的数据复制操作),自动增长式字段可能造成数据合并时的主键冲突及表关联关系的丢失。设想一个数据库中的Order表向另一个库中的Order

MySql 主键自动增长

MySql 主键自动增长 Mysql,SqlServer,Oracle主键自动增长设置 1、把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: createtable customers(id int auto_increment primarykey not null, name varchar(15)); insertinto customers(name) values("name1"),("name2"); select id from customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值。最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。 Sql Server 在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如: createtable customers(id int identity(1,1) primarykey not null, name varchar(15)); insertinto customers(name) values('name1'),('name2'); select id from customers; 注意:在sqlserver中字符串用单引号扩起来,而在mysql中可以使用双引号。 查询结果和mysql的一样。 由此可见,一旦把id设为identity类型,MS SQLServer数据库会自动按递增的方式为主键赋值。identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。

SQLServer插入数据得到上一条数据的自增ID

server 2005中有几种方式可以实现。 要获取此ID,最简单的方法就是在查询之后select @@indentity --SQL语句创建数据库和表 create database dbdemo go use dbdemo go create table tbldemo ( id int primary key identity(1,1), name varchar(20) ) go --执行下面SQL语句就能查出来刚插入记录对应的自增列的值 insert into tbldemo values('测试') select @@identity SQL Server 2000中,有三个比较类似的功能:SCOPE_IDENTITY、IDENT_CURRENT 和@@IDENTITY,它们都返回插入到IDENTITY 列中的值。 1)IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值,它不受作用域和会话的限制,而受限于所指定的表。 2)@@IDENTITY返回为当前会话的所有作用域中的任何表最后生成的标识值。 3) SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。SCOPE_IDENTITY 和@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 例如,有两个表T1 和T2,在T1 上定义了一个INSERT 触发器。当将某行插入T1 时,触发器被激发,并在T2 中插入一行。此例说明了两个作用域:一个是在T1 上的插入,另一个是作为触发器的结果在T2 上的插入。 假设T1 和T2 都有IDENTITY 列,@@IDENTITY 和SCOPE_IDENTITY 将在T1 上的INSERT 语句的最后返回不同的值。@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个IDENTITY 列值,该值是插入T2 中的值。

通过创建序列和触发器实现表的主键自增

本次的目的是通过创建序列和触发器实现表的主键自增。 首先创建序列,序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUE n|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n|NOCACHE}]; INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。 START WITH 定义序列的初始值(即产生的第一个值),默认为1。 MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。 MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。 CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。 CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。 删除序列的语法是DROP SEQUENCE 序列名; 假设有表TEST,其主键为TEST_ID,首先建立递增序列SEQ_TEST: create sequence SEQ_TEST increment by 1

oracle主键自动增长序列

select * from (select e.*,ROWNUM rn from (select * from emp order by empno) e) where rn between 1 and 10; select * from (select e.*,ROWNUM rn from (select * from emp order by empno) e where ROWNUM<=10) where rn>=1; 首先,你要有一张表! CREA TE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME V ARCHAR(25), PHONE V ARCHAR(10), ADDRESS V ARCHAR(50) ); 然后,你需要一个自定义的sequence CREA TE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXV ALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,假如你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下假如你给出了cache值那么系统将自动读取你的cache值大小个seq,这样在反复操作时会加快运行速度,但假如遭遇意外情况如当机了或Oracle死了,则下次取出的seq值将和上次的不连贯.(假如连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!) 书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下: CREA TE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW WHEN (new.id is null) begin select emp_sequence.nextval into: new.id from dual; end; 打完收工!下面你就试试插入数据吧! INSERT INTO example(Name,phone,address) V alues('Cao','56498543','Heibei');

几个常见数据库关于主键自动增加的设置

几个常见数据库关于主键自动增加的设置1、把主键定义为自动增长标识符类型 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: create table customers(id int auto_increment primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); select id from customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值。最后查询表中id字段,查询结果为:id 1 2 由此可见,一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。 在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如: create table customers(id int identity(1,1) primary key not null, name varchar(15)); insert into customers(name) values("name1"),("name2"); select id from customers;

查询结果和mysql的一样。由此可见,一旦把id设为identity类型,MS SQLServer数据库会自动按递增的方式为主键赋值。identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。 2、从序列中获取自动增长的标识符 在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。 create sequence customer_id_seq increment by 2 start with 1 一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval 属性。 curval:返回序列的当前值 nextval:先增加序列的值,然后返回序列值 以下sql语句先创建了customers表,然后插入两条记录,在插入时设定了id和name字段的值,其中id字段的值来自于customer_id_seq 序列。最后查询customers表中的id字段。 create table customers(id int primary key not null, name varchar(15)); insert into customers values(customer_id_seq.curval, "name1"),(customer_id_seq.nextval, "name2"); select id from customers; 如果在oracle中执行以上语句,查询结果为: id

Oracle数据库 创建自增字段方法

Oracle创建自增字段方法 以前最头疼的就是对表插入数据的时候,有主键问题。因为主键不能够重复,所以得用函数自定义一个规则生成不重复的值赋值给主键。 现在发现oracle有sequence就不用那么麻烦了。 先假设有这么一个表: create table S_Depart ( DepartId INT not null, DepartName NVARCHAR2(40) not null, DepartOrder INT default 0, constraint PK_S_DEPART primary key (DepartId) ); 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXvalue -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE -------------------------------------------------------------------------------------------------------------------------------- 针对S_Depart创建的sequence如下: create sequence S_S_DEPART minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by 1

oracle中如何设置自增主键

首先,你要有一张表! CREATE TABLE example( ID Number(4) NOT NULL PRIMARY KEY, NAME V ARCHAR(25), PHONE V ARCHAR(10), ADDRESS V ARCHAR(50)); 如果对于以上的建表语句还有疑问的话,建议您不要继续了!有那么些时间您还不如去看看金庸读读琼瑶! 然后,你需要一个自定义的sequence CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXV ALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 NOCACHE -- 不建缓冲区 以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq ,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!) 书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下: CREATE TRIGGER "触发器名称" BEFORE INSERT ON example FOR EACH ROW WHEN (new.id is null) begin select emp_sequence.nextval into: new.id from dual; end; 打完收工!下面你就试试插入数据吧! INSERT INTO example(Name,phone,address) Values(''Cao'',''56498543'',''Heibei''); ============================================================= ORACLE SEQUENCE的简单介绍(自增长字段)- - 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。 1、CreateSequence 你首先要有CREATESEQUENCE或者CREATEANYSEQUENCE权限, CREATESEQUENCEemp_sequence INCREMENTBY1--每次加几个 STARTWITH1--从1开始计数 NOMAXV ALUE--不设置最大值 NOCYCLE--一直累加,不循环 CACHE10;

sql如何自动生成流水号

数据库的流水号就相当于一个自增的整数,用来识别唯一的记录用的。也就是说你每插入一条记录,流水号就增加1. 一般是日期+流水号形成一个唯一的id。 1.sql如何自动生成流水号 oracle数据库的话可以利用rownum取当前记录的顺序,然后赋值给流水号就可以了 2。sql 表中有一列xh 怎样用语句添加xh 为流水号从1依次递增谢谢先进入企业管理器把列xh删除. 添加一列,自动递增: alter table tb add xhint identity(0,1) alter table xh所在表的表名 add xhint identity(1,1) not null 3 项目中往往有一些单据流水号或者流程流水号是希望通过新增一条记录后自动产生一个编号的,比如新增一条流程就自动根据当前日期自动添加该流程的流程流水号,下面介绍两种不同类型流水号通过SQL自动产生的方法。 流水号格式: 第一种(数值类型):日期+流水号,比如“201104190001”-->"201104190002"; 第二种(文本类型):前缀+日期+流水号,比如 “WT201104190001”-->"WT201104190002"。 不论哪种情况,流水号的生成原则都是一样的,流水号的产生都需要根据当前日期产生,新增的一条记录的流水号为当前日期下所有记录中流水号最大那条加1得来。 一、数据库中添加一个表:TestNo 列名数据类型说明 ID uniqueidentifier 主键 No bigint 流水号字段,不过是纯数字型的流水号,这个为本例子的第一种情况,流水号可以为纯数字 DT datetime 新增一条记录的当前时间,相信每新增一条记录都会记录这次操作的当前时间的。

mysql 数据库自增id 的总结

mysql 数据库自增id 的总结 有一个表StuInfo,里面只有两列StuID,StuName其中StuID是int型,主键,自增列。现在我要插入数据,让他自动的向上增长,insert into StuInfo(StuID,StuName) values(????) 如何写? INSERT INTO StuInfo(StuID,StuName) V ALUES (NULL, `字符`)或者 INSERT INTO StuInfo(StuName) V ALUES (`字符`) INSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。它们的主要区别是如何处理重复的数据。 1INSERT的一般用法 MySQL中的INSERT语句和标准的INSERT不太一样,在标准的SQL语句中,一次插入一条记录的INSERT语句只有一种形式。 INSERT INTO tablename(列名…) V ALUES(列值); 而在MySQL中还有另外一种形式。 INSERT INTO tablename SET column_name1 = value1, column_name2 = value2,…; 第一种方法将列名和列值分开了,在使用时,列名必须和列值的数一致。如下面的语句向users表中插入了一条记录: INSERT INTO users(id, name, age) V ALUES(123, '姚明', 25); 第二种方法允许列名和列值成对出现和使用,如下面的语句将产生中样的效果。 INSERT INTO users SET id = 123, name = '姚明', age = 25; 如果使用了SET方式,必须至少为一列赋值。如果某一个字段使用了省缺值(如默认或自增值),这两种方法都可以省略这些字段。如id字段上使用了自增值,上面两条语句可以写成如下形式: INSERT INTO users (name, age) V ALUES('姚明',25); INSERT INTO uses SET name = '姚明', age = 25; MySQL在V ALUES上也做了些变化。如果V ALUES中什么都不写,那MySQL将使用表中每一列的默认值来插入新记录。 INSERT INTO users () V ALUES(); 如果表名后什么都不写,就表示向表中所有的字段赋值。使用这种方式,不仅在V ALUES 中的值要和列数一致,而且顺序不能颠倒。INSERT INTO users V ALUES(123, '姚明', 25); 如果将INSERT语句写成如下形式MySQL将会报错。 INSERT INTO users V ALUES('姚明',25); 2使用INSERT插入多条记录 看到这个标题也许大家会问,这有什么好说的,调用多次INSERT语句不就可以插入多

【IT专家】mysql 如何设置自动增长序列 sequence(一)

本文由我司收集整编,推荐下载,如有疑问,请与我司联系mysql 如何设置自动增长序列sequence(一) 2016/03/29 0 背景:由于项目需要,必须用mysql设置主键自增长,而且想用字符串的。经过上网查找并且实验,终于做出了一套方案。现在就共享给大家! ?解决思路:由于mysql不带sequence,因此要手写的,创建一张储存sequence的表(tb_sequence),然后手动插入一条数据,最后自定义一个函数来处理要增长的值。 ?一起做吧: ?1、创建表tb_sequence,用来存放sequence值: ?[sql]view plaincopyprint?createtabletb_sequence(namevarchar(50)notnull,current_valueintnotnull,_i ncrementintnotnulldefault1,primarykey(name));2、手动插入数据: ? ?[sql]view plaincopyprint?insertintotb_sequencevalues(‘userid’,100,2);3、定义函数_nextval: ? ?[sql]view plaincopyprint?DELIMITER//createfunction_nextval(nvarchar(50))returnsintegerbegindec lare_curint;set_cur=(selectcurrent_valuefromtb_sequencewherename=n);updatetb_sequenc esetcurrent_value=_cur+_incrementwherename=n;return_cur;end;//说明:delimiter // ---- 定义语句结束符。其他的代码自己看吧。 ?4、恢复默认的语句结束符:(可以省略但是结束符必须用// ,为了方便还是设置回来。) ?[sql]view plaincopyprint?DELIMITER;5、检验结果 ?多次执行以下语句: ?[sql]view plaincopyprint?select_nextval(‘userid’);结果显示: ?

Oracle使用序列和触发器实现自增ID

Oracle使用序列和触发器实现自增ID 分类:Oracle2011-12-19 16:03 1968人阅读评论(0) 收藏举报oracleinsertsqleach 需求: 向表中插入记录时,使得某列能够自动插入ID,并且插入的ID是自增的。 我们可以先创建一个序列,例如GOODS_GOODS_ID,然后每次使用如下SQL语句即可完成该功能, insert into Goods(GoodsID, name) values ( GOODS_GOODS_ID.nextval, '农夫烤鸡'); 若我们希望如下方式的SQL操作也能插入ID时,则需要另外的解法: insert into Goods(name) values ('农夫烤鸡'); 实现: 首先创建一个序列,然后为表创建一个触发器,当表插入一行时,将序列的nextval 的值插入指定列中。 [sql]view plaincopy 1./*==============================================================*/ 2./* 自增序列, GOODS.GOODS_ID GOODS_GOODS_ID.Nextval */ 3./*==============================================================*/ 4.create sequence GOODS_GOODS_ID 5.minvalue 1 6.maxvalue 99999999999999999999 7.start with 1 8.increment by 1

SQLServer数据库自增长标识列的更新修改操作方法(转载)

自增长的表示列的序号的值的修改。 SQLServer数据库自增长标识列的更新修改操作方法(转载) 在日常的sql server开发中,经常会用到Identity类型的标识列作为一个表结构的自增长编号。比如文章编号、记录序号等等。自增长的标识列的引用很大程度上方便了数据库程序的开发,但是有时这个固执的字段类型也会带来一些麻烦。 一、修改标识列字段的值:(在执行insert时,将ID手动的设置成想要的值)有时,为了实现某个功能,需要修改类型为Identity自增长类型的字段的值,但由于标识的类型所限,这种操作默认是不允许的。比如,目前数据库有10 条正常记录,引时删除5条,那么如果再添加数据时,自增长的标识列会自动赋值为11,可这时如果想在插入数据时给赋值6呢,默认是不允许的。如果说想改 变主键标识符的值,完全由自已控制标识字段的插入,方法是有的,如下:SET IDENTITY_INSERT [TABLE][ON|OFF] 使用上述语句,可以方便的控制某个表的某个自增长标识列是否自动增长,也就是说是否允许你在inert一条记录时手动指定主键标识列字段的值。 如果指定为ON,则可以insert时指定主键标识字段的值,该值不自动增长。如果使用完毕,还需使用这个语句将开关关闭到默认状态OFF,不然下次 insert 数据时该字段还是不会自动增长,要做到有始有终嘛。只是每次插入时都要手动的设置一个主键值,示列如下: set identity_insert question_title on //开启手动设置 insert into question_title (f_id,f_valid,f_questionTitle) values(6,5,'hello'); //手动的向数据库插入数据 二、重置标识列字段值: 当数据记录被删除一部分后,后面再添加的新数据记录,标识列数值会有很大的空闲间隔,看上去不是很爽。即使你删除表中全部记录,identity标识列的值还是会无何止的自动增加变大,而不是从头开始增长。通过下面这条语句可以重置自增长字段的值: DBCC CHECKIDENT(TABLE,[RESEED|NORESEED],[1]) 上述语句把指定表的ID值(种子值)强制重设为1。然而,如果你不想将ID重设为1,你可以用你想用的ID值(种子值)替代第三个参数。如果你想知道当 前的ID值(种子值),而不想重设标识种子,这时你就要用NORESEED,而不用再去设置第三个参数。 DBCC checkident(question_title,reseed,1) insert into question_title (f_valid,f_questionTitle) values(5,'hello');如果将表中记录都删除后,执行上面的一句话,这时ID的自增长值已被重设,再insert插入记录到数据库时,ID就可以从设置的1开始,以后每次插入的记录还是自动增长。 执行成功后提示如下: --检查标识信息: 当前标识值 '9',当前列值 '1'。 DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 说明:以上显示数据库某表中当前ID最大值为9,当前设置的ID值为1。

SQL语句(建库建表修改语句)

sql语名(创建和管理表) 一、使用create table语名创建表。 1.创建一个数据表,表名为project,字段:id,name, create table project ( id int, name varchar(8), ) 2.设置标识字段,标识字段是唯一标识表中每条记录的特殊字段。用identity指定字段为标识字段。每个表只能创建一个标识字段,而且必须指定标识种子和标识增量,如不指定,则取默认值(1,1)。 create table project( id int identity(1,1), name varchar(8) ) 上面语句中,id为标识字段,种子为1,增量为1. 二、创建约束、规则和默认值 1.约束,约束为分主键约束、唯一性约束、外键约束和核查约束 ①主键约束用来强制一个字段或多个字段组合值的唯一性,并且不允许该字段为空值, create table jproject ( id int constraint pk_id primary key, name varchar(8),) 该语句的主键为id,主键约束名为pk_id. ②唯一性约束,唯一性约束与主键约束的主要区别是一个表只能定义一个主键约束,但可以定义多个唯一性约束;允许空值的字段上不能定义主键约束,但可以定义唯一性约束。 create table jproject( id int , name varchar(8) constraint un_name unique) 字段name设为唯一性约束,约束名为un_name ③外键约束,用于建立和加强两个表数据之间的链接的字段。一个表中的字段对应于另一个表中的主键字段。 创建jproject数据表: create table jproject ( id int, name varchar(8) constraint un_name unique) 创建employe数据表,并将字段负责人设置外键约束。 create table employ ( 编号 int, 项目名称 varchar(20), 负责人 varchar(8) foreign key references jproject(name) on delete casade ) ④核查约束,通过检查一个或多个字段的输入值是否符合设定的检查条件来强制数据的完整性,如输入值不符合核查条件,系统将拒绝这条记录。 创建employees数据表,工资设为核查约束,范围限定在1000~20000之间 create table

相关主题
相关文档
最新文档