Oracle DB序列_MySQL

Jun 01, 2016 pm 01:28 PM
데이터 베이스

bitsCN.com

Oracle DB序列

 

序列是一个用于创建整数值的数据库对象。可以创建序列,然后再用其生成编号。

序列具有如下特点:

• 可以自动生成唯一编号

• 是一个可共享的对象

• 可用于创建主键值

• 替换应用程序代码

• 如果将序列高速缓存到内存中,则访问序列值的效率会有所提高

 

序列是用户创建的数据库对象,可由多个用户共享来生成整数。

可以通过定义一个序列来生成唯一值,或者回收编号后重新使用相同的编号。

序列的常见用途是创建主键值,每行的主键值必须是唯一的。序列由内部Oracle  例行程序按递增(或递减)方式生成。由于可以减少编写生成序列的例行程序所需的应用程序代码量,因此使用该对象可以节省一些时间。

序列号的存储和生成与表无关。因此,同一序列可以用于多个表。

 

CREATE SEQUENCE 语句:语法

定义一个可以自动生成序号的序列:

CREATE SEQUENCE sequence[INCREMENT BY n][START WITH n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE  n | NOCACHE}];
로그인 후 복사

通过使用CREATE SEQUENCE语句可以自动生成序号。

在该语法中:

sequence:是序列生成器的名称

INCREMENT BY n: 指定序列号之间的间隔,其中n 是一个整数(如果省略此子句,则序列按1 递增)

START WITH n: 指定要生成的第一个序列号(如果省略此子句,则序列从1 开始)

MAXVALUE n: 指定序列可以生成的最大值

NOMAXVALUE 指定10^27 作为递增序列的最大值,而-1 作为递减序列的最大值(这是默认选项)

MINVALUE n :指定最小的序列值

NOMINVALUE :指定1 作为递增序列的最小值,而-(10^26) 作为递减序列的最小值(这是默认选项)

创建序列

• 创建一个名为DEPT_DEPTID_SEQ的序列,将其用作DEPARTMENTS 表的主键。

• 不使用CYCLE选项。

sys@TEST0924> CREATE SEQUENCE dept_deptid_seq  2  INCREMENT BY 10  3  START WITH 120  4  MAXVALUE 9999  5  NOCACHE  6  NOCYCLE  7  ;Sequence created.
로그인 후 복사

CYCLE | NOCYCLE :指定在达到最大值或最小值之后,序列是否继续生成值(NOCYCLE是默认选项)

CACHE n | NOCACHE :指定Oracle Server 预先分配并保留在内存中的值的数量(默认情况下,Oracle Server 会高速缓存20 个值)

示例中创建了一个名为DEPT_DEPTID_SEQ的序列,用作DEPARTMENTS 表的DEPARTMENT_ID 列。该序列从120 开始,不允许高速缓存,也不进行循环。

请勿在序列用于生成主键值时使用CYCLE选项,除非有一个可靠的机制与序列循环相比可以更快地清除旧行。

注:序列与表没有关系。通常,应按序列的预期用途来命名序列。但是,序列可以在任何地方使用,而与其名称无关。

NEXTVAL和CURRVAL伪列

• NEXTVAL会返回下一个可用的序列值。每次被引用时NEXTVAL都会返回一个唯一值,即使对于不同用户也是如此。

• CURRVAL会获得当前序列值。

• 只有对序列发出NEXTVAL之后,CURRVAL才能包含值。

在创建一个序列之后,该序列会生成可以在表中使用的序号。通过使用NEXTVAL和CURRVAL伪列可以引用序列值。

NEXTVAL伪列用于从指定的序列中提取连续的序列号。必须用序列名来限定NEXTVAL。

在引用sequence .NEXTVAL 时,就会生成新的序列号,还会将当前的序列号放在CURRVAL中。

CURRVAL伪列用于引用当前用户刚刚生成的序列号。但是,必须先用NEXTVAL在当前用户的会话中生成一个序列号,然后才能引用CURRVAL。必须用序列名来限定CURRVAL。

在引用sequence .CURRVAL 时,会显示返回给用户进程的最后一个值。

使用NEXTVAL和CURRVAL的规则

可以在下列上下文中使用NEXTVAL和CURRVAL:

• 不是子查询一部分的SELECT 语句的SELECT 列表

• INSERT 语句中子查询的SELECT 列表

• INSERT 语句的VALUES 子句

• UPDATE 语句的SET 子句

