当前位置:文档之家› oracle建表与简单查询

oracle建表与简单查询

oracle建表与简单查询
oracle建表与简单查询

一.常用数据库软件

?大型数据库

o Oracle Oracle是著名的Oracle(甲骨文)公司的数据库产品 , 它是世界上第一个商品化的关系型数据库管理系统 , 也是第一个推出和数据库结合的第四

代语言开发工具的数据库产品。Oracle 公司的软件产品丰富 , 包括 Oracle

服务器产品 , Oracle 开发工具和Oracle 应用软件。其中最著名的就是

Oracle 数据库 , 目前最新的版本是 Oracle11g。

o DB2 DB2 是 IBM 的关系型数据库管理系统 , DB2 有很多丌同的版本 , 可以运行在从掌上产品到大型机丌同的终端机器上。DB2 在高端数据库的主

要竞争对手是 Oracle。

o Sybase Sybase是美国Sybase公司研制的一种关系型数据库系统 , 是较早采用C/S 技术的数据库厂商 , 是一种典型的 UNIX 或 Windows NT 平台上客户

机/服务器环境下的大型数据库系统, 在国内大中型系统中具有广泛的应用。

?中小型数据库

o Sql Server Microsoft SQL Server 是运行在 Windows NT 服务器上 , 支持 C/S 结构的数据库管理系统。它采用标准 SQL 语言。? Mysql MySQL是一个小

型关系型数据库管理系统 , 开发者为瑞典 MySQL AB公司。在 2008年 1 月

16 号被 Sun 公司收购。而 2009 年 SUN 又被 Oracle 收购。

o Mysql MySQL 体积小、速度快、总体拥有成本低 , 尤其是开放源码 , 许多中小型网站为了降低网站总体拥有成本而选择了MySQL 作为网站数据库。

?小型数据库

Access Microsoft Office Access( 前名 Microsoft Access )是由微软发布的关联式数据

库管理系统 , 是 Microsoft Office 的成员之一。

二.RDBMS( Relational Database Management System )

关系型数据库管理系统是数据库软件中用来操纵和管理数据库的部分 , 用亍建立、使用和

维护数据库 , 简称 rdbms。它对数据进行统一的管理和控制 , 以保证数据的安全性和完整性。

三.SQL(Structured Query Language)

SQL( Structured Query Language )语言是用来在关系数据库上执行数据操作、检索及维护所

使用的标准语言 , 是一个综合的、通用的关系数据库语言。大多数数据库都使用相同或者

相似的语言来操作和维护数据库。SQL 语言可以用来查询数据 , 操纵数据 , 定义数据 , 控制

数据 , 使软件开发人员、数据库管理员都可以通过 SQL 语言对数据库执行特定的操作。四.DBA( Database Administrator )

数据库管理员

五.Table( 表 )

表是数据库存储的基本单元 , 对应亍现实世界中的实体对象 , 比如部门、职员等 , 表是一个二维结构 , 由行和列组成 , 横向为行(Row) , 也叫记(Record) , 用来表示实体的数据 , 比如一个职员的相关信息。纵向为列(Column) , 也叫作字段(Filed) , 用来表示实体的属性 , 比如职员的薪水。在软件开发技术比如Java中 , 现实世界的实体使用对象来描述 , 所以数据表和对象之间存在一种对应关系。数据表相当亍类(Class) , 数据表的行就是某个对象的实例(Instance) ,其中每个列都是对象实例的属性(Field)。

六.Oracle支持的数据类型

?数字

o number(n) 数字( 最长 n 位 )

o number(n , m) 浮点数( 总长 n 为 , 小数点后 m 位 )

o例:number(7,2) 表示最大数为 99999.99

?字符串

o char(n) 表示定长字符串( 方便查询 )最长放入 n 个字符 , 放入的数据如果不够 n 个字符则补空格 , 无论如何都占 n 个字符长度。

o varchar(n) 表示变长字符串( 节省空间 )最长放入 n 个字符 , 放入的数据是几个长度就占多大空间

o varchar2(n) Oracle 自己定义的变长字符串

?日期

o date 日期

?二进制

o BLOB 二进制数据最大长度4G

七.练习Sql语句

? 1.建表

--建表

-- 表名不能超过 30 个字符

-- 表名、列名是自由定义的

-- 所有的 SQL 语句都是以“ ; ”结尾

CREATE TABLE user_test(

id number(4),

password char(6),

name char(20),

phone char(11),

email varchar(20)

);

? 2.修改表格的列

alter table user_test modify email varchar(50);

?3插入数据

insert into user_test values(1001,'123456','张三','134**** ****','linglongxin24@https://www.doczj.com/doc/d24384562.html,');

*4. 查询数据

SELECT * from user_test;

? 5.数据准备

o创建部门表并插入数据

CREATE TABLE dept_test(

dept_id NUMBER(2),

dept_name CHAR(20),

dept_location CHAR(20)

);

desc dept_test;

