• 序列-索引-约束


    序列-索引-约束

    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;

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

    数据库结束。

  • 相关阅读:
    微信小程序 如何让button按钮长度变为100%
    使用%在搜索框中进行模糊查询
    vsCode中输入wx没有提示?
    uniapp的页面的生命周期:onLoad、onShow、onReady
    MySQL报错:1130Host 'LAPTOPJRI45NVC' is not allowed to connect to this Mysql server
    URLEncoder和URLDecoder
    super和this
    把MIT的算法课程看一遍
    单节点hadoop部署成功
    suse的ssh服务
  • 原文地址:https://www.cnblogs.com/lchh/p/9343262.html
Copyright © 2020-2023  润新知