• orcal 前期基础


    1.数据库三大范式

    三大范式:
        数据库三大范式,也是数据库设计的准则
            是一种数据库设计思想,
            可以帮助数据设计人员,
            以一种非常好的思路和架构来设计数据库。
        
        1NF:原子性。也就是说表中任何一个列都是唯一的,不可再拆分的。
            如:
            多数国外项目中,R(id,name,age),其中name可以分为:first_name,last_name。
            所有此设计是不符合1NF的,应重新设计为:
            R(id,first_name,last_name,age)
            如:国内地址一栏,要分为省,市,区,详细地址
            
            注意:原子性也不是拆的越多越好,比如把年龄分成个位和十位,无意义
            
        2NF:在1NF的基础上,不存在非关键列部分依赖于关键列,也就是说所有非关键列部分都必须完全依赖于关键列。
            如:
            R(id,sname,cname,sore)
            值(1,张三,数学,90)
            由于以上不管是以哪一列作为关键列,都存在 其他 非关键列 部分依赖于 主关键列,
            所以此设计是不符合2NF,应该重新设计为:
            R1(sid,sname)存放学生信息的表
            R2(cid,cname)存放课程信息的表        
            R3(sid,cid,score)存放学生与课程考试成绩的中间表
               
        3NF:在2NF的基础上,不存在 非关键列传递函数 依赖于关键列,也就是说,所有的非关键列 都 必须 直接依赖于关键列
            如:
            如果A依赖于B,B依赖于C,我们就说A传递函数 依赖于C
            
            学生考入某所大学的信息表:
            R(sid,sname,uid,uname,uphone,address)
            
            如果以sid作为关键列,sname,uid是直接依赖于sid,
            但是uname,uphone,address这三列都是直接依赖于uid,
            所以此设计不符合3NF,应重新设计为:
            R1(sid,sname,uid)存放学生信息表
            R2(uid,uname,uphone,address)存放大学信息的表

    2.SQL的五大类语言

        DDL:数据定义语言
        DCL:数据控制语言
        DML:数据操纵语言
        DTL:数据事务语言
        DQL:数据查询语言

    3.DDL:数据定义语言

    DDL(data definition language):create ,drop,alert,rename to
          a. 创建表格分两步骤:
          第一步:定义列和数据类型
          第二种:添加约束
        b.数据类型分为四种,分别是:
          第一种:数字类型,可以做所有的数学运算
                number
                       number(4)代表整数,最大能存9999
                       number(7,2)代表double类型,整数长度为5,小数位2
              第二种:字符型,可以做拼接运算
                char20) 长度固定
                varchar2(20)  不定长,此处20表示字符串最长为20
                   注意:字符串在数据库中用''(单引号),一个汉字占两位
              第三种:日期类型,可以做加减运算
                date     年月日时分秒
                     time     时分秒
                     timestamp   年月日时分秒,还有小时位,如1.2秒
            第四种:大数据类型
                 clob character large object    大字符型对象,最大可存4G
                       blob binary large object    大二进制对象,最大可存4G   
                     注意:大数据类型不支持查看结果
    
          c。约束 constraint
                     作用:约束表格中是数据,相对于数据类型而言,用来进一步限定表 中的数据,        据都是合法有效的,符合业务需求的数据,不会出现无效数据.
    
              Oracle中的5种约束类型
        primary key    PK    
             含义    :主键约束,非空唯一(表中最多只能含有一个主键约束)
        not null 缩写 NN                
             含义:非空
        unique    缩写 UQ               
             含义:唯一
        check    缩写 CK                
             含义:自定义约束(往往用来定义业务的约束,如分数不能为负)                
        foreign key    FK                
             含义:外键约束(表示此列的值是引用自己的或其他表的主键)
        注意:能够被外键所引用的列,其本身也必须是主键约束或唯一性约束。
           
             d.创建表
                第一种方法:
        语法:
            create table 表名(
          列名 数据类型(默认值) 约束,
          列名 数据类型(默认值) 约束,
          列名 数据类型(默认值) 约束
             );  
             
          例:
          --创建用户表(无约束)
           create table tbl_user(
         id number(6),
         name varchar2(25),
         password varchar2(25)
             );
    
              
            注意:在创建表格时,如果不定义约束的名字,则数据库会给约束提供默认名字,
                   则数据库会给约束提供默认名字,并且把这些内容 存储到数据库字典中.
               添加约束名的语法:
        constraint 约束名 约束类型;
            约束名的命名规范:
        表名_列名_约束类型缩写;
    
            创建表格的第二种方法(根据已经存在的某张表创建一张新表格):
        --复制某张表中的指定列,构建一张新的表格(拷贝了数据)
        create table 新表格名 as select 列,列,列from原表格;
        例:创建一张表格,表格中只有s_emp表中的id,first_name,salary三列数据
        create table new_emp as select id,first_name,salary from s_emp;
        
        --复制了某张表格的指定列,构建一张新表格(不拷贝数据,取表结构)
        create table 新表格名 as select 列,列,列from原表格 where 恒假条件;
        例:创建一张表格,表格中只有s_emp表中的id,first_name,salary三列数据
        create table new_emp as select id,first_name,salary from s_emp where 1=2;
        注意:此处1=2表示恒false,则数据库不会被拷贝,只能得到一张空表
          e.添加约束的2中方法:
        1.列级语法添加——边定义,边添加约束
        如:创建用户表
    
        2.【重点】表级语法添加——先定义列,然后在添加约束
        --创建账户表(tbl_account,id,accountNo非空唯一,realName,password六位数/默认值           000000,balance不能小于0)
        
        create table tbl_account (
                 id number(6),
                 accountNo number(6) not null,
                 realName varchar2(26) not null ,
                 password char(6) default '000000',
                 balance number(10,2),
                 
                constraints tbl_account_id_pk i primary key(id),
                 constraints tbl_account_accountNo_nn unique (accountNo),
                 constraints tbl_account_balance_ck check (balance>0)
                  );
        
            注意:not null不支持表级语法,只能支持列级语法添加。但是也可以采用check 模拟非空
        例:
        --创建账户表(tbl_account,id,accountNo非空唯一,realName,password六位数/默认值000000,balance不能小于0)
        
              create table tbl_account (
                 id number(6),
                 accountNo number(6) ,
                 realName varchar2(26) not null ,
                 password char(6) default '000000',
                 balance number(10,2),
                 
                constraints tbl_account_id_pk  primary key (id),
                constraints tbl_account_accountNo_ck  check (accountNo is not null) ,
                constraints tbl_account_accountNo_un  unique(accountNo) ,
                constraints tbl_account_balance_ck check (balance>0)
              );
    
           
        --创建员工表(自关联)
    
        create table p_emp(
            id number(6),
            name varchar2(25),
            title varchar2(25),
            salary number(10,2),
            start_date date,
            manager_id number(6),
            
            constraint p_emp_id_pk primary key (id),
            constraint p_emp_name_ck check(name is not null),
            constraint p_emp_title_ck check(title is not null),
            constraint p_emp_start_date_ck check(start_date is not null),
            constraint p_emp_manager_id_fk foreign key(manager_id) references e_emp (id)
            
            );
         
          删除表格(注意约束控制)
        基本语法:drop table 表名 [cascade constraints];
        注意:cascade constraints表示连带约束一起删除(暴力删除);如果不添加,当有外键引用,           不能删除。
            例:
            
          修改表格:
        --列相关
        1.添加列
        alter table 表名 add 列名 数据类型 [default默认值] 约束;
            例:--给tbl_user表添加一列年龄
            alter table tbl_user add age number(3) default 18 not null;
        
        2.删除列
        alter table 表名 drop column 列名;【注意关键字column】
            例:删除tbl_user表中age列
            alter table tbl_user drop column age;
            
        3.修改列(修改列数据类型和约束)
        alter table 表名 modify 原列名 新数据类型 新约束;
            例:修改tbl_user表中password列为char(6)默认值‘000000’非空
            alter table tbl_user modify password default'000000' not null;
            
        4.修改列名
        alter table 表名 rename column 原列名 to 新列名;
        --修改tbl_user表中password列名为pwd
        alter table tbl_user rename column password to pwd;
        
        
        
        
        
        --约束相关
        1.添加约束
        alter table 表名 add constraint 约束名 约束类型(列名)
            注意:如果是添加非空约束,则:
            alter table 表名 add constraint 表名_列名_nn check (is not null)
            
        注意:所有的DDL语句都是自动提交事务的,所以语句是不能回滚的
        2.删除约束
        alter table 表名 drop constraint 约束名;
        
        3.使约束生效
        alter table 表名 enable constraint 约束名
        
        4.使约束失效
        alter table 表名 disable constraint 约束名
        
    
          
    
    
    
         
          

    4.DML:数据操作语言

    DML(insert,update,delete)
    
    1.插入数据
    insert into 表名(列,列...)values(值,值...)
    //当插入的数据与表格一一对应时,列可以省略
    insert into 表名 values(值,值...)
    
    例如:--给tbl_user表中添加一条记录
    insert into tbl_user values (22,'刘强东','123456');
    
    
    2.更新数据
    update 表名 set 列=新值 where 条件;
    
    例如:--修改tbl_user表中第二行记录的用户名
    update tbl_user username = '章泽天' where id = 2;
    
    
    注意:修改操作千万要注意条件!!! 
    
    3.删除数据
    delete 表名 where 条件
    
    例如:删除用户表格第三行
    delete tbl_user where id = 4;
    
    --删除用户表格第三行的密码
    
    
    
    注意:此处不能违反约束
    
    --------------------------------------------
    DML语句和DDL语句的差别
    1.DML语句不会自动提交,也就是说当运行完DML语句后,数据库中真实的数据还没有发生变化,当前自己事务中看到的仅仅是内存中的情况,所以此时,另外一个事务是无法看到修改结果的。
    如果要把修改后的结果同步到数据库中,则必须手动使用如下命令:
    --提交数据,把内存中的数据提交同步到数据库中
    commit;
    
    即:一个事务无法读取到另一个事务还没有提交的数据!!!
    
    注意:plsql中默认情况下DML 语句会自动提交
    
    --回滚操作,撤销还没有提交的操作
    rollback 回滚点名字;
    
    --设置回滚点【不需要掌握】
    savepoint 回滚点名字
    
    2.DDL语句是自动提交的
  • 相关阅读:
    HDU 3586 二分答案+树形DP判定
    POJ 3140 树形DP
    POJ 1741 树的点分治
    POJ 1655 求树的重心
    CF 219D 树形DP
    HDU 2196树形DP(2个方向)
    HDU 1520 树形DP入门
    POJ 1159 Palindrome(最长公共子序列)
    树状数组 区间更新 区间查询
    HDU 1556 BIT区间修改+单点查询(fread读入优化)
  • 原文地址:https://www.cnblogs.com/lxy151/p/7800287.html
Copyright © 2020-2023  润新知