INSERT INTO dept_test VALUES(10,'developer','beijing'); INSERT INTO dept_test VALUES(20,'account','shanghai'); INSERT INTO dept_test VALUES(30,'sales','guangzhou');

INSERT INTO dept_test VALUES(40,'operations','tianjin');

SELECT * FROM dept_test;

创建员工表并插入数据

CREATE TABLE emp_test(

emp_id NUMBER(4),

name VARCHAR(20),

job VARCHAR(20),

salary NUMBER(7,2),

bonus NUMBER(7,2),

hire_date DATE,

manager NUMBER(4),

dept_test_id NUMBER(2)

);

DESC emp_test;

SELECT * FROM EMP_TEST;

INSERT INTO emp_test VALUES(1001,'张无忌','Manager','10000 ','2000',TO_DATE('2010-01-12','yyyy-mm-dd'),1005,10); INSERT INTO emp_test VALUES(1002,'刘苍松','Analyst', 8000 , 1000 ,TO_DATE('2011-01-12','yyyy-mm-dd'),1001,10);

INSERT INTO emp_test VALUES(1003,'李翊' ,'Analyst',9000 , 1000 ,TO_DATE('2010-02-11','yyyy-mm-dd'),1001,10);

INSERT INTO emp_test VALUES(1004,'郭芙蓉','Programmer',500 0, NULL ,TO_DATE('2010-02-11','yyyy-mm-dd'),1001,10); INSERT INTO emp_test VALUES(1005 , '张三丰' , 'President' , 15000 , NULL ,TO_DATE('2008-02-15','yyyy-mm-dd'),NULL,20); INSERT INTO emp_test VALUES(1006 , '燕小六' , 'Manager' ,5 000 ,400 , '01-FEB-09' , 1005 , 20);

insert into emp_test values(1007 , '陆无双' , 'clerk' ,300

0 , 500 , '01-FEB-09' , 1006 , 20) ;

insert into emp_test values(1008 , '黄蓉' , 'Manager' ,500

0 , 500 , '1-MAY-09' , 1005 , 30) ;

insert into emp_test values(1009 , '韦小宝' , 'salesman' , 4000 , null , '20-FEB-09' , 1008 , 30) ;

insert into emp_test values(1010 , '郭靖' , 'salesman' ,45

00 , 500 , '10-MAY-09' , 1008 , 30) ;

SELECT * FROM emp_test;

6.练习基本查询语句

--计算员工的名字、月薪和年薪?

SELECT name,salary,salary*12 year_salary

FROM emp_test;

--计算员工的月收入?

--空值和任何数据做算数运算 , 结果为空(null)

--正确写法:如果 bunus 的值是 null , 则取 0

SELECT name,salary,bonus,salary+ nvl(bonus,0) month_salar

y

FROM emp_test;

--指定字段揑入值

INSERT INTO emp_test (emp_id,name) VALUES(1011,'于泽成');

--查询 emp_xxx 表 , 如果没有职位 , 显示'no position' , 如果有职位 , 显示员工的职位

SELECT name,NVL(job,'no positon') job

FROM emp_test;

--查询 emp_xxx 表 , 如果没有入职时间 , 显示为 2016-12-12 , 否则原样显示

SELECT name,NVL(hire_date,TO_DATE('2016-12-12','yyyy-mm-d d')) hire_date

FROM emp_test;

--连接字符串用CONCAT(str1,str2,...)和Oracle有区别,Oracle用||

SELECT emp_id,name||' job is '||job detail

FROM emp_test;

--复制表

CREATE TABLE emp_test2 AS SELECT * FROM emp_test;

SELECT * FROM emp_test2;

--DISTINCT注意:distinct 必须( 只能 )跟在 select 后边,distin ct 指所有列的唯一组合

--机构中有多少种职位?

SELECT DISTINCT job FROM emp_test;

--员工分布在哪些部门?

SELECT DISTINCT dept_test_id FROM emp_test;

--查询每个部门不重复的职位

SELECT DISTINCT job,dept_test_id FROM emp_test;

--薪水高亍 10000 元的员工数据?

SELECT * FROM emp_test WHERE salary>10000;

--职位是 Analyst 的员工数据?SQL 语句大小写丌敏感 , 数据大小写敏感

SELECT * FROM emp_test WHERE LOWER(job)='analyst';

--薪水大亍 5000 并且小亍 10000 的员工数据?>=<=;between and

SELECT * FROM emp_test WHERE salary>=5000AND salary<=100 00;

SELECT * FROM emp_test WHERE salary BETWEEN 5000AND1000 0;

--入职时间在 2011 年的员工?

--错误写法

SELECT * FROM emp_test WHERE hire_date=TO_DATE('2011','yy yy');

--正确写法

SELECT * FROM emp_test WHERE hire_date BETWEEN TO_DATE('2 011-01-01','yyyy-mm-dd') AND TO_DATE('2011-12-31','yyyy-m m-dd') ;

--列出职位是 Manager 或者 Analyst 的员工

SELECT * FROM emp_test WHERE job IN('Manager','Analyst');

--列出职位中包含有 sales 字符的员工数据?

