一. docker 模式下进入数据库

ubuntu@jiang:~$ sudo docker ps -a
sudo: unable to resolve host jiang
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f096e625bcd3 oracleinanutshell/oracle-xe-11g "/bin/sh -c '/usr/sb…" About an hour ago Up About an hour /tcp, /tcp, 0.0.0.0:->/tcp compassionate_lamport ubuntu@jiang:~$ sudo docker exec -it f096e625bcd3 /bin/bash
sudo: unable to resolve host jiang
root@f096e625bcd3:/#

二.

1. 打开终端窗口并执行oraenv 命令以设置环境变量。

2. 执行以下语句以系统管理员身份连接到数据库:

sqlplus sys / <password> as sysdba;

3.默认情况下,HR模式已锁定。执行以下语句以解锁HR模式。

ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK; # 演示用户

4.行以下命令以连接到HR 模式:

  connect hr/hr

SQL> connect hr/hr
Connected.

5. DESCRIBE命令提供了一个指定的表或视图的描述。表和视图的描述包含以下信息:

  • 列名
  • 是否允许每列的空值(NULLNOT NULL
  • 列的数据类型,例如 DATENUMBER, VARCHAR2
  • 柱的精度,例如VARCHAR2(50)

语法:DESC [RIBE] <table >

执行以下命令以查看EMPLOYEES表的说明:

DESCRIBE EMPLOYEES;

SQL> desc employees
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NOT NULL NUMBER()
FIRST_NAME VARCHAR2()
LAST_NAME NOT NULL VARCHAR2()
EMAIL NOT NULL VARCHAR2()
PHONE_NUMBER VARCHAR2()
HIRE_DATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2()
SALARY NUMBER(,)
COMMISSION_PCT NUMBER(,)
MANAGER_ID NUMBER()
DEPARTMENT_ID NUMBER()

三.表操作

  查询表

1. select 语句

语法:SELECT {* | [DISTINCT] column | expression [alias],...} 
      FROM 
    <table>;

1). 查询表的所有数据

SELECT * FROM departments; //

SQL> SELECT * FROM departments;

DEPARTMENT_ID DEPARTMENT_NAME             MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
Administration
Marketing
Purchasing

2).  SELECT 语句中指定列名来显示表中的特定数据列

select JOB_ID,JOB_TITLE FROM jobs;

SQL> select JOB_ID,JOB_TITLE FROM jobs;

JOB_ID       JOB_TITLE
---------- -----------------------------------
AD_PRES President
AD_VP Administration Vice President

2. 限制数据

1. where

修改SELECT语句。执行以下查询以将行数限制为DEPARTMENT_ID 60:

SELECT *
FROM departments
WHERE department_id = ;

2.order by 排序子句

升序

SELECT  LAST_NAME, JOB_ID, HIRE_DATE
FROM employees
WHERE JOB_ID='SA_REP' ORDER
BY HIRE_DATE;

降序

SELECT  LAST_NAME, JOB_ID, HIRE_DATE
FROM employees
WHERE JOB_ID='SA_REP' ORDER
BY HIRE_DATE DESC;

三. 创建架构

示例:您将创建一个名为ONLINE_SHOPPE的模式。该模式描绘了一个与客户群和商品一起运营的在线商店。有关客户的信息存储在CUSTOMERS表中,有关商品的信息存储在COMMODITIES表中,订单详细信息存储在ORDERS表中。

1. 创建用户

  

  数据库管理员执行许多任务 其中一个更常见的任务是创建数据库用户并为其分配唯一的用户名。用户使用用户名和密码登录数据库后,可以发出数据库SQL语句来创建对象,查询对象和管理数据库。创建用户是一种创建模式的方法, 您将执行CREATE USER语句以创建和配置数据库用户。

语法:CREATE USER <USER> IDENTIFIED BY <password>;

1). 执行以下语句以管理员身份连接到数据库,并创建名为ONLINE_SHOPPE的用户。

CONNECT sys/<password> as sysdba;

CREATE USER online_shoppe IDENTIFIED BY online; //创建用户online-shoppe 密码为online

