찾다
데이터 베이스MySQL 튜토리얼MySQL/Oracle数据库的基础(二)

MySQL/Oracle数据库的基础(二)

Jun 07, 2016 pm 02:50 PM
mysqloracle베이스데이터 베이스

MySQL/Oracle数据库 Oracle数据库管理系统是管理数据库访问的计算机软件,由Oracle数据库与Oracle实例构成 Oracle数据库:一个相关的操作系统文件集合,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库。Oracle数据库必须要与内存实例合作,才能对外提供

MySQL/Oracle数据库

  • Oracle数据库管理系统是管理数据库访问的计算机软件,由Oracle数据库与Oracle实例构成
    • Oracle数据库:一个相关的操作系统文件集合,这些文件组织在一起,成为一个逻辑整体,即为Oracle数据库。Oracle数据库必须要与内存实例合作,才能对外提供数据管理服务。
    • Oracle实例:位于物理内存里的数据结构,它由操作系统的多个后台进程和一个共享的内存池所组成,共享的内存池可以被进程锁访问。
      • Oracle用它们来管理数据库访问
      • Oracle实例就是平常所说的数据库服务(service)
    • 实例可以操作数据库;在任何时刻一个实例只能与一个数据库关联,访问一个数据库;同一个数据库可由多个实例访问(RAC)
  • Oracle区别于MySQL的:
    • 在Oracle数据库中,使用NUMBER表示数字类型、DATE表示日期类型、VARCHAR2表示字符类型
  • 空值不同于0,凡是空值参与的运算,结果都为空(null),空值是无效的,未指定的
  • 别名的创建:(方式三)
  • 使用双引号”“,如:将别名原封不动的显示(尤其是别名由多个单词构成)

    <code>select employee_id "id",last_name "Name",12*salary "annual_sal"
    from employees;
    </code>
  • 连接符:

    • 把列与列,列与字符连接在一起
    • 用”||”来连接
    • 可以用来“合成”列
    • 如:

      <code>select first_name || ' ' || last_name from employees;
      </code>
  • 字符串:
    • 字符串可以是select列表中的一个字符、数字、日期
    • 日期和字符只能在【单引号】中出现
    • 每当返回一行时,字符串被输出一次
  • 使用distinct能够过滤掉重复的数据,如:

    <code>select distinct dept_id from empt;
    </code>
  • SQL语句与SQL*Plus命令:
    • SQL:一种语言、ANSI标准、关键字不能缩写、使用语句控制数据库中的表的定义和表中的数据。
    • SQL*Plus:一种环境、Oracle的特性之一、关键字可以缩写(如:edit(ed)、describe(desc))、命令不能改变数据库中的数据的值、集中运行
  • 数据库操作函数:

    • 单行函数

      • 单行函数分类:字符、数值、日期、转换、通用

        <code>单行函数:①操作数据对象;
                ②接收参数返回一个结果
                ③只对一行进行变换
                ④每行返回一个结果
                ⑤可以嵌套与转换数据类型
                ⑥参数可以是一列或一个值
        </code>
      • 字符函数:

        • 字符大小控制函数,如:

          <code>LOWER('HELLOWORLD')             //helloworld
          UPPER('hello')                  //HELLO
          initcap('helloWorld you')       //Helloworld You,首个字母大写
          </code>
        • 字符控制函数,如:

          <code>CONCAT('Hello', 'World')        //HelloWorld
          SUBSTR('HelloWorld',1,5)        //Hello
          LENGTH(('HelloWorld')           //10
          INSTR('HelloWorld','W')     //6
          LPAD(24000,10,'*')              //*****24000
          RPAD(24000,10,'*')              //24000*****
          TRIM('H' FROM 'HelloHWorldH')   //elloHWorld
          REPLACE('abcd','b','m')     //amcd
          </code>
      • 数值函数:

        • round:四射五入

          <code>round(45.926,2)     //45.93
          round(45.926,-1)    //50
          </code>
        • trunc:截断

          <code>trunc(45.926,2)     //45.92
          </code>
        • 求余:

          <code>MOD(1600,300)       //100
          </code>
      • 日期函数:
        • Oracle中的日期型数据实际含有两个值:日期和时间
          • 日期:函数sysdate返回
          • 两个日期相减返回日期之间相差的天数(但是不允许做加法运算)
        • MONTHS_BETWEEN:两个日期相差的月数
        • ADD_MONTHS:向指定日期中加上若干月数
        • NEXT_DAY:指定日期的下一个星期*对应的日期
        • LAST_DAY:本月的最后一天
        • ROUND:日期四舍五入
        • TRUNC:日期截断
      • 转换函数:

        • 隐性(Oracle自动完成下列转换)

          <code>VARCHAR2 or CHAR ---------------------> NUMBER
          VARCHAR2 or CHAR ---------------------> DATE
          NUMBER  ------------------------------> VARCHAR2
          DATE    ------------------------------> VARCHAR2
          </code>
        • 显性

          • DATA→to_char()→CHARACTER→to_date()→DATE

            <code>select to_char(sysdate,'yyyy-mm-dd') from dual;
            select to_date('1995-05-23', 'yyyy-mm-dd') from dual;
            //在用到字符时使用双引号,如:
            select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;
            </code>
          • NUMBER→to_char()→CHARACTER→to_number()→NUMBER

            <code>//1,234,567.890,'$999,999,999,999.999'表示美元,
            //'L999,999,999,999.999',表示当地货币符(L表示local)
            select to_char(1234567.89,'999,999,999,999.999') from dual;
            select to_number('Y001,234,567.89','L000,000,999.99') from dual;
            </code>

            在数值的转化中,to_char()函数经常使用的集中格式:

            <code> - 9:数字
             - 0:零
             - $:美元符
             - L:本地货币符号
             - .:表示小数点
             - ,:表示千位符
            </code>
      • 通用函数:

        • 该类函数适用于任何数据类型,同时也适用于空值
        • NVL(expr1,expr2):

          • 将空值转换成一个已知的值
          • 可以使用的数据类型有日期、字符、数值
          • 函数的形式:

            <code>NVL(commission_pct, 0)  //表示为当commission_pct为null时其值为0,否则等于commission_pct
            NVL(hire_date,'01-JAN-97')
            </code>
        • NVL2(expr1,expr2,expr3):expr1不为NULL,返回expr2;为NULL,返回expr3
        • NULLIF(expr1,expr2):相等返回NULL,不等返回expr1
        • COALESCE(expr1,expr2,…,exprn):如果第一个表达式为空,则返回下一个表达式,对其他的参数进行COALESCE.
          • COALESCE与NVL相比的优点在于COALESCE可以同时处理交替的多个值
      • 条件表达式:

        • 在SQL语句中使用IF-THEN-ELSE逻辑
        • 使用的两种方法:

          • case表达式:

            • 格式:

              <code>case expr when comparison_expr1 then return_expr1
                  [when comparison_expr2 then return_expr2
                  ...]
                  else else_expr
              end 
              </code>
            • 如:

              <code>select department_id,
              case department_id when 10 then salary*1.1
                                 when 20 then salary*1.2
                                 else salary*1.3
              end
              from employees
              where department_id in(10,20,30);
              </code>
        • decode函数:

          • 如:

            <code>select department_id,
            decode(department_id, 10, 1.1*salary,
                                  20,1.2*salary,
                                  30,1.3*salary)
            from employees;
            </code>
  • 嵌套组函数:

    • 如:显示各部门平均工资中的最大值

      <code>select max(avg(salary))
      from employees
      group by department_id;
      </code>
  • Oracle数据库子查询:

    • 子查询语法:

      <code>select select_list
      from table
      where expr operator(
          select select_list2
          from table2;        //table与table2可以是同一个表
      );
      </code>
    • 子查询在主查询之前一次执行完成,子查询的结果被主查询使用
    • 注意:

      <code>1.子查询要包括在括号内
      2.将子查询放在比较条件的右侧
      3.子查询中可以使用组函数
      4.子查询中要留意空值
      </code>
    • 单行子查询使用的单行比较操作符:

      <code>=、>、>=、(不等于)
      </code>
      • 如:

        <code>select salary,last_name
        from employees
        where salary > (select salary
                        from employees
                        where last_name='Abel');
        </code>
    • 多行子查询使用的多行操作符:

      <code>如:in、any(和子查询返回的某一个值比较)、all(和子查询返回的所有值比较)
      </code>
    • 综合子查询嵌套

      <code>            //查询平均工资最低的部门信息
      select *
      from departments
      where department_id = (select department_id
                             from employees
                             group by department_id
                             having avg(salary) = (select min(avg(salary))
                                                   from employees
                                                   group by department_id
                                                  )
                             )
      </code>
  • 创建和管理表(DDL)(create、alter、drop、rename、truncate)→操作皆不可回滚

    • Oracle数据库中的表

      • 用户定义的表

        • 用户自己创建并维护的一组表
        • 包含了用户所需的信息
        • 常用的查询字典命令:

          <code>select * from user_tables;  //查看用户创建的表有哪些
          select table_name from user_tables; //查看用户创建的表的表名
          select distinct object_type from user_objects;  //查看用户定义的各种数据库对象
          select * from user_catalog;     //查看用户定义的表,视图,同义词和序列
          </code>
      • 数据字典
        • 由Oracle Server自动创建的一组表
        • 包含数据库信息
    • 创建表的方式:

      • 方式一:直接创建空表

        <code>create table myemploy(
            id number(5),
            name varchar2(20),          //注意:定义字符串使用的是varchar2
            salary number(10,2),        //表示10位数据,其中两位是小数
            hire_date date
        );
        </code>
      • 方式二 :使用子查询创建表

        • 指定的列和子查询中的列要一一对应
        • 通过列名和默认值定义列

          <code>//方式二:从其他的表中抽取部分列生成新表
          create table empt
          as 
          select employee_id,last_name,salary,hire_date
          from employees;
          
          //注意,上表生成的信息会把原来的表中的数据也复制过来,若想不生成
          数据,则可加上不等的过滤条件,如:
              create table employee
              as 
              select employee_id,last_name,salary,hire_date
              from employees
              where 1=3;              //因为2不可能等于3,故创建的表为有相应结构而无数据的空表
          </code>
  • 数据处理(DML)(insert into、delete from、upddate、select)→操作可回滚

    • 插入数据的特殊方式:从其他表中拷贝数据,如:

      <code>insert into emp(employee_id,last_name,salary,hire_date)
      select employee_id,last_ame,salary,hire_date
      from employees
      where employee_id </code>
    • 创建脚本:在SQL语句中使用&变量指定列值,&变量放在values子句中,如:

      <code>//该插入方法是在执行语句后来添加数据的
      insert into emp(employee_id,last_name,salary,hire_date)
      values(&employee_id,'&last_name',&salary,&hire_date);
      </code>

      -update:update不加限制条件更新的是整个列的数据

    • 在update中,可以使用子查询时更新基于另一个表中的数据,如:

      <code>    upadate emp_copy
          set departmen_id = (select departmen_id
                              from employees
                              where employee_id = 20
                              )
          where job_id = (select job_id
                          from employees
                          where employee_id = 10
                          );
      </code>
    • 数据增删改查相关的操作
      • commit(提交):类似于文件保存
      • rollback(回滚):当操作数据不当时,可以通过回滚回到修改前的数据
    • 数据库事务:

      • 以第一个DML语句的执行作为开始
      • 以下面的其中之一作为结束:

        • commit或rollback语句

          <code>commit与rollback语句的优点:
              1.确保数据完整性
              2.数据改变被提交之前预览
              3.将逻辑上相关的操作分组
          在进行增删改操作时可以设置保存点,如:
                  savepoint A;
          在未commit之前,进行多步(增删改)操作后,可以直接通过保存点回滚到保存点处,如:
              rollback to savepoint A;
          注意:回滚只能在commit之前进行,在commit之后是无效的
          </code>
        • DDL语句(自动提交)
        • 用户会话正常结束
        • 系统异常终止
      • 提交或回滚前的数据状态
        • 改变前的数据状态是可以恢复的
        • 执行DML操作的用户可以通过delect语句查询之前的修正
        • 其他用户不能看到当前用户所做的改变,直到当前用户结束事物
        • DML语句所涉及到的行被锁定,其他用户不能操作
    • 数据库操作(增删改查)完成后最好执行commit。
  • Oracle数据库创建约束:

    • 非空约束(not null),如:

      <code>create table emp(
          id number(10) constraint emp_id_nn not null,    //emp_id_nn表示约束名
          name varchar(20),
          salary number(10,2)
      )
      </code>
    • 唯一约束(unique),如:

      <code>create table emp(
          id number(10) constraint emp_id_uq unique,  //列级约束,emp_id_uq约束名
          name varchar(20) constraint,
          salary number(20),
          phone number(11),
          //表级约束
          constraint emp_phone_uq unique(phone)       //括号内指明约束列
      )
      </code>
    • 主键约束(primary key),如:

      <code>create table emp(
          id number(5) constraint emp_id_pk primary key,
          name varchar(20),
          salary number(9,2)
          //或者使用表级约束
          //constraint emp_id_pk primary key(id)
      )
      </code>
    • 外键约束(foreign key):连接两个表,将两个表进行关联

      • foreign key:在表级指定子表中的列
      • references:标示在父表中的列
      • 如:

        <code>create table empt(
            id number(5),
            name varchar(20),
            salary number(7,2),
            dept_id number(5),
            constraint emp_dept_fk foreign key(dept_id) references depts(dept_id) 
        )
        create table depts(
            dept_id number(5),
            dept_name varchar(10),
            job_id number(3)
        )
        </code>
    • 删除数据时,父表中的列被删除时,子表(外键关联的)中对应的列也被删除
    • 添加约束的语法:

      • 使用alter table语句:

        <code>1.添加或删除约束,但是不能修改约束
        2.有效化或无效化约束
        3.添加not null约束要使用modify语句
        </code>
      • 格式:

        <code>alter table table_name
        add(drop...) [constraint constraint_name] type (column);
        </code>
      • 如:

        <code>//添加不为空
        alter table emp
        modify salary number(8,2) not null;
        //添加其他的约束
        alter table emp
        add constraint emp_uq unique(name);
        //删除约束
        alter table emp
        drop constraint emp_uq;
        //无效化约束
        alter table emp
        disable constraint emp_uq;
        //有效化(注意,enable的前提是约束所在的列不存在对应的约束问题)
        alter table emp
        enable constraint emp_uq;
        </code>
    • 查询约束:

      • user_constraints
      • 如:

        <code>//查询约束名、约束类型、约束条件
        select constraint_name,constraint_type,search_condition 
        from user_constraints
        where table_name='employees';   //''其内的表示表名
        </code>
      • 查询定义约束的列:

        • user_cons_columns
        • 如:

          <code>select constraint_name,column_name
          from user_cons_columns
          where table_name='employees';
          </code>
  • 视图:

    • 视图是一种虚表,视图建立在已有表的基础上
    • 向视图提供数据内容的语句为SELECT语句
    • 视图的优点:
      • 控制数据访问
      • 简化查询
      • 避免重复访问相同的数据
    • 视图中使用DML的规定

      • 可以在简单视图中执行DML操作
      • 当视图定义中包含以下元素之一时不能使用delete:
        • 组函数
        • group by子句
        • distinct关联字
        • rownum伪列(表示原来表中不存在的列)
      • 如:

        <code>create or replace view emp_view
        as select
        avg(salary) avg_sal from employees
        group by department_id;
        </code>
  • 序列:可供多个用户用来产生唯一数值的数据库对象

    • 自动提供唯一的数值
    • 共享对象
    • 主要用于提供主键值
    • 将序列值装入内存可以提高访问效率
    • 创建格式:

      <code>create sequence seq_name
      [increment by n]    //每次增长的数值
      [start wiht n]      //从哪个值开始
      [{maxvalue n | nomaxvalue}]
      [{minvalue n | nominvalue}]
      [{cycle | nocycle}]     //是否需要循环
      [{cache n | nocache}]   //是否缓存登录
      </code>
    • 如:

      <code>create sequence emp_seq
      increment by 5
      start with 2
      maxvalue 50
      cycle
      nochche;
      </code>
    • 序列的执行方法:

      <code>1.select emp_sql.nextval from dual; 
      2.select emp_sql.curval from dual;
      </code>
    • 注意:首次调用方法时,需要闲滴啊用nextval.
    • 序列的修改(不能修改初始值)

      <code>alter sequence seq_name
      increment by newval
      nomaxvalue
      ...;    
      </code>
    • 修改序列注意:
      • 1.必须是序列的拥有者或对序列有alter权限
      • 2.只有将来的序列值会被改变
      • 3.改变序列的’初始值’只能通过删除序列之后重新建序列的方法实现
      • 4.rollback是无法回滚序列的
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL 문자열 유형 : 스토리지, 성능 및 모범 사례MySQL 문자열 유형 : 스토리지, 성능 및 모범 사례May 10, 2025 am 12:02 AM

mysqlStringTypESmpactStorageAndperformanceAsfollows : 1) charisfixed, adlaysamestoragespace.