SELECT * FROM emp_test WHERE LOWER(job) LIKE'%sales%';

--列出职位中第二个字符是 a 的员工数据?

SELECT * FROM emp_test WHERE LOWER(job) LIKE'_a%' ;

--查询数据库中有多少个名字中包含 'EMP' 的表?

SELECT COUNT(*) FROM USER_TABLES WHERE TABLE_NAME LIKE'% EMP%';

SELECT * FROM emp_test;

-- 查询哪些员工没有奖金?

SELECT * FROM emp_test WHERE bonus IS NULL;

--薪水丌在 5000 至 8000 的员工?

SELECT * FROM emp_test WHERE salary NOT BETWEEN 5000AND 8000;

--不是部门 20 和部门 30 的员工?

SELECT * FROM emp_test WHERE dept_test_id NOT IN(20,30);

insert into emp_test values(1012 , 'text_test' , 'salesma n' ,4500 , 500 , TO_DATE('2011-01-01','yyyy-mm-dd') , 100 8 , 30) ;

--如果要查询的数据中有特殊字符( 比如_或% ),

-- 在做模糊查询时 ,

-- 需要加上\符号表示转义 , 如果是Oracle并且用 escape 短语指明转义字符\mysql不用

SELECT name FROM emp_test WHERE name LIKE'%\_%'ESCAPE' \' ;

ORACLE项目2:关于创建表参数的详细说明

命令格式(红字为关键字,紫字为注释) CREATE TABLE“方案名”.“表名” (字段1 数据类型(长度), 字段2 数据类型(长度), ……., 字段n 数据类型(长度), CONSTRAINT约束名1 约束类型(约束参数), CONSTRAINT约束名2 约束类型(约束参数) ……… CONSTRAINT约束名n 约束类型(约束参数)) TABLESPACE “表空间名” STORAGE (INITIAL 1M*第一个区的大小*NEXT 1.5M*第二个区的大小* MINIEXTENTS 2 *创建时已分配的区数* MAXEXTENTS 5 *可分配最大区数* PCTINCREASE10 *每个区相对于上个区增长的百分比* BUFFER_POOL DEFAULT *其参数有DEFAUT,RECYCLE和KEEP*) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255; 要点释义 PCTFREE:指定表的每一个数据块为将来更新现有表行所保留的空间百分比。其值必须在0和99之间,默认值为10。 PCTUSED:指定维持表的每个数据块已用空间的最小百分比。当块中已用空间低于PCTUSED的时候,该块就成为新行插入对象。默认值40。 注意:PCTFREE和PCTUSED之和要小于100,两者结合可以确定是把新行插入现有数据块还是新块中。 INITRANS:分配给表的每一个数据块的并发事务条目的初值。范围1-255,默认1。通常不需要改变INITRANS值。 每个更新块的事务需要该块中的一个事务条目,事务条目大小取决于操作系统,该参数保证最小数目的并发事务可以更快,有助避免动态分配事务条目的开销。 MAXTRANS:可更新分配给表的数据块的最大并发事务数。范围1-255。默认255。一般不要更改MAXTRANS的值。 如果一个块中的并发事务超过了INITRANS的值,那么ORACLE在块中动态分配事务条目,直到超过MAXTRANS值。

oracle创建表与增删改

-- 数据准备:创建工资等级表 CREATE TABLE salgrade_test ( grade NUMBER (2), lowsal NUMBER (7, 2), hisal NUMBER (7, 2) ); -- 查看工资等级表结构 DESC salgrade; -- 查看工资等级表数据 SELECT * FROM salgrade_test; -- 插入数据 INSERT INTO salgrade_test VALUES (1, 10001, 99999); INSERT INTO salgrade_test VALUES (2, 8001, 10000); INSERT INTO salgrade_test VALUES (3, 6001, 8000); INSERT INTO salgrade_test VALUES (4, 4001, 6000); INSERT INTO salgrade_test VALUES (5, 1, 4000); -- 计算员工的薪水等级 SELECT NAME, salary, grade FROM emp_test, salgrade_test WHERE emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- ------------------------------------------------------SELECT NAME, salary, grade FROM emp_test