SQL>CREATE USER online_shoppe IDENTIFIED BY online;

User created.

在Oracle数据库中创建了名为ONLINE_SHOPPE的模式。

2. 分配权限

当多个用户访问数据库对象时,您可以使用特权控制对象的授权。权限控制用户是否可以修改另一个用户拥有的对象。通过以下方式授予或撤销它们:

      • 实例管理员
      • 具有ADMIN权限的用户
      • 对象的所有者

通常,有两种类型的权限:

      • 系统特权:对任何对象(例如表,视图和索引)执行特定操作的权限。只有实例管理员或具有ADMIN 权限的用户才能分配或撤消系统权限。
      • 对象权限对象执行特定操作或访问其他用户对象的权限。对象的所有者拥有该对象的所有对象权限,并可以将该对象的对象权限分配给其他数据库用户。

以下是一些基本的系统和对象权限:

系统权限:

      • 创建数据库中任何用户拥有的表,视图或索引
      • 更改数据库中的表,视图或索引
      • 删除数据库中的表,视图或索引

对象特权:

    • 将值插入表中
    • 为表创建外键依赖项
    • 从表中选择
    • 更新表格

您可以使用GRANT语句为用户和角色分配权限。要分配权限,必须为您分配ADMIN OPTION 或GRANT ANY PRIVILEGE系统特权。

语法:GRANT <grant_privilege> TO <user>;

1).

使用CREATE USER 语句创建用户时,默认情况下用户的权限域为空。管理员根据用户将来可能执行的任务为用户分配权限。ONLINE_SHOPPE 用户建立会话,创建表,并针对表写入DML语句。执行以下语句,为ONLINE_SHOPPE用户分配所需的权限:

GRANT CREATE SESSION to online_shoppe;
GRANT CREATE TABLE to online_shoppe;
GRANT UNLIMITED TABLESPACE to online_shoppe;
GRANT SELECT ANY TABLE to online_shoppe;
GRANT UPDATE ANY TABLE to online_shoppe;
GRANT INSERT ANY TABLE to online_shoppe;
GRANT DROP ANY TABLE to online_shoppe;
grant create any trigger to user_name;

2.创建表

ONLINE_SHOPPE 模式中创建表之前,您应该了解表和完整性约束的概念。

    • 表:数据库中数据存储的基本单位。在表中,数据存储在行和列中。您可以使用表名,一组列,数据类型和宽度定义表。

    • 完整性约束:表中列的规则。您可以指定这些规则以在定义它们的列中强制实施数据完整性。Oracle数据库的基本约束包括:

语法:CREATE TABLE [schema。] table 
          (column datatype [DEFAULT expr] [,...]);

执行以下步骤以在架构中创建CUSTOMERS, COMMODITIESORDERS表。

1). 连接到ONLINE_SHOPPE架构并创建CUSTOMERS表,并将CUSTOMER_ID 列作为主键。

 connect ONLINE_SHOPPE/online;  #连接到视图
CREATE TABLE customers(
customer_id VARCHAR2(),
customer_name VARCHAR2(),
address VARCHAR2(),
contact VARCHAR2(),
CONSTRAINT cust_id_pk PRIMARY KEY(customer_id) ); #customer_id作为主键约束,别名为cust_id_pk

2). 创建COMMODITIES与表COMMODITY_ID 列作为主键和UNIT_PRICE 列作为一个非空列。

CREATE TABLE commodities(
commodity_id VARCHAR2(),
commodity_name VARCHAR2(),
unit_price NUMBER(,) NOT NULL,
CONSTRAINT comm_id_pk PRIMARY KEY(commodity_id) );

3). 使用以下命令创建ORDERS表:

  • ORDER_ID列作为主键

  • COMMODITY_IDCUSTOMER_ID 作为外键

  • UNITSTOTAL_COSTNOT NULL

  • 检查数字列上的约束以接受大于零的值

