SYBASE & ORACLE自增主键
SYBASE & ORACLE自增主键
1、SYBASE:
SQL语句:
CREATE TABLE test( phoneid int IDENTITY NOT NULL PRIMARY KEY , phoneNum varchar(20) null )
关键字IDENTITY一定要大写,而且一定要放在int和not null之间,
用dba设置的话比较方便,直接在建表的过程中把Identity Column的属性勾上即可。
2、ORACLE
由于ORACLE设置主键是不会自动增加的,所以必须用 序列 和 触发器 来完成主键的递增
1建立数据表
createtable Test_Increase( userid number(10) primarykey,/*建立主键*/ username varchar2(20) );
2创建自动增长序列
CREATE SEQUENCE TestIncrease_Sequence INCREMENT BY1-- 每次加几个 START WITH1-- 从1开始计数 NOMAXVALUE-- 不设置最大值 NOCYCLE-- 一直累加,不循环 CACHE 10;
3创建触发器
CREATETRIGGER Test_Increase BEFORE insertON Test_Increase FOR EACH ROW begin select TestIncrease_Sequence.nextval into:New.userid from dual; end;完成!------------------------------------------------------------------------------------------------------------DB2修改表中一列为自动增长主键的方法1 )当想将表中一列修改为自动增长时,可用下面命令: Alter table <table name> alter column <column name> set generated always as identity (start with 1,increment by 1) 上面命令是在改一表中列的属性时,在网上找到的很有用。 2)当修改表中一列自动增长的开始值时,可用下面的命令: ALTER TABLE <talbe_name> ALTER COLUMN <column name> RESTART WITH 18; DB2可以使用generated always as identity 将某一个字段指定为自增长的字段, 比如: 这表示id自动是一个自增长的字段,它从1开始增加每次增加1。也可以通过generated 将字段的值通过其他字段的计算的来,比如; createtableuser(namevarchar(30), n1integer, n2 integer, idintegergeneratedalwaysas(n1+n2)) 如: createtablestrategy ( strategy_iddecimal(17) GENERATEDALWAYSASIDENTITY(STARTWITH1,INCREMENTBY1) primarykeynotnull, strategy_namevarchar(200), area_code decimal(6,0) ); GENERATEDALWAYSASIDENTITY(STARTWITH1, INCREMENTBY1) 从1开始自增,每次加1. DB2Identity字段与sequence: Identity字段与sequence的最大不同在于: identity只能在一个表中使用,多个表不可以共享identity;而sequence可以通过命名方式在同一个数据库内部的多个表中共享序列号发生器 生成数字序列的两种方法 在 DB2 中可以用两种方法自动生成一个数字序列: 定义带有 IDENTITY 属性的列。 创建 SEQUENCE 对象。 IDENTITY 列 当用 IDENTITY 属性定义表的列时,每当将一行插入表时,就会自动为该列生成一个数值。 SEQUENCE 对象 让 DB2 自动生成数字序列的第二种方法是创建 SEQUENCE 对象。可以使用 序列表达式(sequence expression)来引用序列对象。序列表达式可以出现在表达式能够出现的大多数位置。序列表达式可以指定要返回的值是新生成的值还是以前生成的值。 如果序列引用是针对 下一值(next value),就会为序列自动生成一个数值,并将该数值作为序列表达式的结果返回。例如,如果我们假设已经创建了名为 orders_seq 的序列,该序列表达式就返回为序列生成的下一个值: NEXTVALUEFORorders_seq 如果序列引用是针对 前一值(previous value),那么会将前一个 SQL 语句中为序列生成的数值作为序列表达式的结果返回。该序列表达式返回由序列生成的前一个值: PREVIOUSVALUEFORorders_seq 注:当 DB2 UDB 引入序列时,曾支持非 SQL 标准语法 NEXTVAL 代替 NEXT VALUE ,以及 PREVVAL 代替 PREVIOUS VALUE 。这些变体继续受到支持。 在标识和序列之间做出选择 虽然标识和序列都用于生成数值,但您也许要根据特殊情况选择使用一种来代替另一种。 在以下情况下,标识列很有用: 表中只有一列需要自动生成的值 每一行都需要独立的值 用自动生成器来产生表的主键 生成新值的进程与对表的插入操作紧密联系,无论插入操作是如何发生的 在以下情况下,序列对象很有用: 要将从一个序列生成的值存储到多个表中 每个表有多个列需要自动生成的值(可能通过使用同一个序列或多个序列为每一行生成多个值) 生成新值的进程与任何对表的引用无关 与序列对象不同,标识列是在表上定义的,因此需要某些限制。每个表最多只能有一个标识列。当创建一个列作为标识列时,对于该列必须使用确切的数字数据类型。因为标识属性为列生成一个值,这类似于 DEFAULT 子句所做的,所以在定义标识列时不能指定 DEFAULT 子句。标识列被隐式地定义成 NOT NULL
- 1淘宝封杀微信营销应用构成垄断吗?
- 2免费微信营销软件与酬酢媒体各不同的能力有哪些?
- 3微信推广软件与酬酢记者不一样的地方有哪几种?
- 4微信与财付通打通 迈出商业化最关键一步
- 5浅谈微信营销中的品牌定位问题
- 6微信营销- 账号消息推送的黄金时段?
- 7微信导航:广州日报官方微信上线 参与随手拍春色天天有奖拿
- 8域名的信任度是多少
- 9微淘、微博、微信:移动电商“三微”详细解读
- 10微信资讯:微信也能查勘理赔-保险公司新渠道
- 11服务器托管与虚拟主机的区别
- 12临沂企业APP开发的优势
- 13微商三大痛点 没用户、没内容、没成交该如何解决
- 14域名解释
- 15微信群发软件与社交媒体各不同的地方有哪几种?
- 16微信营销如何做好内容的推送
- 17免费微信营销软件与交际BBC不一样的功能有哪几种?
- 18SQL去除重复记录
- 19教你写好一份微信营销方案
- 20如何删除不用的MSN账号
- 21微信公共平台导航:吴克群香港开工何超莲送外卖 微信传不停
- 22主机托管含义
- 23免费微信营销软件与外交BBC皆不同的功能有哪几种?
- 24微信电话本2.0发布 再次向微信靠拢
- 25微信推广软件与社交BBC不相同的模式有哪几种?
- 26微信增粉推广方法的六大招数
- 27魅族获阿里5.9亿美元投资 喊话小米“一起玩”
- 28免费微信营销软件与应酬CNN不相同的能力有哪一些?
- 29微信公共平台导航:微信游戏加速 首批自研游戏或下月上线
- 30微信公共平台导航:微信交友认知音 见面留宿被非礼