FULL JOIN salgrade_test ON emp_test.salary BETWEEN salgrade_test.lowsal AND salgrade_test.hisal; -- 复制表:只复制结构 , 不复制数据 CREATE TABLE salgrade_copy AS ( SELECT * FROM salgrade_test WHERE 1 <> 1 ); SELECT * FROM salgrade_copy; -- 复制表:复制一部分数据----通过设置别名的方式 , 指定新表中的列名(year_sal) CREATE TABLE emp_test_copy AS ( SELECT emp_id, NAME, salary * 12 year_sal FROM emp_test WHERE dept_test_id = 10 ); SELECT * FROM emp_test_copy; -- 复制表:复制一部分数据 -- 新表中的列名 CREATE TABLE emp_count (did, emp_num) AS ( SELECT dept_test_id, COUNT (*) FROM emp_test GROUP BY dept_test_id ); SELECT * FROM emp_count; -- 创建一个同 emp 表结构相同的空表 , 将部门号为 10 的员工信息放入该表 -- 如果有一张表 emp 的数据量为一百万条 , 此时需要建立 1 张测试表只放入少量测试数据( 如 100条 ) , 执行步骤如下所示: -- 第 1 步创建一个空表 CREATE TABLE emp_copy AS (

oracle创建表

CREATE TABLE DEPT(id NUMBER(7),name VARCHAR2(25)); 2、将Departments表中数据插入到DEPT表中 SELECT * FROM HR.DEPARTMENTS; INSERT INTO DEPT(ID,NAME) SELECT * FROM DEPARTMENTS; CREATE TABLE EMP (id NUMBER(7),last_name VARCHAR2(25),first_name VARCHAR2(25),dept_id NUMBER(7)); 4、修改EMP表,允许输入更长(50)员工的姓氏(LAST_NAME) ALTER table EMP modify(last_name varchar2(50)); 5、在数据字典中确认DEPT表和EMP表的创建结果 DESCRIBE dept; DESCRIBE emp; 6、根据表Employees的结构创建表Employees2表,仅包含EMPLOYEE_ID、FIRST_NAME、 LAST_NAME、SALARY和DEPARTMENT_ID。将新表中的各列分别命名为EMPLOYEE_ID、FIRST_NAME、LAST_NAME、SALARY和DEPT_ID CREATE TABLE employees2 as SELECT employee_id,first_name,last_name,salary,department_id dept_id FROM employees; 7、删除EMP表 HR> drop table emp; 8、将EMPLOYEES2表重命名为EMP HR> alter table employees2 rename to emp; 9、删除表EMP的FIRST_NAME列,并确认

Oracle 建表(一对多)代码及相关约束示例

建表(一对多)代码及相关约束 create table t_class( c_id number(3) primary key, c_name varchar2(20) not null ); create table t_stu( s_id number(5) primary key, s_name varchar2(8) not null, sex char(2) default '男', birthday date, school_age number(2) check(school_age>0), school_score number(5,2), c_id number(3), id_card char(18) unique, foreign key(c_id) references t_class(c_id) ); 附:测试数据: insert into t_class values(1,'订单班'); insert into t_class values(2,'开发班'); insert into t_class values(3,'美工班'); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (1, 'a', '男', to_date('01-01-1980', 'dd-mm-yyyy'), 24, 90, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (2, 'b', '男', to_date('11-05-1981', 'dd-mm-yyyy'), 23, 80, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (3, 'c', '女', to_date('19-09-1982', 'dd-mm-yyyy'), 22, 50, 1, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD) values (4, 'd', '女', to_date('28-01-1984', 'dd-mm-yyyy'), 21, 80, 2, null); insert into T_STU (S_ID, S_NAME, SEX, BIRTHDAY, SCHOOL_AGE, SCHOOL_SCORE, C_ID, ID_CARD)

oracle 查看用户、权限、角色

查看用户、权限、角色的命令和视图 a 1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户系统权限: select * from dba_sys_privs; select * from session_privs; select * from user_sys_privs; 3.查看用户对象权限: select * from dba_tab_privs; select * from all_tab_privs; select * from user_tab_privs; 4.查看所有角色: select * from dba_roles; 5.查看用户所拥有的角色: select * from dba_role_privs; select * from user_role_privs; b 概述 与权限,角色相关的视图大概有下面这些: DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限 USER_SYS_PRIVS: 查询当前用户所拥有的系统权限 SESSION_PRIVS: 查询当前用户所拥有的全部权限 ROLE_SYS_PRIVS:查询某个角色所拥有的系统权限 注意: 要以SYS用户登陆查询这个视图,否则返回空. ROLE_ROLE_PRIVS: 当前角色被赋予的角色 SESSION_ROLES: 当前用户被激活的角色 USER_ROLE_PRIVS: 当前用户被授予的角色 另外还有针对表的访问权限的视图: TABLE_PRIVILEGES ALL_TAB_PRIVS ROLE_TAB_PRIVS: 某个角色被赋予的相关表的权限 oracle与用户角色权限相关的视图 Oracle 本身的数据字典设计我个人觉得很合理, 因为DBA_xxx, ALL_xxx,USER_xxx 让人一看大概就知道这个视图是干什么用的. 本文简要总结了一下与权限,角色相关的视图. 一. 概述 与权限,角色相关的视图大概有下面这些: 1、DBA_SYS_PRIVS: 查询某个用户所拥有的系统权限。 2、USER_SYS_PRIVS: 查询当前用户所拥有的系统权限。

oracle 创建create user 及授权grant 查看登陆的用户

oracle 创建create user 及授权grant 查看登陆的用户: 以下都可以: show user; select sys_context('userenv','session_user') from dual; select user from dual; 查看所有登录的用户必须为DBA 用户: select username from v$session; sys、system等DBA 用户查看其他用户(test)中的对象(表): SQL> select * from test.student; 创建一个普通用户都把该用户用起来的流程: 1、创建用户 SQL>create user test indentified by test; 这样就创建了一个用户名密码都为test的用户 但这个时候test还是不能登陆成功的,我们需要赋予相应的权限 2、赋予create session的权限 SQL>grant create session to test; 这样test用户就能成功登陆进去 但是此时用户还是不能创建表我们需要赋予用户创建表的权限: SQL>grant create table to test; 但是用户此时还不能创建表因为需要有使用表空间的权限(相当于用户有了进房间的钥匙但是没有进大门的钥匙。。。) 所以也应该赋予相应的权限 SQL>grant unlimited tablespace to test; 这个时候用户就拥有了创建表的权限由于表是用户test的相应的他就拥有了对创建的表的增删查改的权限了 3、查看用户拥有什么权限可以通过查询一个系统的视图(数字字典) SQL>select * from user_sys_privs; 这样就可以知道当前用户的权限 4、撤销权限 SQL> revoke create table from test; ----------------------------- 一些常用视图的区分 dba_tables dba_all_tables user_tables user_all_tables all_tables

oracle创建表基础

?VARCHAR2(size)和NVARCHAR2(size):变长字符型数据。 首先,该数据类型存储变长的字符数据,在使用该数据类型定义数据时,该数据的存储区大小是不固定的,依据存储数据的长度进行动态分配存储区。参数size是该变量存储的最大的字符数,该值最大为4000。size的最小或默认值都是1。一般在定义该数据类型时,都要指定该长度值,即指定size值。NVARCHAR2(size)的不同之处在于它支持全球化数据类型,支持定长和变长字符集。 ?CHAR(size) NCHAR(size):定长字符型数据 该数据类型一旦定义,则存储该变量的存储区的大小就固定下来。显然在存储区分配上它没有VARCHAR2(size)和NVARCHAR2(size)数据类型具有动态性,但是在实际中,如果可以预测到一个变量存储的字符数量,且数量不是很大,则最好还是使用定长字符型数据来定义该变量,这样可以提高存储的效率。因为使用变长字符型数据要不断的计算存储的数据长度,再分配存储数据块,会消耗计算资源。定长字符型数据的最小值和默认值都为1个字符,而最大值为2000。NCHAR(size)的不同之处在于它支持全球化数据类型,支持定长和变长字符集,此时定长字符型数据的最小和默认值都为1个字节。 ?DATE:日期型数据 ORACLE服务器使用7个定长的存储区存储日期型数据,它可以月,年,日,实际,时,分和秒。日期型数据的取值范围从公元前4712年1月1日到公元9999年12月31日。 ?NUMBER(P,S):数字型数据。 参数p指十进制数的中长度,s为该十进制数小数点后的位数,如NUMBER(10,2)表示该数字型数据的中长度为10位,而小数后为2为。其中参数p的最大值为38,最小值为1,而参数s的最大值为124,最小值为-84。

如何查看oracle用户具有的权限和角色

如何查看oracle用户具有的权限和角色 上次有同学问我,如何查看一个oracle用户具有的权限和角色,我一时没答上来,回头好好研究了一下,记录一下,备查: 1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs; 3.查看角色(只能查看登陆用户拥有的角色)所包含的权限 sql>select * from role_sys_privs; 4.查看用户对象权限: select * from dba_tab_privs; select * from all_tab_privs; select * from user_tab_privs; 5.查看所有角色: select * from dba_roles; 6.查看用户或角色所拥有的角色: select * from dba_role_privs; select * from user_role_privs; 7.查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限) select * from V$PWFILE_USERS 比如我要查看用户wzsb的拥有的权限: SQL> select * from dba_sys_privs where grantee='WZSB';

GRANTEE PRIVILEGE ADMIN_OPTION ------------------------------ ---------------------------------------- ------------ WZSB CREATE TRIGGER NO WZSB UNLIMITED TABLESPACE NO 比如我要查看用户wzsb的拥有的角色: SQL> select * from dba_role_privs where grantee='WZSB'; GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE ------------------------------ ------------------------------ ------------ ------------ WZSB DBA NO YES 查看一个用户所有的权限及角色 select privilege from dba_sys_privs where grantee='WZSB' union select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='WZSB' );

Oracle tablespace创建参数

Oracle tablespace创建参数 ORACLE中,表空间是数据管理的基本方法,所有用户的对象要存放在表空间中,也就是用户有空间的使用权,才能创建用户对象.否则是不充许创建对象,因为就是想创建对象,如表,索引等,也没有地方存放,Oracle会提示:没有存储配额.因此,在创建对象之前,首先要分配存储空间. 分配存储,就要创建表空间: 创建表空间示例如下: CREATE TABLESPACE "SAMPLE" LOGGING DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO 上面的语句分以下几部分: 第一: CREATE TABLESPACE "SAMPLE" 创建一个名为 "SAMPLE" 的表空间. 对表空间的命名,遵守Oracle 的命名规范就可了. ORACLE可以创建的表空间有三种类型: (1)TEMPORARY: 临时表空间,用于临时数据的存放; 创建临时表空间的语法如下: CREATE TEMPORARY TABLESPACE "SAMPLE"...... (2)UNDO : 还原表空间. 用于存入重做日志文件. 创建还原表空间的语法如下: CREATE UNDO TABLESPACE "SAMPLE"...... (3)用户表空间: 最重要,也是用于存放用户数据表空间 可以直接写成: CREATE TABLESPACE "SAMPLE" TEMPORARY 和 UNDO 表空间是ORACLE 管理的特殊的表空间.只用于存放系统相关数据. 第二: LOGGING 有 NOLOGGING 和 LOGGING 两个选项, NOLOGGING: 创建表空间时,不创建重做日志. LOGGING 和NOLOGGING正好相反, 就是在创建表空间时生成重做日志. 用NOLOGGING时,好处在于创建时不用生成日志,这样表空间的创建较快,但是没能日志,数据丢失后,不能恢复,但是一般我们在创建表空间时,是没有数据的,按通常的做法,是建完表空间,并导入数据后,是要对数据做备份的,所以通常不需要表空间的创建日志,因此,在创建表空间时,选择NOLOGGING,以加快表空间的创建速度. 第三: DATAFILE 用于指定数据文件的具体位置和大小. 如: DATAFILE 'D:\ORACLE\ORADATA\ORA92\LUNTAN.ora' SIZE 5M

Oracle-基本建表语句

--创建用户 create user han identified by han default tablespace users Temporary TABLESPACE Temp; grant connect,resource,dba to han; //授予用户han开发人员的权利 --------------------对表的操作-------------------------- 创建表格语法: create table 表名( 字段名1 字段类型(长度) 是否为空, 字段名2 字段类型是否为空 ); -增加主键 alter table 表名 add constraint 主键名 primary key (字段名1); -增加外键: alter table 表名 add constraint 外键名 foreign key (字段名1) references 关联表 (字段名2); 在建立表格时就指定主键和外键 create table T_STU ( STU_ID char(5) not null, STU_NAME varchar2(8) not null, constraint PK_T_STU primary key (STU_ID) ); 主键和外键一起建立: create table T_SCORE ( EXAM_SCORE number(5,2),

EXAM_DATE date, AUTOID number(10) not null, STU_ID char(5), SUB_ID char(3), constraint PK_T_SCORE primary key (AUTOID), constraint FK_T_SCORE_REFE foreign key (STU_ID) references T_STU (STU_ID) ) --创建表 create table classes( id number(9) not null primary key, classname varchar2(40) not null ) --查询表 select * from classes; --删除表 drop table students; --修改表的名称 rename alist_table_copy to alist_table; --显示表结构 describe test --不对没查到 -----------------------对字段的操作 ----------------------------------- --增加列 alter table test add address varchar2(40); --删除列 alter table test drop column address; --修改列的名称 alter table test modify address addresses varchar(40; --修改列的属性 alter table test modi

Oracle基础练习题及答案(表约束)

练习作业 创建表emp1,字段如下 eno char(3), ename char(6) sex char(2) age number(2) dno char(3) 并插入如下数据 1 ,TOM ,男,21 ,’001’ 2 ,JERRY ,男,21 ,’002’ 3 ,KATE ,女,21 ,’003’ 4 ,MARY ,女,21 ,’004’ 5 ,JACK ,男,21 ,’005’ i.在eno字段上创建主键约束 ii.在ename字段上创建非空约束 iii.创建检查约束判断age在18到60岁之间的男性或者age在18到55岁之间的女性iv.在dno字段上创建唯一性约束 create table emp1( eno char(3) primary key, ename char(6) not null, sex char(2), age number(2), dno char(3) unique, constraint sex_age check( ((age between18and60) and sex='男') or ((age between18and55) and sex='女')) ) insert into emp1 values('1','TOM','男',21,'001') insert into emp1 values('2','JERRY','男',21,'002');

insert into emp1 values('3','KATE','女',21,'003'); insert into emp1 values('4','MARY','女',21,'004'); insert into emp1 values('5','JACK','男',21,'005'); v.创建和emp1表字段相同的emp_bak表,将emp_bak表的eno字段与emp表的eno字段创建外键约束 create table emp_bak as select * from emp1 where1=2 alter table emp_bak add constraint v foreign key(eno) references emp1(eno); 1、请创建一个表,表名为phone,表结构如下 电话号码(PHONENUM VARCHAR2(8)) 电话费(PAY number(8,2)) 号码等级(NUMLEVEL VARCHAR2(4)) 费用日期(PAYDATE varchar2(12) create table phone ( phonenum varchar2(8), pay number(8,2), numlevel varchar2(4), paydate varchar2(12) ) 1)插入以下两条数据. 123456, 600, pt04, 20051220 888888, 900, pt05, 20051019. insert into phone values('123456',600,'pt04', '20051220'); insert into phone values('888888',900,'pt05', '20050919');

Oracle中查看所有的表,用户表,列名,主键,外键

在Oracle中查看所有的表: select * from tab/dba_tables/dba_objects/cat; 看用户建立的表 : selecttable_name from user_tables; //当前用户的表 selecttable_name from all_tables; //所有用户的表 selecttable_name from dba_tables; //包括系统表 select * from user_indexes //可以查询出所有的用户表索引 查所有用户的表在all_tables 主键名称、外键在all_constraints 索引在all_indexes 但主键也会成为索引,所以主键也会在all_indexes里面。 具体需要的字段可以DESC下这几个view,dba登陆的话可以把all换成dba 1、查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columnst,user_indexesi where t.index_nam e = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 2、查找表的主键(包括名称,构成列): select cu.* from user_cons_columns cu, user_constraints au where cu.constraint _name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表 3、查找表的唯一性约束(包括名称,构成列): selectcolumn_name from user_cons_columns cu, user_constraints au where cu. constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table _name = 要查询的表 4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):

Oracle创建表的语法详解

Oracle创建表语句(Create table)语法详解及示例 创建表(Create table)语法详解 1. ORACLE常用的字段类型 ORACLE常用的字段类型有 VARCHAR2 (size) 可变长度的字符串, 必须规定长度 CHAR(size) 固定长度的字符串, 不规定长度默认值为1 NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数 最长38位. 不够位时会四舍五入. DATE 日期和时间类型 LOB 超长字符, 最大可达4G CLOB 超长文本字符串 BLOB 超长二进制字符串 BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的. 数字字段类型位数及其四舍五入的结果 原始数值1234567.89 数字字段类型位数存储的值 Number 1234567.89 Number(8) 12345678 Number(6) 错 Number(9,1) 1234567.9 Number(9,3) 错 Number(7,2) 错 Number(5,-2) 1234600 Number(5,-4) 1230000 Number(*,1) 1234567.9 2. 创建表时给字段加默认值和约束条件 创建表时可以给字段加上默认值 例如 : 日期字段 DEFAULT SYSDATE

这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 创建表时可以给字段加上约束条件 例如: 非空 NOT NULL 不允许重复 UNIQUE 关键字 PRIMARY KEY 按条件检查 CHECK (条件) 外键 REFERENCES 表名(字段名) 3. 创建表的例子 CREATE TABLE DEPT( EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, DNAME VARCHAR2(14), LOC VARCHAR2(13)) ; CREATE TABLE region( ID number(2) NOT NULL PRIMARY KEY, postcode number(6) default '0' NOT NULL, areaname varchar2(30) default ' ' NOT NULL); 4. 创建表时的命名规则和注意事项 1)表名和字段名的命名规则:必须以字母开头,可以含符号A-Z,a-z,0-9,_,$,# 2)大小写不区分 3)不用SQL里的保留字, 一定要用时可用双引号把字符串括起来. 4)用和实体或属性相关的英文符号长度有一定的限制 注意事项: 1)建表时可以用中文的字段名, 但最好还是用英文的字段名 2)创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 3)建表时如果有唯一关键字或者唯一的约束条件,建表时自动建了索引 4)一个表的最多字段个数也是有限制的,254个. 5. 约束名的命名规则和语法