CREATE TABLE orders(
order_id VARCHAR2(),
customer_id VARCHAR2(),
commodity_id VARCHAR2(),
units NUMBER(,) NOT NULL, #整数部分6位数,小数部分2位数
total_cost NUMBER(,) NOT NULL,
CONSTRAINT ordr_id_pk PRIMARY KEY(order_id),
CONSTRAINT ordr_cust_fk FOREIGN KEY (customer_id)REFERENCES customers(customer_id),
CONSTRAINT ordr_comm_fk FOREIGN KEY (commodity_id)REFERENCES commodities(commodity_id),
CONSTRAINT check_unit CHECK(units > ), #约束检查
CONSTRAINT check_totl CHECK(total_cost > ) );

3.插入,修改,删除记录

1).插入数据:执行INSERT 语句以将数据行添加到数据库表。

语法:INSERT INTO table [(column [,column ...])] 
         VALUES(value [,value ...]);

执行以下语句以将数据插入CUSTOMERSCOMMODITIESORDERS 表。

INSERT INTO customers VALUES ('C001', 'BDAVIS', 'Boston', '650.551.4876');
INSERT INTO customers VALUES ('C002', 'SSTEPHEN', 'ST.Louis', '650.501.9321');
INSERT INTO customers VALUES ('C003', 'DCARTER', 'California', '650.507.6632'); INSERT INTO commodities VALUES ('M001', 'DVD Player', );
INSERT INTO commodities VALUES ('M002', 'Cereal', );
INSERT INTO commodities VALUES ('M003', 'Scrabble', ); INSERT INTO orders VALUES ('R001', 'C003', 'M002', , );
INSERT INTO orders VALUES ('R002', 'C001', 'M003', , );
INSERT INTO orders VALUES ('R003', 'C003', 'M001', , );

2). 修改数据:使用UPDATE 语句修改数据库表中的数据行。执行以下语句将DVD播放器的单价从109美元更改为129美元:

UPDATE commodities SET unit_price = 129 WHERE commodity_name = 'DVD Player';

select * from commodities where UNIT_PRICE=;

3). 删除数据:使用DELETE 语句从数据库表中删除数据行。执行以下语句以删除ORDERS表中的第一条记录:

DELETE FROM orders WHERE order_id ='R001';

4.撤销和保存记录(事务)

1). 执行COMMIT语句以保存您在上一节中执行的数据操作事务。

承诺;

 

2). 执行以下语句以删除订单ID为R002的行,并查询ORDERS 表以确保删除该记录。

DELETE FROM orders WHERE order_id ='R002'; 
SELECT * FROM orders;

 


输出显示记录已成功删除。

3). 执行以下语句以撤消删除订单ID为R002的行,  并查询表以显示记录:

ROLLBACK; 
SELECT * FROM orders;

 

之前的DELETE语句已回滚。

注意:使用COMMIT 语句永久保存事务后,无法撤消事务。

5. 删除表

DROP TABLE 语句以从数据库中删除表及其数据

语法:DROP TABLE <table>;

1). 执行DROP TABLE语句以删除CUSTOMERS表。

DROP TABLE customers;

SQL> DROP TABLE ONLINE_SHOPPE.orders;
Table dropped.

由于CUSTOMER_ID 列上的引用完整性约束,将显示错误消息。

2).  包括CASCADE CONSTRAINTS子句以删除表及其参照完整性约束。

DROP TABLE customers CASCADE CONSTRAINTS;

6. 撤销权限

执行REVOKE 语句以撤消用户和角色系统特权。要撤消系统特权或角色,必须使用ADMIN OPTION为您分配特权。

1). 以SYS用户身份连接到数据库,并撤消ONLINE_SHOPPECREATE SESSION权限。

CONNECT sys/<password> as sysdba;
REVOKE CREATE SESSION FROM online_shoppe;

SQL> REVOKE CREATE SESSION FROM online_shoppe;

Revoke succeeded.

2). 以ONLINE_SHOPPE身份连接到数据库。

CONNECT online_shoppe/online;

您无法连接,因为您没有CREATE SESSION权限。

 