MySQL 문자열 유형 이해 : Varchar, Text, Char 등MySQL 문자열 유형 이해 : Varchar, Text, Char 등May 10, 2025 am 12:02 AM

mysqlstringtypesincludevarchar, text, char, enum, and set.1) varcharisversatileforvariable-lengthstringsupciedlimit.2) textisidealforlargetextStorage whithoudfinedlength.3) charisfixed, witableforconsistentDatalikecodes.4)

MySQL의 문자열 데이터 유형은 무엇입니까?MySQL의 문자열 데이터 유형은 무엇입니까?May 10, 2025 am 12:01 AM

mysqloffersvariousstringdatatatypes : 1) charfixed-lengthstrings, 2) varcharforvariable-lengthtext, 3) binaryandvarbinaryforbinarydata, 4) blobandtextforlargedata 및 5) enumandsetforcontrolledInput.achtolledinput.CheachorciCificusessandperististicatististicatististics

새로운 MySQL 사용자에게 권한을 부여하는 방법새로운 MySQL 사용자에게 권한을 부여하는 방법May 09, 2025 am 12:16 AM

TograntpermissionSt

MySQL에서 사용자를 추가하는 방법 : 단계별 가이드MySQL에서 사용자를 추가하는 방법 : 단계별 가이드May 09, 2025 am 12:14 AM