Oracle查询语句基本命令一

oracle查询语句大全--基本命令大全一 1.create user username identified by password;//建用户名和密码oracle ,oracle 2.grant connect,resource,dba to username;//授权grant connect,resource,dba,sysdba to username; 3.connect username/password//进入。 4.select table_name,column_name from user_tab_columns where table_name='mview_log';//查询表中的表名,字段名等等。 5. 如何执行脚本SQL文件? SQL>@PATH/filename.sql; 6.Oracle oledb 提供者在command中执行多条SQL语句与SQL SERVER有少许差别,SQL Server只需使用";"分割多条SQL语句,而Oracle需要遵守ORACLE调用规范,即除分号分割外,还需以begin /end;包围语句体. 使用C#描述应如下所示: https://www.doczj.com/doc/d24384562.html,mandText = "begin INSERT INTO GROUP_INFO (GROUP_ID, GROUP_NAME) V ALUES (1, \'2\'); INSERT INTO GROUP_INFO(GROUP_ID, GROUP_NAME) V ALUES (2, \'2\'); end;"; 7.查询用户下的表的信息select distinct table_name from user_tab_columns; 8.如何搜索出前N条记录?Select a.*,rownum from (select * from cardkind order by cardkind ) a where rownum show user 3、查看系统拥有哪些用户SQL> select * from all_users; 4、新建用户并授权 SQL> create user a identified by a;(默认建在SYSTEM表空间下) SQL> grant connect,resource to a; 5、连接到新用户SQL> conn a/a

