补充: Oracle中的序列
转载:http://onlylovexue.iteye.com/blog/266990
Oracle中的序列号顾名思义就是创建一个序列号,可以在插入或者更新的时候调用,相当于是一个生成器
创建语法:
create sequence myse
increment by 1 --增长度
start with 1 --从哪里增加,就是说下一个获取的值从这个值开始
nomaxvalue --不设置最大值 对应的:maxvalue 30、
order --指定一定往下增加
nocycle --不循环,CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环
cache 10 --CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能
修改:
序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法如下:
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
需注意:
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
删除:
DROP SEQUENCE order_seq;
问题: studend 表的主键 是sid,我们插入一条数据时候,是由外部程序控制的,也就是说你无法避免外部程序插入相同主键的数据,从而造成错误。
解决方式:
1.如果你是Oracle数据库,你可以采用数据库命令来创建一个 序列,然后主键使用这个 序列 来创建记录,而不依赖外部程序显示的设置 student.setSid(一个数字);
步骤:
a.在oracle的控制台使用命令行的方式创建序列:创建了一个studentPKSquence 序列,它从1开始,每次增加1
craeate sequence studentPKSquence start with 1 increment by 1
b.改写student.xml,插入一个记录,主键由序列控制
<insert id="addStudentBySequence" parameterClass="Student">
<!-- 序列的返回值是int类型,并且序列夹在sid属性上,对应数据库 sid列 -->
<selectKey resultClass="int" keyProperty="sid">
select studentPKSquence.nextVal from dual
</selectKey>
insert into student values (#sid#,#sname#,#major#,#birth#,#score#)
</insert>
c.测试
StudentDAO studentDAO=new StudentDAOImpl();
Student student=new Student();
student.setSid(1234);
student.setSname("胡晓亮3");
student.setMajor("哈哈");
student.setScore(98);
student.setBirth(new Date(System.currentTimeMillis()));
studentDAO.add(student);
d.结果
数据库中多了一条记录,即使你使用了student.setSid(1234); 来设置主键的值也不起作用,而主键的值设置成了自动通过序列产生的主键值 select studentPKSquence.nextVal from dual
注意:Student 对象 如果加上了带参数的构造方法,以上运行将会出错,出错原因是累实例化错误,由于ibatis利用的也是反射,这里也告诉我们反射动态创建对象利用的是类的默认的构造方法,如果类中有带参数的构造方法,你必须显示的给出类的无参构造方法,然后利用反射动态创建对象的时候才不会出错。
2.如果你是Mysql数据库,你可以auto_increment 主键自动增长
a.当你在外部构造记录的时候如果你现实的调用的student.setSid(1234);那么数据库中的记录就是你设置的值,如果你们有调用student.setSid();那么插入到数据库中的记录的主键则会根据当前的值自动增长。。
3.如果你是sqlserver数据库: identity(1,1) primary key not null 主键自动增长
分享到:
相关推荐
创建表通常有两种方式:一是使用SQL Server企业管理器的表设计器,二是直接编写Transact-SQL语句。例如,以下是一个简单的表定义: ```sql CREATE TABLE employee ( employee_id char(4) NOT NULL, employee_name...
- **SQL基本概念**:通过第一章介绍SQL的基础概念,为后续章节的学习打下坚实的基础。 - **简单查询**:学习如何构建简单的SELECT语句来检索数据。 - **多表查询(JOIN)**:讲解如何通过JOIN操作来合并多个表的数据...
#### 第8章 子查询 **8.1 子查询入门** - **单值子查询** - 返回单个值。 - **列值子查询** - 返回多行单列数据。 **8.2 SELECT列表中的标量子查询** - 在`SELECT`列表中嵌套查询。 **8.3 WHERE子句中的标...
### SQL语句教程知识点详解 #### 一、SELECT语句 **定义与作用:** - `SELECT` 是SQL中最常用的语句之一,主要用于从数据库表中检索数据。 - **基本语法**: ```sql SELECT column_name FROM table_name; ``` - ...
2 执行生成SQL脚本 179 7-1-3 执行SQL脚本文件 181 7-2 收缩数据库 182 7-3 数据库备份与还原 185 7-3-1 备份模式 185 7-3-2 数据库备份 186 7-3-3 数据库备份设置实例 189 7-3-4 数据库...
第8章 Transact-SQL语法基础…………….207 8-1 Transact-SQL 表达式 208 8-1-1 数学表达式 208 8-1-2 字符串表达式 209 8-1-3 比较表达式 209 8-1-4 逻辑表达式 210 8-1-5 表达式的优先级 210 8-2 ...
#### 第8章 在 C# 中使用嵌入 SQL 访问 SQL Server 数据库 - **8.1 嵌入式 SQL 应用程序开发环境** - 讨论如何在 C# 环境下开发 SQL 应用程序。 - **8.2 嵌入式 SQL 数据类型** - SQL 数据类型与 C# 类型之间的...
#### 八、SQL语句中AS的用法和作用 - **8.1 AS是别名关键字** - **用途**:在SQL查询中为表或列指定别名,提高查询结果的可读性。 - **示例**:`SELECT column1 AS ColumnName FROM table;` #### 九、T-SQL语法...
8. 第三方工具:数据库文档生成器是第三方软件的一个例子,它们通常提供额外的功能和便利,补充官方数据库管理系统的不足。在选择这类工具时,要考虑其功能、稳定性、支持情况以及是否符合项目需求。 总的来说,...
8. **Reporting Services**:SQL Server 2008的Reporting Services提供了强大的报表生成和分发功能。学习如何设计和发布交互式报表,以及如何配置报表服务器。 9. **Integration Services**:这是数据集成和ETL...
### SQL与PL/SQL知识点详解 #### 一、资料库基本概念 - **数据库管理系统(DBMS)**:Oracle数据库管理系统是一种关系型数据库管理系统(RDBMS),它使用SQL作为查询语言,支持多种数据类型、安全性特性以及事务...
本教程聚焦于EJB 3,特别是第10讲,主要讲解如何开发单表映射的实体Bean。在本篇详细解答中,我们将深入探讨EJB 3中的实体Bean及其与数据库单表映射的关系。 首先,实体Bean是EJB的一种类型,代表业务逻辑中的持久...
本文将详细介绍一个SQL分页的存储过程,该过程能够根据输入参数动态生成SQL查询语句,实现分页功能。 #### 二、存储过程定义 此存储过程名为 `PrcPager`,其定义如下: ```sql CREATE PROCEDURE PrcPager @...
- **SQL Server**:支持自动增长列(`IDENTITY`),通常用于主键生成。 - 示例:`CREATE TABLE Table_Name (ID INT IDENTITY(1,1) PRIMARY KEY, Name NVARCHAR(50));` - **Oracle**:使用序列(sequence)来实现自动...
### PL/SQL 生成日期维度表 #### 一、创建日期维度表 在数据库系统中,日期维度表是数据仓库中的一个关键组成部分,用于存储与日期相关的各种属性,以支持复杂的查询和分析需求。以下是对如何使用 PL/SQL 创建一个...
《SQL Server实用教程 第五版 课件 (郑阿奇)》是一套全面介绍SQL Server数据库管理系统的教学资源,由知名讲师郑阿奇编著。本教程针对SQL Server的第五个主要版本,提供了深入浅出的讲解,适合数据库原理课程学习...
《SQL权威指南》第四版是数据库管理领域的一本经典之作,专为那些希望深入理解和熟练掌握SQL语言的读者而设计。这本书全面覆盖了SQL的各个方面,包括基础语法、查询优化、事务处理、存储过程以及高级特性和应用。...
#### 第八部分:操作数据 - **数据操作语句**:包括INSERT、UPDATE和DELETE等用于增删改查数据的基本操作。 - **插入语句**:向表中添加新的记录。 - INSERT VALUES:显式指定要插入的值。 - INSERT SELECT:从一...