pgsql 中oracle 字段默认值怎样默认序列化

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&序列对象(也叫序列生成器)就是用CREATE SEQUENCE 创建的特殊的单行表。一个序列对象通常用于为行或者表生成唯一的标识符。
二、创建序列
方法一:直接在表中指定字段类型为serial 类型
david=# create table tbl_xulie (
david(# id serial,
david(# name text);
CREATE TABLE will create implicit sequence "tbl_xulie_id_seq" for serial column "tbl_xulie.id"
CREATE TABLE
方法二:先创建序列名称,然后在新建的表中列属性指定序列就可以了,该列需int 类型
创建序列的语法:
CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table.column | NONE } ]
david=# create sequence tbl_xulie2_id_seq increment by 1 minvalue 1 no maxvalue start with 1;
CREATE SEQUENCE
david=# create table tbl_xulie2 (
david(# id int4 not null default nextval('tbl_xulie2_id_seq'),
david(# name text);
CREATE TABLE
三、查看序列
david=# \d tbl_xulie
Table "public.tbl_xulie"
--------+---------+--------------------------------------------------------
| integer | not null default nextval('tbl_xulie_id_seq'::regclass)
david=# \d tbl_xulie2
Table "public.tbl_xulie2"
--------+---------+---------------------------------------------------------
| integer | not null default nextval('tbl_xulie2_id_seq'::regclass)
查看序列属性
david=# \d tbl_xulie_id_seq
Sequence "public.tbl_xulie_id_seq"
---------------+---------+---------------------
sequence_name | name
| tbl_xulie_id_seq
last_value
start_value
increment_by
cache_value
| boolean | f
| boolean | f
Owned by: public.tbl_xulie.id
david=# select * from tbl_xulie2_id_
sequence_name
| last_value | start_value | increment_by |
| min_value | cache_value | log_cnt | is_cycled | is_called
-------------------+------------+-------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
tbl_xulie2_id_seq |
1 | 4775807 |
四、序列应用
4.1 在INSERT 命令中使用序列
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# select * from tbl_
----+-------
4.2 数据迁移后更新序列
david=# truncate tbl_
TRUNCATE TABLE
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Eagle');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Miles');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Simon');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Rock');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Peter');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sally');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Nicole');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Monica');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Renee');
INSERT 0 1
david=# select * from tbl_
----+--------
15 | Sandy
16 | David
17 | Eagle
18 | Miles
19 | Simon
21 | Peter
22 | Sally
23 | Nicole
24 | Monica
25 | Renee
david=# copy tbl_xulie to '/tmp/tbl_xulie.sql';
david=# truncate tbl_
TRUNCATE TABLE
david=# alter sequence tbl_xulie_id_seq restart with 100;
ALTER SEQUENCE
david=# select currval('tbl_xulie_id_seq');
david=# select nextval('tbl_xulie_id_seq');
david=# select nextval('tbl_xulie_id_seq');
david=# begin;
david=# copy tbl_xulie from '/tmp/tbl_xulie.sql';
david=# select setval('tbl_xulie_id_seq', max(id)) from tbl_
david=# end;
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Flash');
INSERT 0 1
david=# select * from tbl_
----+--------
15 | Sandy
16 | David
17 | Eagle
18 | Miles
19 | Simon
21 | Peter
22 | Sally
23 | Nicole
24 | Monica
25 | Renee
26 | Flash
david=# select nextval('tbl_xulie_id_seq');
五、序列函数
下面序列函数,为我们从序列对象中获取最新的序列值提供了简单和并发读取安全的方法。
nextval(regclass)
递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。
currval(regclass)
在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过&nextval,那么会报告一个错误。)请注意因为此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。
返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。
setval(regclass, bigint)
重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。
setval(regclass, bigint, boolean)
重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。
5.1&查看下一个序列值
david=# select nextval('tbl_xulie_id_seq');
david=# select nextval('tbl_xulie_id_seq');
5.2 查看序列最近使用值
david=# select nextval('tbl_xulie_id_seq');
david=# select currval('tbl_xulie_id_seq');
david=# select currval('tbl_xulie_id_seq');
5.3 重置序列
方法一:使用序列函数
a.&setval(regclass, bigint)
david=# truncate tbl_
TRUNCATE TABLE
david=# select setval('tbl_xulie_id_seq', 1);
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# select * from tbl_
----+-------
david=# select currval('tbl_xulie_id_seq');
david=# select nextval('tbl_xulie_id_seq');
b.&setval(regclass, bigint, boolean)
b.1&setval(regclass, bigint, true)
david=# truncate tbl_
TRUNCATE TABLE
david=# select setval('tbl_xulie_id_seq', 1, true);
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# select * from tbl_
----+-------
效果同a.&setval(regclass, bigint)
b.2&setval(regclass, bigint, false)
david=# truncate tbl_
TRUNCATE TABLE
david=# select setval('tbl_xulie_id_seq', 1, false);
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# select * from tbl_
----+-------
方法二:修改序列
修改序列的语法:
ALTER SEQUENCE name [ INCREMENT [ BY ] increment ]
[ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ]
[ START [ WITH ] start ]
[ RESTART [ [ WITH ] restart ] ]
[ CACHE cache ] [ [ NO ] CYCLE ]
[ OWNED BY { table.column | NONE } ]
ALTER SEQUENCE name OWNER TO new_owner
ALTER SEQUENCE name RENAME TO new_name
ALTER SEQUENCE name SET SCHEMA new_schema
david=# truncate tbl_
TRUNCATE TABLE
david=# alter sequence tbl_xulie_id_seq restart with 0;
RESTART value (0) cannot be less than MINVALUE (1)
david=# alter sequence tbl_xulie_id_seq restart with 1;
ALTER SEQUENCE
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'David');
INSERT 0 1
david=# insert into tbl_xulie values (nextval('tbl_xulie_id_seq'), 'Sandy');
INSERT 0 1
david=# select * from tbl_
----+-------
david=# select nextval('tbl_xulie_id_seq');
六、删除序列
DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
当有表字段使用到PG序列时,不能直接删除。
david=# drop sequence tbl_xulie2_id_
cannot drop sequence tbl_xulie2_id_seq because other objects depend on it
default for table tbl_xulie2 column id depends on sequence tbl_xulie2_id_seq
Use DROP ... CASCADE to drop the dependent objects too.
david=# drop table tbl_xulie2;
DROP TABLE
david=# drop sequence tbl_xulie2_id_
DROP SEQUENCE
说明:对于序列是由建表时指定serial 创建的,删除该表的同时,对应的序列也会被删除。
七、参考资料
PostgreSQL官方说明:
PostgreSQL: 数据迁移之序列问题:
阅读(...) 评论()<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
昨天夜里这里下过雨么?
雨后的竹笋更加青翠了。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
改完这些之后呢我又想干脆给他个默认值,反正之前我也是使用默认值的,不过是在php代码中,如果放在数据库中效率还是要高一点的。所以我又做了如下的操作:postgres=# alter table admin alter column password SET DEFAULT 'beb2e89bbdf6bf7d4f448' ;细心的朋友可能会发现现默认值是刚好32位的。插入数据测试一下果真好用,不过紧接着我又想了一个问题,就是如果我指定的默认值超过32为会怎么样,我又做了这样的操作:postgres=# alter table admin alter column password SET DEFAULT 'beb2e89bbdf6bf7d4f4480';在刚刚的最后加了一个0刚好33位。按下回车后竟然成功了,我想是不是多余的部分被截断了,输入\d admin查看表的信息得到如下的结果postgres=# \&& & & & & & & & & & & & & 资料表 "public.admin"&& &栏位 & &| & & 型\xB1 & & | & & & & & & & & & & 修饰\xB4----------+---------------+------------------------------------------------&id & & & | integer & & & | 强 缺省 nextval('admin_id_seq'::regclass)&name & & | character(18) |&password | character(32) | 缺省 'beb2e89bbdf6bf7d4f4480'::bpchar索引:&& &"admin_pkey" PRIMARY KEY, btree (id)由引用:&& &TABLE "mapping" CONSTRAINT "mapping_adminid_fkey" FOREIGN KEY (adminid) REFERENCES admin(id) ON UPDATE CASCADE ON DELETE CASCADE可以看到红色的部分刚好33为,竟然意外的设置成功了,赶紧插入数据试一下,作如下输入:insert into admin (name) values('test');得到了如下的回显信息ERROR: &value too long for type character(32)。原来在这里等着出错呢,如果要是指定值且不超过32为的话就不会出错,我想这是postgreSQL设计的不够完美的地方,他应该在之前我们指定默认值的时候就做检查,即时给我们一个回馈。我就是做事的时候有时候愿意多想一步,发现了这个不知道算不算bug的东西,写出来供大家参考,我的QQ: 大家发现其他的有意思的东西希望一起分享一下。请关注请关注
阅读(4815)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'postgreSQL字段默认值问题',
blogAbstract:'今天是春节后的第一天上班,昨天做了一宿的车还是挺累的,今天上班实在是不想写代码,所以就看下postgreSQL这个很棒的数据库。为以前的数据表扩展一下长度写法如下:postgres=# alter table admin alter column password type character(32);以前是十八位的,之所以改到32为是想用php的MD5加密方法。改完这些之后呢我又想干脆给他个默认值,反正之前我也是使用默认值的,不过是在php代码中,如果放在数据库中效率还是要高一点的。所以我又做了如下的操作:postgres=# alter table admin alter column password SET DEFAULT ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:1,
publishTime:5,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'昨天夜里这里下过雨么?\n雨后的竹笋更加青翠了。',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 oracle 字段默认值 的文章

 

随机推荐