ORACLE建表样例

ORACLE数据库建表: ----------create table CREATE TABLE MMS_APP_ORDER_INFO ( ID_APP_ORDER_INFO VARCHAR2(50) DEFAULT SYS_GUID() NOT NULL, DEVICEID VARCHAR2(50) NOT NULL, LOGIN_APP_ORDER VAECHAR2(1000) NOT NULL, CREATED_BY VARCHAR2(100) NOT NULL , UPDATED_BY VARCHAR2(100) NOT NULL , DATE_CREATED DATE NOT NULL , DATE_UPDATED DATE NOT NULL ); --------ADD COMMENTS TO THE TABLE COMMENT ON TABLE MMS_APP_ORDER_INFO IS 'APP排序信息表'; --------ADD COMMENTS TO THE COLUMNS COMMENT ON COLUMN MMS_USER_APP_INFO.ID_APP_ORDER_INFO IS '编号'; COMMENT ON COLUMN MMS_USER_APP_INFO.DEVICEID IS '设备ID'; COMMENT ON COLUMN MMS_USER_APP_INFO.LOGIN_APP_ORDER IS '设备已登陆APP顺序(倒叙)'; COMMENT ON COLUMN MMS_USER_APP_INFO.DATE_CREATED IS '创建时间'; COMMENT ON COLUMN MMS_USER_APP_INFO.CREATED_BY IS '创建人'; COMMENT ON COLUMN MMS_USER_APP_INFO.DATE_UPDATED IS '更新时间'; COMMENT ON COLUMN MMS_USER_APP_INFO.UPDATED_BY IS '更新人'; ---------create index CREATE UNIQUE INDEX MAAMDATA.PK_MMS_APP_ORDER_INFO ON MAAMDATA.MAAM_APP_ORDER_INFO(ID_APP_LOGIN_INFO); ALTER TABLE MAAMDATA.MAAM_USER_APP_INFO ADD CONSTRAINT PK_MAAM_APP_ORDER_INFO PRIMARY KEY(ID_APP_LOGIN_INFO) USING INDEX PK_MAAM_APP_ORDER_INFO; --------create synonym(同义词) CREATE PUBLIC SYNONYM MAAM_APP_ORDER_INFO FOR MAAMDATA.MAAM_APP_ORDER_INFO; ------create privilege (权限) 使用GRANT命令 GRANT SELECT, INSERT, DELETE, UPDATE ON MAAMDATA.MMS_APP_ORDER_INFO TO DONGHAIHUA; GRANT SELECT ON HMRPTDATA.WIDETABLE_APPID_DEVICEID TO MAAMDATA,DONGHAIHUA;

