在oracle中sequence就是所謂的序列號,每次取的時候它會自動增加,一般用在需要按序列號排序的地方。 1、Create Sequence 你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE權(quán)限, CREATE SEQUENCE emp_sequence INCREMENT BY 1 -- 每次加幾個 START WITH 1 -- 從1開始計數(shù) NOMAXVALUE -- 不設(shè)置最大值 NOCYCLE -- 一直累加,不循環(huán) CACHE 10; 一旦定義了emp_sequence,你就可以用CURRVAL,NEXTVAL CURRVAL=返回 sequence的當(dāng)前值 NEXTVAL=增加sequence的值,然后返回 sequence 值 比如: emp_sequence.CURRVAL emp_sequence.NEXTVAL 可以使用sequence的地方: - 不包含子查詢、snapshot、VIEW的 SELECT 語句 - INSERT語句的子查詢中 - NSERT語句的VALUES中 - UPDATE 的 SET中 可以看如下例子: INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK',7902, SYSDATE, 1200, NULL, 20); SELECT empseq.currval FROM DUAL; 但是要注意的是: - 第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENT BY值,然后返回增加后的值。CURRVAL 總是返回當(dāng)前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值,所以如果你在同一個語句里面使用多個NEXTVAL,其值就是不一樣的。明白? - 如果指定CACHE值,ORACLE就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。 使用cache或許會跳號, 比如數(shù)據(jù)庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失. 所以可以在create sequence的時候用nocache防止這種情況。 2、Alter Sequence 你或者是該sequence的owner,或者有ALTER ANY SEQUENCE 權(quán)限才能改動sequence. 可以alter除start至以外的所有sequence參數(shù).如果想要改變start值,必須 drop sequence 再 re-create . Alter sequence 的例子 ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000后從頭開始 NOCACHE ; 影響Sequence的初始化參數(shù): SEQUENCE_CACHE_ENTRIES =設(shè)置能同時被cache的sequence數(shù)目。 可以很簡單的Drop Sequence DROP SEQUENCE order_seq; 示例Sequence: CREATE SEQUENCE SCOTT.DMIFPOSTID START WITH 261 INCREMENT BY 1 NOMINVALUE NOMAXVALUE NOCYCLE CACHE 20 NOORDER 3、如何使用 第一種方法:一般來說需要新建一個觸發(fā)器(TRIGGER),使得在插入數(shù)據(jù)之前先運行Sequence生成自增號。示例Trigger -- Create table create table TEST ( SEQ INTEGER not null, NAME VARCHAR2(20), PWD VARCHAR2(20) ) tablespace USERS pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); -- Create/Recreate primary, unique and foreign key constraints alter table TEST add constraint PK_TEST primary key (SEQ) using index tablespace USERS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited ); create or replace trigger TI_TEST before insert on test for each row declare -- local variables here begin SELECT SEQ_TEST.NEXTVAL INTO :NEW.SEQ FROM DUAL; end TI_TEST; 插入語句 insert into test values('aa','aa'); 第二種方法:可以在插入數(shù)據(jù)時直接調(diào)用。 insert into table(id,name) values(seq_name.nextval,'名字');
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有北票免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1、通過命令行查詢
\d 數(shù)據(jù)庫 —— 得到所有表的名字
\d 表名 —— 得到表結(jié)構(gòu)
2、通過SQL語句查詢
"select * from pg_tables" —— 得到當(dāng)前db中所有表的信息(這里pg_tables是系統(tǒng)視圖)
"select tablename from pg_tables where schemaname='public'" —— 得到所有用戶自定義表的名字(這里"tablename"字段是表的名字,"schemaname"是schema的名字。用戶自定義的表,如果未經(jīng)特殊處理,默認都是放在名為public的schema下)
postgresql 允許設(shè)置多個字段為值唯一的約束。
使用 pgAdmin 4 設(shè)置起來很方便。而且在 postgresql 6.5.1 是默認安裝就具備的工具。
首先找到你要設(shè)置約束的表
鼠標右鍵選擇屬性
選擇強制約束
點擊 + 號 新增一個約束
輸入內(nèi)容,選擇要設(shè)置的字段
最后點擊 保存按鈕
字段值唯一約束就建立成功了。
之后你就會發(fā)現(xiàn),除非是空值,否則你設(shè)置的字段內(nèi)是不會有重復(fù)值的。
由于 PostgreSQL 是大小寫敏感的,并默認對SQL語句中的數(shù)據(jù)庫對象名稱轉(zhuǎn)換為小寫,因此如果你在創(chuàng)建數(shù)據(jù)庫對象時指定了大小寫混和的對象名稱,那么在通過SQL語句訪問 這些對象時,必須使用雙引號(")將數(shù)據(jù)庫對象括起來,以提示 PostgreSQL 不用幫你轉(zhuǎn)換對象名為小寫,否則將激發(fā)“xxxxx對象不存在”的異常,譬如您的數(shù)據(jù)庫中有名為 TUser 的表,您在 PostgreSQL 自帶的圖形化查詢工具中必須使用類似這樣的查詢語句才能正確執(zhí)行:SELECT * FROM "TUser",當(dāng)然它對 SQL 標準中的保留字和關(guān)鍵字是不區(qū)分大小寫的,所以寫成 select * From "TUser" 這樣也是完全可以的。
另外,PostgreSQL 對數(shù)據(jù)也是大小寫敏感的,這點與 SQLServer 不同(SQLServer 默認是不敏感的),譬如在 TUser 表中有字段 Name,其中有一行 Name 字段值為“Tony Tang”的記錄,如果直接使用
SELECT * FROM "TUser" WHERE "Name" LIKE '%tony%';
是查詢不到這條記錄的,不過你可以這么寫:
SELECT * FROM "TUser" WHERE UPPER("Name") LIKE '%TONY%';
呵呵,是不是覺得這樣不太好看,而且擔(dān)心性能會受影響?幸好 PostgreSQL 提供了關(guān)鍵字 ILIKE 來幫我們解決這個問題,這真是個非常有趣的關(guān)鍵字(I like),對于第一種寫法只需要將 LIKE 替換成 ILIKE 就可以了。
最后,建議在編寫 SQL 腳本的時候,使用單引號做字符串常量的標識,雖然在 MS SQLServer 中雙引號和單引號均可作為字符串常量的標識符,但是在 PostgreSQL 中對此就有嚴格的功能區(qū)分(不能用雙引號作為字符串常量的標識符),為了保險起見,建議對所有的數(shù)據(jù)庫對象名均使用雙引號(")將其顯式約定,以保證大小 寫的嚴格匹配。
您好,很高興為您解答。
首先,修改geometry_columns表中對應(yīng)字段的SRID為新的坐標系ID;
其次,修改beijing_highway表的定義,將enforce_dims_the_geom的定義的(st_srid(the_geom) = (-1))刪除(注:此處the_geom是空間字段);
然后更新數(shù)據(jù)內(nèi)容 update table_name set the_geom = st_geomfromtext(ST_AsText(the_geom),4326)(注:此處4326為數(shù)據(jù)的坐標系ID);
最后,將enforce_dims_the_geom的定義(st_srid(the_geom) = (4326))加回去就可以變更SRID了。
如果是從一個坐標系向另外一個坐標系調(diào)整,就需要進行坐標系的變換了。這時候可能會意識到,字段是只能增加,也就是插入。
采用postgis函數(shù)將墨卡托投影變成4326并插入空間數(shù)據(jù)庫
QuanGuo=#?insert?into?test?values(1,'hahaha',st_transform(st_geomfromtext('POINT
(10070507.650288?4282901.6281314)',900913),4326));
INSERT?0?1
QuanGuo=#?select?astext(location)?from?test;
astext
------------------------------------------
POINT(-104.987?39.739)
POINT(-104.955?39.739)
POINT(10?10)
POINT(10070507.650288?4282901.6281314)
POINT(90.4649094109628?35.8711162526031)
(5?rows)
QuanGuo=#
如若滿意,請點擊右側(cè)【采納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望采納!
~?O(∩_∩)O~
使用數(shù)據(jù)庫postgresql的時候,有時會遇到字段長度擴展的情況,由于之前已經(jīng)有數(shù)據(jù)了,所以只能修改字段長度,不能通過刪除再增加的方式。
可以使用如下方式進行
通過上面的一句話就可以把你的表中相應(yīng)的字段的長度修改為3000.
補充:PostgreSQL字符類型長度變更的性能