不能在下列上下文中使用NEXTVAL和CURRVAL:

• 视图的SELECT 列表

• 带有DISTINCT 关键字的SELECT 语句

• 带有GROUP BY 、HAVING 或ORDER BY 子句的SELECT 语句

• SELECT 、DELETE 或UPDATE 语句中的子查询

• CREATE TABLE或ALTER TABLE 语句中的DEFAULT表达式

使用序列

• 在位置ID 2500 中插入一个名为“Support”的新部门:

sys@TEST0924> INSERT INTO hr.departments(department_id, department_name,location_id)  2  VALUES  (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.
로그인 후 복사

它使用DEPT_DEPTID_SEQ序列生成280的新部门编号。

• 使用sequence_name.CURRVAL查看DEPT_DEPTID_SEQ序列的当前值:

sys@TEST0924> SELECT dept_deptid_seq.CURRVAL FROM dual;   CURRVAL----------       280
로그인 후 복사

假定现在要聘用某些雇员作为新部门的工作人员。在要对所有新雇员执行的INSERT语句中可以包含以下代码:

INSERT INTO employees (employee_id, department_id, ...)VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...);
로그인 후 복사

注:上面的示例假设已经创建一个名为 EMPLOYEE_SEQ的序列来生成新雇员编号。

高速缓存序列值

• 将序列值高速缓存在内存中,这样可以更快地对这些值进行访问。

• 在发生以下情况时,序列值会出现间断:

– 发生回退

– 系统崩溃

– 序列已用于其它表中

可以将序列高速缓存在内存中,以便于更快地对这些值进行访问。当首次引用序列时,序列值会被填充到高速缓存中。因此会从高速缓存序列中检索每次请求的下一个新序列值。用完最后一个序列值之后,就会在下一次请求序列时将序列的另一个高速缓存拖入到内存中。

序列中的间断

虽然序列生成器会发出没有间断的序号,但是此操作的发生与提交或回退有关。因此,如果你回退一条包含序列的语句,则会丢失相应的序号。

另一个可能导致序列出现间断的事件是系统崩溃。如果序列值已高速缓存在内存中,那么在系统崩溃时就会丢失一些值。

因为序列不直接与表相关联,所以同一序列可用于多个表。但是,如果同一序列用于多个表,则每个表的序号可能会有间断。

修改序列

更改增量值、最大值、最小值、循环选项或高速缓存选项:

sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq  2  INCREMENT BY 20  3  MAXVALUE 999999  4  NOCACHE  5  NOCYCLE;Sequence altered.
로그인 후 복사

如果序列达到MAXVALUE 限制,则序列不会再分配额外的值,此时你会收到一条错误消息,指明序列超出了MAXVALUE 。要继续使用该序列,可以使用ALTER SEQUENCE语句修改该序列。

语法

ALTER  SEQUENCE sequence[INCREMENT BY n ][{MAXVALUE  n | NOMAXVALUE}][{MINVALUE  n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE  n | NOCACHE}];
로그인 후 복사

在此语法中,sequence 是序列生成器的名称。

修改序列的准则

• 你必须是序列的所有者或拥有序列的ALTER权限。

• 修改只会影响以后生成的序列号。

• 如果要从另一编号处重新开始,则必须删除原有序列后重新创建。

• 在修改过程中会执行一些验证操作。

• 要删除序列,请使用DROP 语句:

sys@TEST0924> DROP SEQUENCE dept_deptid_seq;Sequence dropped.
로그인 후 복사

• 要修改一个序列,你必须是此序列的所有者或拥有序列的ALTER权限。要删除一个序列,你必须是此序列的所有者或拥有此序列的DROP ANY SEQUENCE权限。

• ALTER SEQUENCE 语句只会影响以后生成的序列号。

• 使用ALTER SEQUENCE 语句不能更改START WITH选项。如果要从另一编号处重新开始,则必须删除原有序列后重新创建。

• 在修改过程中会执行一些验证操作。例如,不能强制实施一个小于当前序列号的新MAXVALUE 。

ALTER SEQUENCE dept_deptid_seqINCREMENT BY 20MAXVALUE 90NOCACHENOCYCLE;• 错误:sys@TEST0924> ALTER SEQUENCE  dept_deptid_seq  2  INCREMENT BY 20  3  MAXVALUE 99  4  NOCACHE  5  NOCYCLE;ALTER SEQUENCE  dept_deptid_seq*ERROR at line 1:ORA-04009: MAXVALUE cannot be made to be less than the current value
로그인 후 복사

 