查看oracle数据库的连接数以及用户

查看oracle数据库的连接数以及用户 11、查询oracle的连接数 2select count(*) from v$session; 32、查询oracle的并发连接数 4select count(*) from v$session where status='ACTIVE'; 53、查看不同用户的连接数 6select username,count(username) from v$session where username is not null group by username; 74、查看所有用户: 8select*from all_users; 95、查看用户或角色系统权限(直接赋值给用户或角色的系统权限): 10select*from dba_sys_privs; 11select*from user_sys_privs; 126、查看角色(只能查看登陆用户拥有的角色)所包含的权限 13select*from role_sys_privs; 147、查看用户对象权限: 15select*from dba_tab_privs; 16select*from all_tab_privs; 17select*from user_tab_privs; 188、查看所有角色: 19select*from dba_roles; 209、查看用户或角色所拥有的角色: 21select*from dba_role_privs; 22select*from user_role_privs; 2310、查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限) 24select*from V$PWFILE_USERS; select count(*) from v$process --当前的连接数 select value from v$parameter where name = 'processes' --数据库允许的最大连接数 修改最大连接数: alter system set processes = 300 scope = spfile; 重启数据库: sqlplus / as sysdba shutdown immediate; startup; 启动监听 #su – oracle $lsnrctl start --查看当前有哪些用户正在使用数据 SELECT osuser, https://www.doczj.com/doc/d24384562.html,ername,cpu_time/executions/1000000||'s', sql_fulltext,machine

