1、把主键定义为自动增长标识符类型
在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:
create table customers(id int auto_increment primary key not null, name varchar(15));
insert into customers(name) values("name1"),("name2");
select id from customers;
以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值。最后查询表中id字段,查询结果为:
id
1
2
由此可见,一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。
在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如:
create table customers(id int identity(1,1) primary key not null, name varchar(15));
insert into customers(name) values("name1"),("name2");
select id from customers;
查询结果和mysql的一样。由此可见,一旦把id设为identity类型,MS SQLServer数据库会自动按递增的方式为主键赋值。identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。
在DB2中,如果把表的主键设置为:
UserID integer not null generated always as identity (start with 1,increment by 1),
2、从序列中获取自动增长的标识符
1、序列定义
ORACLE:
CREATE SEQUENCE <sequence_name>
INCREMENT BY <integer>
START WITH <integer>
MAXVALUE <integer> / NOMAXVALUE
MINVALUE <integer> / NOMINVALUE
CYCLE / NOCYCLE
CACHE <#> / NOCACHE
ORDER / NOORDER;
DB2:
CREATE SEQUENCE <sequence-name>
AS data-type 默认 As Integer
START WITH <numeric-constant>
INCREMENT BY <numeric-constant> 默认 INCREMENT BY 1
MINVALUE <numeric-constant> | NO MINVALUE 默认 NO MINVALUE
MAXVALUE <numeric-constant> | NO MAXVALUE 默认 NO MAXVALUE
NO CYCLE | CYCLE 默认 NO CYCLE
CACHE <numeric-constant> | NO CACHE 默认 CACHE 20
NO ORDER | ORDER 默认 NO ORDER
2、序列取值
取下一个值:
ORACLE: 序列.NEXTVAL
DB2: NEXTVAL FOR 序列 或 NEXT VALUE FOR 序列
取当前值:
ORACLE: 序列.CURRVAL
DB2: PREVIOUS VALUE FOR 序列 或 PREVVAL FOR 序列
3、序列设置开始值
ORACLE:取得下一个值;先设置步长(下一个值 与 设置的开始值之间差);取得下一个值;再把步长修改成原来值
DB2:ALTER SEQUENCE 序列名 RESTART WITH 下一值
4、修改
ORACLE:
修改最大值 ALTER SEQUENCE <sequence_name> MAX VALUE <integer>
修改最小值: ALTER SEQUENCE <sequence_name> MIN VALUE <integer> (此值需要比当前值小)
修改步长: ALTER SEQUENCE <sequence_name> INCREMENT BY <integer>;
修改CACHE值: ALTER SEQUENCE <sequence_name> CACHE <integer> | NOCACHE
修改循环属性: ALTER SEQUENCE <sequence_name> <CYCLE | NOCYCLE>
修改排序属性:ALTER SEQUENCE <sequence_name> <ORDER | NOORDER>
DB2:
修改最大值: ALTER SEQUENCE <sequence_name> MAX VALUE <numeric-constant> | NO MAXVALUE
修改最小值: ALTER SEQUENCE <sequence_name> MIN VALUE <numeric-constant> | NO MINVALUE (此值需要比当前值小)
修改步长: ALTER SEQUENCE <sequence_name> INCREMENT BY <numeric-constant>;
修改CACHE值: ALTER SEQUENCE <sequence_name> CACHE <numeric-constant> | NO CACHE
修改循环属性: ALTER SEQUENCE <sequence_name> <CYCLE | NO CYCLE>
修改排序属性:ALTER SEQUENCE <sequence_name> <ORDER | NO ORDER>
从新计数: ALTER SEQUENCE <sequence_name> RESTART | RESTART WITH <numeric-constant>
5、DROP
ORACLE: DROP SEQUENCE <sequence_name>;
DB2: DROP SEQUENCE <sequence_name>;
6、例句
CREATE SEQUENCE JOBSHOW_SEQ
AS INTEGER
CACHE 20
MAXVALUE 999999
ORDER;
CREATE SEQUENCE JOBWORK_SEQ
AS INTEGER
CACHE 20
MAXVALUE 999999
ORDER;
CREATE SEQUENCE YN_SEQ
AS INTEGER
MAXVALUE 99999999;
select yn_seq.nextval from YNZP_JOB_JOBINFO
select nextval for KFCMCC_SEQ from sysibm.sysdummy1
分享到:
相关推荐
而Hibernate提供了跨数据库的主键生成策略,例如`native`策略,它会根据底层数据库自动选择合适的主键生成方式(如MySQL的自动增长ID或Oracle的序列)。 在JPA中,通过`@GenericGenerator`注解可以定义主键的生成...
5. **sequence**: 使用数据库的序列生成主键,适用于DB2、PostgreSQL、Oracle、SAP DB、McKoi和Interbase。 6. **hilo**: 使用Hi-Lo算法,需要一个数据库表来存储生成的主键。不适用于JTA环境或自定义数据库连接。 ...
- **定义**:采用数据库提供的主键生成机制,例如 DB2、SQL Server 和 MySQL 中的主键生成机制。 - **应用场景**:适用于大多数现代关系型数据库,这些数据库通常提供了内置的自动增长字段功能,可以高效地生成主键...
1. **increment**:此策略对long、short或int类型的字段生成自动增长的主键。主键值按数值顺序递增。但这种方法存在并发问题,如果多实例访问同一数据库,可能导致主键重复。 2. **identity**:适用于SQL Server、...
- `INCREMENT BY`: 指定序列值的增长步长。 - `NO MAXVALUE`: 没有最大值限制。 - `CYCLE`: 达到最大值后从最小值重新开始。 - `CACHE`: 预先分配的序列值数量。 序列对象可以使用任何整数数据类型,包括 `...
- **支持数据库**:适用于`DB2`、`PostgreSQL`、`Oracle`、`SAPDB`和`McKoi`等支持序列的数据库。对于`Interbase`数据库,则使用`generator`来实现类似功能。 - **应用场景**:适用于数据量大且对性能要求较高的情况...
表可以通过主键和外键来关联,形成数据库的逻辑结构。理解如何设计和组织数据结构对于有效利用数据库至关重要。 三、创建表和视图 创建表是数据库设计的第一步,通过`CREATE TABLE`语句定义表的结构。视图则是一种...
当设置`strategy=GenerationType.IDENTITY`时,实体的主键将由数据库自动生成,这通常适用于支持自动增长字段的数据库,如HSQL、SQL Server、MySQL、DB2和Derby等。这种方式简洁高效,但需要数据库级别的支持。 第...
为此,本文提出了一种全新的、独立于业务逻辑和数据库平台的自增数字序列生成方法,旨在解决在不支持序列的数据库中进行大数据分表时可能遇到的主键冲突问题。 #### 方法概述 该方法的核心思想是引入一张独立的...
- 不支持数据库的序列功能,因此在Oracle、DB2等支持序列特性的数据库上不可用。 **应用场景:** - 单机环境或多个应用实例共享同一个Session Factory的场景。 #### 4. Identity(自增) **简介:** Identity策略...
- **Sequence**:适用于支持序列的数据库,如Oracle和DB2,需要在映射文件中配置。 - **Identity**:依赖于数据库的自动增长功能,如MySQL的`auto_increment`或SQL Server的`Identity`。 **缓存管理** Hibernate...
3. **Increment**:对于支持序列(Sequence)的数据库,如Oracle、DB2等,可以选择此方式。这种策略下,每次插入新记录时,主键值会自动递增,但由于依赖于特定的数据库特性,因此不适合多进程并发场景。 4. **...
- **sequence**:基于数据库序列(sequence)生成主键。 - **table**:使用数据库表来存储和管理主键的值。 - **hilo**:使用“high-low”算法生成主键。 ##### 持久化对象的三种状态 了解对象的状态有助于更好地...
`Sequence`是一种适用于支持序列操作的数据库系统(如DB2和Oracle)的ID生成策略。通过创建一个序列对象,每次调用序列的`NEXTVAL`方法即可获取一个新的唯一值。示例代码如下: ```sql CREATE SEQUENCE seq_name ...
- **sequence**:针对Oracle、DB2等支持序列的数据库。 - **uuid**:生成128位的UUID字符串主键。 **Configuration类** `Configuration`类是Hibernate的核心组件,它负责管理和加载配置信息,包括数据库连接参数...
- **适用数据库**:MySQL、SQL Server、DB2等支持自动增长特性的数据库。 - **配置示例**: ```xml ``` #### 4. Sequence - **定义**:利用数据库的序列(sequence)特性生成主键值。 - **适用数据库**:...
- Hibernate定义了多种数据类型和主键生成策略,如assigned(手动指定)、increment(自动递增)、identity(数据库自增长)、sequence(数据库序列)、native(根据数据库类型自动选择)、uuid(128位UUID)、...
- **identity**: 使用数据库自身的自动增长机制,适用于 MySQL, SQL Server, DB2 等数据库。 - **sequence**: 使用序列生成主键,适用于 Oracle, PostgreSQL 等数据库。 - **native**: 根据不同的数据库自动选择合适...
- **序列、同义词**:介绍序列和同义词的功能及使用场景,如自动增长的序列号、跨模式引用的对象名称等。 - **PL/SQL**:学习Oracle的程序化语言PL/SQL,包括变量、控制结构、异常处理等基本语法,以及如何编写存储...