bitsCN.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Go 언어는 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 어떻게 구현합니까? Mar 27, 2024 pm 09:39 PM

Go 언어는 효율적이고 간결하며 배우기 쉬운 프로그래밍 언어입니다. 동시 프로그래밍과 네트워크 프로그래밍의 장점 때문에 개발자들이 선호합니다. 실제 개발에서 데이터베이스 작업은 필수적인 부분입니다. 이 기사에서는 Go 언어를 사용하여 데이터베이스 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. Go 언어에서는 일반적으로 사용되는 SQL 패키지, Gorm 등과 같은 타사 라이브러리를 사용하여 데이터베이스를 운영합니다. 여기서는 sql 패키지를 예로 들어 데이터베이스의 추가, 삭제, 수정 및 쿼리 작업을 구현하는 방법을 소개합니다. MySQL 데이터베이스를 사용하고 있다고 가정합니다.

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Hibernate는 어떻게 다형성 매핑을 구현합니까? Hibernate는 어떻게 다형성 매핑을 구현합니까? Apr 17, 2024 pm 12:09 PM

Hibernate 다형성 매핑은 상속된 클래스를 데이터베이스에 매핑할 수 있으며 다음 매핑 유형을 제공합니다. Join-subclass: 상위 클래스의 모든 열을 포함하여 하위 클래스에 대한 별도의 테이블을 생성합니다. 클래스별 테이블: 하위 클래스별 열만 포함하는 하위 클래스에 대한 별도의 테이블을 만듭니다. Union-subclass: Joined-subclass와 유사하지만 상위 클래스 테이블이 모든 하위 클래스 열을 통합합니다.

PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 Jun 04, 2024 pm 01:42 PM

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 HTML이 데이터베이스를 읽는 방법에 대한 심층 분석 Apr 09, 2024 pm 12:36 PM

HTML은 데이터베이스를 직접 읽을 수 없지만 JavaScript 및 AJAX를 통해 읽을 수 있습니다. 단계에는 데이터베이스 연결 설정, 쿼리 보내기, 응답 처리 및 페이지 업데이트가 포함됩니다. 이 기사에서는 JavaScript, AJAX 및 PHP를 사용하여 MySQL 데이터베이스에서 데이터를 읽는 실제 예제를 제공하고 쿼리 결과를 HTML 페이지에 동적으로 표시하는 방법을 보여줍니다. 이 예제에서는 XMLHttpRequest를 사용하여 데이터베이스 연결을 설정하고 쿼리를 보내고 응답을 처리함으로써 페이지 요소에 데이터를 채우고 데이터베이스를 읽는 HTML 기능을 실현합니다.

PHP에서 데이터베이스 연결 오류를 처리하는 방법 PHP에서 데이터베이스 연결 오류를 처리하는 방법 Jun 05, 2024 pm 02:16 PM

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

PHP를 사용하여 데이터베이스에서 중국어 왜곡 문자를 처리하기 위한 팁과 사례 PHP를 사용하여 데이터베이스에서 중국어 왜곡 문자를 처리하기 위한 팁과 사례 Mar 27, 2024 pm 05:21 PM

PHP는 웹사이트 개발에 널리 사용되는 백엔드 프로그래밍 언어로, 강력한 데이터베이스 운영 기능을 갖추고 있으며 MySQL과 같은 데이터베이스와 상호 작용하는 데 자주 사용됩니다. 그러나 한자 인코딩의 복잡성으로 인해 데이터베이스에서 잘못된 한자를 처리할 때 문제가 자주 발생합니다. 이 기사에서는 잘못된 문자의 일반적인 원인, 솔루션 및 특정 코드 예제를 포함하여 데이터베이스에서 중국어 잘못된 문자를 처리하기 위한 PHP의 기술과 사례를 소개합니다. 문자가 왜곡되는 일반적인 이유는 잘못된 데이터베이스 문자 집합 설정 때문입니다. 데이터베이스를 생성할 때 utf8 또는 u와 같은 올바른 문자 집합을 선택해야 합니다.

Golang에서 데이터베이스 콜백 함수를 사용하는 방법은 무엇입니까? Golang에서 데이터베이스 콜백 함수를 사용하는 방법은 무엇입니까? Jun 03, 2024 pm 02:20 PM

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.

See all articles