Oracle表及字段查询语句

下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对o r a c l e查询方面感兴趣的话,不妨一看。 select * from all_tab_comments 查询所有用户的表,视图等 select * from user_tab_comments 查询本用户的表,视图等 select * from all_col_comments 查询所有用户的表的列名和注释. select * from user_col_comments 查询本用户的表的列名和注释 select * from all_tab_columns 查询所有用户的表的列名等信息(详细但是没有备注). select * from user_tab_columns 查询本用户的表的列名等信息(详细但是没有备注). 一般使用 1: select t.table_name,https://www.doczj.com/doc/d24384562.html,ments from user_tab_comments t 一般使用 2: select r1, r2, r3, r5

from (select a.table_name r1, a.column_name r2, https://www.doczj.com/doc/d24384562.html,ments r3 from user_col_comments a), (select t.table_name r4, https://www.doczj.com/doc/d24384562.html,ments r5 from user_tab_comments t) where r4 = r1 以上就是oracle查询用户所有表的语句介绍。如何在oracle中查询所有用户表的表名、主键名称、索引、外键等 1、查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_ name and t.table_name = i.table_name and t.table_name = 要查询的表 2、查找表的主键(包括名称,构成列): select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au. constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表 3、查找表的唯一性约束(包括名称,构成列): select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表 4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询): select * from user_constraints c where c.constraint_type = 'R'and c.table_name = 要查询的表

相关主题
文本预览
相关文档 最新文档