oracle 的使用的更多相关文章

  1. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  2. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...

  3. Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作

    Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...

  4. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  5. 使用Zabbix监控Oracle数据库

    Orabbix介绍 监控Oracle数据库我们需要安装第三方提供的Zabbix插件,我们先测试比较有名的Orabbix,http://www.smartmarmot.com/product/orabb ...

  6. 基于Oracle安装Zabbix

    软件版本 Oracle Enterprise Linux 7.1 64bit Oracle Enterprise Edition 12.1.0.2 64bit Zabbix 3.2.1 准备工作 上传 ...

  7. Oracle Database 12c Data Redaction介绍

    什么是Data Redaction Data Redaction是Oracle Database 12c的高级安全选项之中的一个新功能,Oracle中国在介绍这个功能的时候,翻译为“数据编纂”,在EM ...

  8. 使用Oracle官方巡检工具ORAchk巡检数据库

    ORAchk概述 ORAchk是Oracle官方出品的Oracle产品健康检查工具,可以从MOS(My Oracle Support)网站上下载,免费使用.这个工具可以检查Oracle数据库,Gold ...

  9. 利用Oracle RUEI+EM12c进行应用的“端到端”性能诊断

    概述 我们知道,影响一个B/S应用性能的因素,粗略地说,有以下几个大的环节: 1. 客户端环节 2. 网络环节(可能包括WAN和LAN) 3. 应用及中间层环节 4. 数据库层环节 能够对各个环节的问 ...

  10. 使用技术手段限制DBA的危险操作—Oracle Database Vault

    概述 众所周知,在业务高峰期,某些针对Oracle数据库的操作具有很高的风险,比如修改表结构.修改实例参数等等,如果没有充分评估和了解这些操作所带来的影响,这些操作很可能会导致故障,轻则导致应用错误, ...

随机推荐

  1. phpstorm 开发php入门

    环境:ubuntu  phpstorm apache mysql 一.安装软件 安装apache服务器 https://i.cnblogs.com/EditPosts.aspx?postid=1113 ...

  2. [BZOJ5407]girls

    也是CF985G... 容斥+三元环计数 CF数据太弱啦 vis没赋初值-1竟然过了QAQ 所以又调了我半个小时才搞掉QAQ 数数真难QAQ 记得要写#include<vector>!!! ...

  3. python在windows中运行文件

    "d:Program Files\python35\python.exe" hello.txt

  4. webpack CSS处理loader

    loader概念: 首先来介绍一下loader,之前我们用webpack来处理我们写的js代码,并且webpack会自动处理js之间相关的依赖.但是,在开发中我们不仅仅有基本的js代码处理,我们也需要 ...

  5. 【LeetCode 84】柱状图中最大的矩形

    题目链接 [题解] 维护一个单调递增的栈. 会发现栈内的第i个元素的前面一个(i-1)元素在原始的序列中的数字 都是要高于第i个元素的.(或者没有元素) 那么第i个元素往左最多可以扩展到第i-1个元素 ...

  6. 【Python】用python -m http.server 8888搭建本地局域网

    python -m http.server 8888 由于工作中经常会用到局域网中同事之间互传文件,当文件太大时,可以采用局域网ftp之类的方式进行传输. 这里采用python的一个服务,可以快速的搭 ...

  7. 【BZOJ2946&SPOJ1812】公共串(后缀自动机)

    题意:给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 单词的数量<=5,单词的长度至少为1,最大为2000. 思路: #include<bits/stdc++.h> us ...

  8. linux系统下jdk安装配置

    1.有jdk包(linux版) 2.放到linux系统下 3.建议在usr下新建jdk目录之后将jdk文件放到该目录下 3.配置系统信息   /etc/profile 需要配置的信息如下:#set j ...

  9. BUUCTF | 高明的黑客

    这一题一开始我没有理解"www.tar.gz"的涵义,还以为有一个其他的网站叫这个,后来才突然顿悟他也有可能是一个目录!!!地址栏输入”/www.tar.gz“ 然后就可以得到源码 ...

  10. 【ngx-ueditor】百度编辑器按下Shift键不触发contentChange事件

    背景:基于Angular 6,引入ngx-ueditor 发现现象:如果以Shift键+任意键结尾,则ngModel会丢失包含shift键的字符 例如:输入“ABC+AB++++”,则ngModel中 ...