序列-索引-约束

序列-索引-约束

1.序列

序列:也是数据库对象之一,作用是生成一系列的数字,序列常与某张表的主键字段提供值使用。

序列的创建:

--序列的创建
  CREATE SEQUENCE SEQ_NUM_2
  START WITH 1
  INCREMENT  BY 2

START WITH:开始的值。

INCREMENT BY :步长。

序列中的函数:

A:NEXTVAL(获取序列的下一个值   第一个值获取的是START WITH 后面的值是START WITH+INCREMENT 每次加步长一次 )

例:

SELECT SEQ_NUM_1.NEXTVAL
  FROM DUAL;

B:CURRVAL(获取调用NEXTVAL后得到的最后一个值  注意新创建的序列至少调用一次NEXTVAL才可以调用CURRVAL)

例:

 SELECT SEQ_NUM_1.CURRVAL
  FROM DUAL;

案例:使用序列为主键插入值。

INSERT INTO EMP
(EMPNO,ENAME,JOB,SAL)
VALUES
(SEQ_NUM_2.NEXTVAL,‘LUKK‘,‘DRIVER‘,9999)

结果如下:

重要操作:删除序列(DROP SEQUENCE   序列名)

2.索引

索引:索引是数据库对象之一,索引是为了提高查询效率。

索引的统计与应用都是数据库自动完成的,只要数据库认为可以使某个已创建的索引时就会自动应用。

索引的操作:

A:创建索引

--创建索引
CREATE INDEX IND_EMP_1 ON EMP(EMPNO);
SELECT EMPTNO,ENAME,SAL FROM EMP
WHERE EMPNO=10
--复合索引
CREATE INDEX IND_EMP_2 ON EMP(EMPNO,sal);
--给类似这种操作时系统就会自动应用索引
SELECT EMPTNO,ENAME,SAL FROM EMP
ORDER BY EMPNO,SAL;
--给函数添加索引
CREATE INDEX IND_EMP_1 ON EMP(UPPER(ENAME));
--给类似这种操作时系统就会自动应用索引
WHERE UPPER(ENAME)=‘KING‘;

当你类似于这种操作时,数据库会自动应用索引。

B: 修改索引(经常操作索引就会不准确,所以定期需要重建索引)

--修改索引
ALTER INDEX IND_EMP_1  REBUILD;

C:删除索引(索引不合理时,不需要时)

--删除索引
DROP INDEX IND_EMP_1 ;

合理使用索引:

1.不要在小表中建立索引。

2.删除很少被使用,不合理的索引。

3.为经常为经常出现在WHERE子句中 列创建索引。

4.为经常作表的连接条件的列创建索引。

5.不要经常作DML操作的表上建立索引。

3.约束

约束:约束是在数据表上强制执行的一些数据校验规则,当执行DML操作时,数据必须符合这些规则 ,如果不符合,无法执行。

约束条件可以保证表中数据完整性,保证数据间的商业逻辑。

A.非空约束

创建非空约束

--创建非空约束
CREATE TABLE EMPLOYEES(
EID NUMBER(6),
NAME VARCHAR2(30) NOT NULL,
SALARY NUMBER(7,2),
HIREDATE DATE
CONSTRAINT EMPLOYEES_HIRED NOT NULL        );

    修改表时添加非空约束

--修改表时添加非空约束
ALTER TABLE EMPLOYEES
MODIFY(EID NUMBER(6)NOT NULL);
DESC EMPLOYEES;

    取消非空约束(设置成null就好)

--取消非空约束
ALTER TABLE EMPLOYEES
MODIFY(EID NUMBER(6) NULL);

  B.唯一性约束(用于保证字段或字段组合不出现重复值)

当给表中某个字段定义类唯一性约束条件,该列的值不允许重复,但允许是NULL

--唯一性约束
CREATE TABLE EMPLOYEES1(
EID NUMBER(6) UNIQUE,
NAME VARCHAR2(30),
EMAIL VARCHAR2(50),
SALARY NUMBER(7,2),
HIREDATE DATE,
CONSTRAINT EMPLOYEES_EMAIL_UK UNIQUE(EMAIL)
);

测试:

--测试唯一性
INSERT INTO EMPLOYEES1
(EID,EMAIL)
VALUES
(null,null)

结果:

NULL值被允许。

在表被建立后 添加唯一性约束条件:

ALTER TABLE EMP
ADD CONSTRAINT EMP UNIQUE(ENAME);

     C.主键约束

一个表只有一个主键 非空且唯一。给需要的字段后面加PRIMARY KEY;

在创建表时添加主键约束:

--主键约束
CREATE TABLE EMPLOYEES2(
EID NUMBER(6)PRIMARY KEY,
NAME VARCHAR2(30),
EMAIL VARCHAR2(50),
SALARY NUMBER(7,2),
HIREDATE DATE
);
--测试主键约束
INSERT INTO EMPLOYEES1
(EID)
VALUES
(8)

本次测试故意输入了 不符合的测试主键约束。

建立表后添加主键约束 :

