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微信群发软件与外交BBC不一样的能力和功能有哪几种?
- 2微信公共平台导航:微信“去美国抢客户”的底气何来?
- 32015微商崛起,打造品牌微商最好的一面
- 4企业网站推广必须坚持做的3个事情
- 5雅士利开启微信多彩互动!
- 6域名与网站之间的排名关系
- 7玩好微信营销挣钱很容易
- 8[厦门]扫明发商业广场二维码,礼品特权随便享
- 9微信营销软件与交际BBC不相同的地方有哪一些?
- 10微信工程管理软件具体功能
- 11网页打不开是什么原因
- 12【广州】海尔 传递微祝福 把爱带回家
- 13微信营销靠积累,才会有加不完的好友
- 142015最新的个人贷款调查报告有哪些内容
- 15醒醒吧!微信必然越来越大,QQ会越来越小
- 16微信理财收益高,深受用户欢迎
- 17临沂APP开发运营常被忽略的9点
- 18免费微信营销软件与外交BBC皆不同的功能有哪几种?
- 19android控件布局 ToggleButton按钮 和文字
- 20临沂物业APP未来社区服务主流
- 21opencv_python安装与配置_windows
- 22软件定义数据中心SDDC日志分析知多少
- 23魅族获阿里5.9亿美元投资 喊话小米“一起玩”
- 24微信推广软件与社交时代报不同的能力和功能有哪几种?
- 25忘了路由器登录用户名与密码怎么办
- 26无线网络故障解决思路
- 27玩不好淘宝?那就开个微店铺吧!
- 28企业做网站的普遍需求包括哪些?
- 29临沂APP开发浅析社区类APP开发市场
- 30微信可能会颠覆快递的运营模式