ToadDuserSinMySqleFeffectially, 다음에 따르면, 다음 사항을 따르십시오

MySQL : 복잡한 권한이있는 새 사용자 추가MySQL : 복잡한 권한이있는 새 사용자 추가May 09, 2025 am 12:09 AM

toaddanewuser와 함께 complexpermissionsinmysql, followthesesteps : 1) createShereuser'NewUser '@'localhost'Identifiedby'pa ssword ';. 2) grantreadaccesstoalltablesin'mydatabase'withgrantselectonmydatabase.to'newuser'@'localhost';. 3) GrantWriteAccessto '

MySQL : 문자열 데이터 유형 및 콜라주MySQL : 문자열 데이터 유형 및 콜라주May 09, 2025 am 12:08 AM

MySQL의 문자열 데이터 유형에는 char, varchar, binary, varbinary, blob 및 텍스트가 포함됩니다. 콜라이트는 문자열의 비교와 분류를 결정합니다. 1. 차량은 고정 길이 스트링에 적합하고 Varchar는 가변 길이 스트링에 적합합니다. 2. 이진 및 바이너리는 이진 데이터에 사용되며 Blob 및 텍스트는 큰 객체 데이터에 사용됩니다. 3. UTF8MB4_UNICODE_CI와 같은 정렬 규칙은 상류 및 소문자를 무시하며 사용자 이름에 적합합니다. UTF8MB4_BIN은 사례에 민감하며 정확한 비교가 필요한 필드에 적합합니다.

MySQL : Varchars에는 몇 개의 길이를 사용해야합니까?MySQL : Varchars에는 몇 개의 길이를 사용해야합니까?May 09, 2025 am 12:06 AM

가장 좋은 mysqlvarchar 열 길이 선택은 데이터 분석을 기반으로하고, 향후 성장을 고려하고, 성능 영향을 평가하고, 문자 세트 요구 사항을 기반으로해야합니다. 1) 일반적인 길이를 결정하기 위해 데이터를 분석합니다. 2) 미래 확장 공간을 예약하십시오. 3) 성능에 대한 큰 길이의 영향에주의를 기울이십시오. 4) 문자 세트가 스토리지에 미치는 영향을 고려하십시오. 이러한 단계를 통해 데이터베이스의 효율성과 확장 성을 최적화 할 수 있습니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음