ALTER TABLE EMP
ADD CONSTRAINT EMP PRIMARY KEY;

  D.外键约束

外键约束定义在两个表的字段或一个表的两个字段上,用于保证相关的两个字段关系。

这个用起来太痛了。太痛了。所以不用。

E.检查约束

检查(CHECK)约束条件用来强制在字段上的每个值都要满足CHECK中定义的条件。

--添加检查约束
ALTER TABLE EMPLOYEES2
ADD CONSTRAINT EMP_SAL
CHECK(SALARY>2000);
--违反约束条件
INSERT INTO EMPLOYEES2
(EID,SALARY)
VALUES
(10,1000)  
-违反约束条件
UPDATE EMPLOYEES2
SET SALARY=1888
WHERE EID=10;

这些违反约束条件的都会报错。

数据库结束。

原文地址:https://www.cnblogs.com/lchh/p/9343262.html

时间: 2024-10-07 10:23:06

序列-索引-约束的相关文章

Python for循环通过序列索引迭代

Python for 循环通过序列索引迭代: 注:集合 和 字典 不可以通过索引进行获取元素,因为集合和字典都是无序的. 使用 len (参数) 方法可以获取到遍历对象的长度. 程序: strs = "Hello World." # 使用 len 方法可以获取到遍历对象的长度. print(len(strs)) # 12 lst = [7,8,9,4,5,6] print(len(lst)) # 6 tup = (1,2,3,7,8,9) print(len(tup)) # 6 使用

数据库 day60,61 Oracle入门,单行函数,多表查询,子查询,事物处理,约束,rownum分页,视图,序列,索引

1.    oracle介绍 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一.比如SilverStream就是基于数据库的一种中间件.ORACLE数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能:作为一个关系数据库,它是一个完备关系的产品:作为分布式数据库它实现了分布式处理功能.但它的所有知识,只要在一种机型上学习

视图序列索引

视图名字一般是以"V_"开头 视图在SQL语句中体现的角色与表相同,但是视图并不是一张真实存在的表,而只是对应一个 select语句的查询结果集,并将其当做表看待而已,使用视图的目的就是简化sql语句的复杂度,重用子查询,限制数据访问 视图对应的子查询中的字段若含有函数或者表达式,那么该字段必须指定别名.当师徒对应的子查询中的字段使用了别名,那么视图中该字段就用别名来命名 create view v_emp_10 as select empno,ename,sal,deptno fro

ddl语句和dml语句,创建序列和约束

DML insert: SQL> create table t1(x int, y char(1), z date); SQL> insert into t1(x, y, z) values (1, 'a', sysdate); SQL> insert into t1(x, z, y) values (2, sysdate+1, 'b'); SQL> insert into t1(x, y, z) values (1, null, sysdate); SQL> insert

oracle(9) 序列和约束

序列 SEQUENCE 也是数据库对象之一,作用:根据指定的规则生成一些列数字. 序列通常是为某张表的主键提供值使用. 主键:通常每张表都会有主键字段,该字段的值要求非空且唯一, 使用该字段来确定表中的每一条记录. CREATE SEQUENCE SEQ_EMP_ID_JIE START WITH 1 INCREMENT BY 1; CREATE SEQUENCE 序列名 [START WITH i] --第一个序列值是I --默认值1 [INCREMENT BY J]--步进是J,下一个值每次

Oracle 唯一 索引 约束 创建 删除

http://www.blogjava.net/lukangping/articles/340683.html/*给创建bitmap index分配的内存空间参数,以加速建索引*/ show parameter create_bit; /*改变索引的存储参数*/ alter index index_name pctfree 30 storage(initial 200k next 200k); /*给索引手工分配一个分区*/ alter index index_name allocate ext

oracle创建序列&索引&视图

---oracle学习 --oracle的管理系统学习 --oracle的数据管理学习 --oracle的用户管理 --oracle二维表管理 --oracle的其他知识 --oracle的序列,视图,索引 --oracle的分页查询 --oracle的数据库备份 --oracle的图形化界面操作 序列 1 --oracle的序列的学习 2 --创建序列 3 --使用 create sequence 序列名 4 --特点1:默认开始是没有值的,也就是指针指在了没有值的位置. 5 --特点2:序列

删除唯一性主键索引约束并重建

declare icount integer:=0; begin select count(1) into icount from user_ind_columns t, user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and upper(t.table_name) = 'Txxble' and upper(t.INDEX_NAME) ='PK_Txxble'; if icount

SQLServer 唯一键约束和唯一索引有什么区别?

以前也想了解到底有什么区别,但是搁着又忘记了,因为我们很少用唯一键约束.直到几天前同事给我个脚本来约束某个字段的唯一性,用的是唯一键约束,这问题又萦绕脑中了.看似有区别,又没发现什么大的区别!实际上也没多大区别,还是测试看看吧. USE [DemoDB] GO CREATE TABLE [dbo].[TableUniqueKey]( id int not null, name varchar(20) null ) GO CREATE TABLE [dbo].[TableUniqueIndex](