oracle创建表与增删改

oracle创建表与增删改
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 (

SELECT

*

FROM

emp_test

WHERE

1 <> 1

);

-- 第 2 步揑入少量测试数据

INSERT INTO emp_copy (

SELECT

*

FROM

emp_test

WHERE

dept_test_id = 10

);

SELECT

*

FROM

emp_copy;

-- 把表中的数据换为部门 20 和 30 的员工记录DELETE

FROM

emp_copy;

INSERT INTO emp_copy (

SELECT

*

FROM

emp_test

WHERE

dept_test_id IN (20, 30)

);

SELECT

*

FROM

emp_copy;

-- 向新表中揑入指定记录数的数据,比如前 8 条DELETE

FROM

emp_copy;

INSERT INTO emp_copy (

SELECT

*

FROM

emp_test

WHERE

ROWNUM <= 8

);

SELECT

*

FROM

emp_copy;

-- update( 更新数据 ) **

-- 语法结构:

-- update 表名 set 列名 = 新的列值 ,

-- 列名 = 新的列值.

-- ….

-- where 条件;

-- 注意:

-- ?更新( update )数据表时 , 注意条件 , 如果丌加条件 , 修改的是全部表记录

-- ? rollback 回退 , commit 确认

-- 将员工号为 1012 的员工薪水改为 3500 , 职位改为 Programmer

UPDATE emp_test

SET salary = 3500,

JOB = 'Programmer'

WHERE

emp_id = 1012;

SELECT

*

FROM

emp_test;

-- 部门 10 的员工薪水+1000

UPDATE emp_test

SET salary = salary + 3500

WHERE

dept_test_id = 10;

SELECT

*

FROM

emp_test;

-- delete( 删除数据 ) **

-- 语法结构:

-- delete [from] 表名 where 条件 ;

-- 注意:

-- ?如果删除语句中丌加 where 条件 , 将删掉表中的全部记录

-- ? rollback 回退 , commit 确认

-- ? drop table 会删除表结构和数据 ;truncate 删除表数据 , 保留表结构。Drop 和 truncate 都

-- 不可以回退。 delete 仅删除数据 , 可以回退

-- 创建表 emp_bak2 , 只存放不重复的记录

CREATE TABLE emp_copy2 AS (

SELECT

*

FROM

emp_test

WHERE

1 <> 1

);

-- 如下语句执行 3 遍 , 揑入 3 条重复数据

INSERT INTO emp_copy2 (emp_id, NAME, salary)

VALUES

(1015, 'amy', 4000);

-- 如下语句执行 2 遍 , 揑入 2 条重复数据

INSERT INTO emp_copy2 (emp_id, NAME, salary)

VALUES

(1016, 'rory', 5000);

-- 如下语句执行 1 遍 , 揑入 1 条数据

INSERT INTO emp_copy2 (emp_id, NAME, salary)

VALUES

(1017, 'river', 6000);

SELECT

*

FROM

emp_copy2;

-- 创建表 emp_copy3 , 只存放不重复的记录 , 利用 distinct 关键字CREATE TABLE emp_copy3 AS SELECT DISTINCT

*

FROM

emp_copy2;

SELECT

*

FROM

emp_copy3;

-- -- 将表改名语法区别:Oracle:RENAME tablename TO newtablename;; mysql:RENAME TABLE tablename TO newtablename;

-- 把 emp_copy3 改名为 emp_bak4

RENAME emp_copy3 TO emp_bak4;

-- 把 emp_bak4 改名为 emp_copy3

RENAME emp_bak4 TO emp_copy3;

--删除重复数据

DELETE

FROM

emp_copy2

WHERE

ROWID NOT IN (

SELECT

MAX (ROWID)

FROM

emp_copy2

GROUP BY

emp_id,

NAME,

salary

);

--子查询:查询出 empno , ename , salary 相同的 rowid 最大的记录

--主查询:删除 rowid 不在子查询之列的重复数据

-- Transaction( 事务 ) **

-- 1) 事务是一组 DML 操作的逻辑单元 , 用来保证数据的一致性。

-- 2) 在一个事务内 , 组成事务的这组 DML 操作 , 或者一起成功提交 , 或者一起被撤销。

-- 3) 事务控制语言 TCL( Transaction Control Language )

-- ? commit 事务提交将所有的数据改劢提交

-- ? rollback 事务回滚回退到事务之初 , 数据的状态和事务开始之前完全一

-- 致

-- ? savepoint 事务保存点( 较丌常用 )

-- 3.1. 事务的开始和终止( 事务边界 )

-- 1) 事务开始

-- 事务开始于上一个事务的终止或者第一条 DML 语句

-- 2) 事务终止

-- ?事务终止于 commit/rollback 显式操作( 即控制台输入

commit/rollback )

-- ?如果连接关闭 , 事务( Transaction )将隐式提交

-- ? DDL 操作( 比如 create ) , 事务将隐式提交

-- ?如果出现异常 , 事务将隐式回滚

-- 1) 事务内部的数据改变只有在自己的会话中能够看到

-- 2) 事务会对操作的数据加锁 , 丌允许其它事务操作

-- 3) 如果提交( commit )后 , 数据的改变被确认 , 则

-- ?所有的会话都能看到被改变的结果 ;

-- ?数据上的锁被释放 ;

-- ?保存数据的临时空间被释放

-- 4) 如果回滚( rollback ) , 则

-- ?数据的改变被取消 ;

-- ?数据上的锁被释放 ;

-- ?临时空间被释放

SELECT

*

FROM

emp_copy3;

UPDATE emp_copy3

SET emp_id = 1015

WHERE

emp_id = 1014;

CREATE TABLE mytemp_test (ID NUMBER(4));

INSERT INTO mytemp_test

VALUES

(3);

SAVEPOINT A;

-- 设置保存点 , 名为 A

INSERT INTO mytemp_test

VALUES

(4);

SAVEPOINT B;

-- 设置保存点 , 名为 B

INSERT INTO mytemp_test

VALUES

(5);

ROLLBACK TO A;

-- 回滚到保存点 A , 注意:A 之后的保存点全部被取消

SELECT

*

FROM

mytemp_test;

-- 3 被揑入数据库,

-- 4、5 没有被揑入

-- truncate 保留表结构 , 删除表中所有数据truncate 操作丌需提交

( commit ) , 没有回退( rollback )的机会

-- 语法结构: truncate table 表名 ;

TRUNCATE TABLE mytemp_test;

-- 增加列( 只能增加在最后一列 )

ALTER TABLE mytemp_test ADD(name VARCHAR(10));

ALTER TABLE mytemp_test ADD(password VARCHAR(10));

-- 修改列名 password 为 pwd 和MySql有区别:

-- Oracle:ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name ;

-- Mysql:ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name typedefinition;

ALTER TABLE mytemp_test RENAME COLUMN password TO pwd;

-- 修改列的数据类型为 pwd char(8)

-- MySQL:alter table 表名 modify column 字段名类型;

-- Oracle:alter table 表名 modify (字段名类型);

ALTER TABLE mytemp_test MODIFY(pwd VARCHAR(8)) ;

-- 删除列 pwd

ALTER TABLE mytemp_test DROP COLUMN pwd ;

DESC mytemp_test;

-- 主键约束:PRIMARY KEY=不重复+不为NULL;

-- (列级约束条件)

CREATE TABLE dept_dylan (

dept_id NUMBER (2) PRIMARY KEY,

dept_name VARCHAR (20),

dept_location VARCHAR (40)

);

-- 数据准备

INSERT INTO dept_dylan

VALUES

(10, 'developer', 'beijing');

INSERT INTO dept_dylan

VALUES

(10, 'market', 'shenzhen');

-- 表级约束条件:建议约束命名规则:表名_列名_约束条件的类型CREATE TABLE dept_dylan2(

dept_id NUMBER (2),

dept_name VARCHAR (20),

dept_location VARCHAR (40),

constraint dept_dylan2_pk PRIMARY KEY (dept_id) );

-- 数据准备

INSERT INTO dept_dylan2

VALUES

(10, 'developer', 'beijing');

INSERT INTO dept_dylan2

VALUES

(10, 'market', 'shenzhen');

SELECT

*

FROM

dept_dylan2;

-- 非空约束( not null , 简称 NN ) ** 非空约束只能定义在列级CREATE TABLE student_dylan (

id NUMBER (4) PRIMARY KEY,

NAME VARCHAR (10) NOT NULL,

age NUMBER (3)

);

INSERT INTO student_dylan

VALUES

(1, 'zhangwei', 20);

INSERT INTO student_dylan

VALUES

(2, 'zhangwei', 19);

INSERT INTO student_dylan

VALUES

(3, NULL, 19);

SELECT

*

FROM

student_dylan;

-- 给非空约束命名

DROP TABLE student_dylan;

CREATE TABLE student_dylan (

id NUMBER (4) PRIMARY KEY,

name VARCHAR (10) constraint student_dylan_name_nn NOT NULL, age NUMBER (3)

);

-- 视图可以使用 CREATE OR REPLACE 来创建或覆盖,并可查询视图的定义。CREATE

OR REPLACE VIEW v_emp_count AS SELECT

dept_test_id,

count(*) emp_num,

sum(salary) sum_s,

avg(IFNULL(salary, 0)) avg_s,

max(salary) max_s,

min(salary) min_s

FROM

emp_test

GROUP BY

dept_test_id;

SELECT

*

FROM

v_emp_count;

-- 索引 Index *

-- index :用来提高查询效率的机制

-- ?全表扫描方式( Full Table Scan ):查询效率极低

-- ?索引查询:比全表扫描快

-- ?索引的结构:数据+地址( 如:张三+Room203 )

-- ?注意:对亍数据变更频繁(DML 操作频繁)的表 , 索引会影响查询性能

-- ?自劢创建索引:

-- 如果数据表有 PK/Unique 两种约束 , 索引自劢创建 , 除此以外 , 索引必须手劢创建

-- ?自定义索引语法:

-- create index 索引名 on 表名(列名) ;

-- 表的主键和唯一约束条件 , 会自动创建索引

create table student_ning7(

id INT(4),

name char(20),

email char(40),

constraint stu_n7_id_pk primary key(id),

constraint stu_n7_email_uk unique(email)

)

create index idx_stu7_name

on student_ning7(name) ;

select * from student_ning7 where name = 'zhangsan' ;

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创建表基础

?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 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创建表语句(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数据库建表: ----------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_如何创建表空间

SYS用户在CMD下以DBA身份登陆: 在CMD中打sqlplus /nolog 然后再 conn / as sysdba //创建临时表空间 create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //创建数据表空间 create tablespace test_data logging datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //创建用户并指定表空间 create user username identified by password

default tablespace user_data temporary tablespace user_temp; //给用户授予权限 grant connect,resource to username; //以后以该用户登录,创建的任何数据库对象都属于user_temp 和user_data表空间,这就不用在每创建一个对象给其指定表空间了 撤权: revoke 权限... from 用户名; 删除用户命令 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 一、建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 二、建立UNDO表空间 CREATE UNDO TABLESPACE UNDOTBS02

Oracle建表实例

/*==============================================================*/ /* Database name: Database_1 */ /* DBMS name: ORACLE Version 11g */ /* Created on: 2016/3/26 20:29:00 */ /*==============================================================*/ /*==============================================================*/ /* Database: Database_1 */ /*==============================================================*/ /*==============================================================*/ /* Table: Major */ /*==============================================================*/ create table Major ( MajorID int not null, Name varchar2(20) not null, Remark varchar2(30), constraint PK_MAJOR primary key (MajorID) ); /*==============================================================*/ /* Table: Student */ /*==============================================================*/ create table Student ( StudentID nvarchar2(20) not null, MajorID int, Name varchar2(20) not null, Sex bit not null, Age int, Remark varchar2(30), constraint PK_STUDENT primary key (StudentID) ); alter table Student add constraint FK_STUDENT_REFERENCE_MAJOR foreign key (MajorID) references Major (MajorID);

Oracle建表空间、用户操作详解-入门基础

Oracle建表空间、用户操作详解-入门基础 2009/03/10 14:36 建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 修改表空间大小 alter database datafile '/path/NADDate05.dbf' resize 100M 移动表至另一表空间 alter table move tablespace room1; 一、建立表空间 CREATE TABLESPACE data01 DATAFILE '/oracle/oradata/db/DATA01.dbf' SIZE 500M UNIFORM SIZE 128k; #指定区尺寸为128k,如不指定,区尺寸默认为64k 二、建立UNDO表空间 CREATE UNDO TABLESPACE UNDOTBS02 DATAFILE '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M #注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间: ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

三、建立临时表空间 CREATE TEMPORARY TABLESPACE temp_data TEMPFILE '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M 四、改变表空间状态 1.使表空间脱机 ALTER TABLESPACE game OFFLINE; 如果是意外删除了数据文件,则必须带有RECOVER选项 ALTER TABLESPACE game OFFLINE FOR RECOVER; 2.使表空间联机 ALTER TABLESPACE game ONLINE; 3.使数据文件脱机 ALTER DATABASE DATAFILE 3 OFFLINE; 4.使数据文件联机 ALTER DATABASE DATAFILE 3 ONLINE; 5.使表空间只读 ALTER TABLESPACE game READ ONLY; 6.使表空间可读写 ALTER TABLESPACE game READ WRITE; 五、删除表空间 DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES; 六、扩展表空间

ORACLE11g创建新表和序列插入数据

ORACLE11g创建新表和序列,使用序列插入数据后,为什么序列不是从定义的初始值1开始? 创建book表 create table book( bookID number(12)constraint pk_book primary key, bookName varchar(32)not null, price number(5,2), printTime date); 创建序列bookID create sequence bookID Start with1 Increment by1 Maxvalue999999999999 nocache nocycle; insert into book(bookid,bookname)values(bookID.Nextval,'三国演义'); insert into book(bookid,bookname)values(bookID.Nextval,'小学五年级数学'); insert into book(bookid,bookname)values(bookID.Nextval,'小学六年级数学'); insert into book(bookid,bookname)values(bookID.Nextval,'小学四年级数学'); select*from book; 插入数据后,序列却是从2开始,如下图所示。奇怪!奇怪! 问题原因: ·当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值·Oracle从11.2.0.1版本开始,提供了一个“延迟段创建”特性: 即: 当我们创建了新的表(table)和序列(sequence), 在插入(insert)语句时,序列会跳过第一个值(1)。 所以结果是插入的序列值从 2(序列的第二个值) 开始,而不是 1开始。 想要解决这个问题有两种方法: 更改数据库的“延迟段创建”特性为false(需要有相应的权限)

Oracle 创建表

Oracle 创建表 创建表时需要使用CREATE TABLE语句,为了在用户自己的模式中创建一个新表,则用户必须具有CREATE TABLE系统权限。如果要在其他用户模式中创建表,则必须具有CREATE ANY TABLE的系统权限。此外,用户还必须在指定的表空间中具有一定的配额存储空间。 应该说,使用CREATE TABLE语句创建表并不困难,困难在于如何合理地确定创建哪些表,这些表应该包含哪些列,以及各列又应该使用什么样的数据类型等。在实际应用中,应该在用户需求调研和分析的基础上,借助于ER图等有效的工具和手段,确认应该创建哪些表和准备如何创建这些表。 例如,下面创建一个存储公司员工信息的EMPLOYEE表,该表包括了员工代号、员工姓名、性别、雇用时间、职位和电子邮件等信息。 SQL> create table employees( 2 empno number(10) not null, 3 ename varchar2(20), 4 sex char(2), 5 salary number(8,2), 6 hiredate date default sysdate, 7 job varchar2(10), 8 email varchar2(50), 9 deptno number(3) not null); 表已创建。 建立表后,可以通过DESCRIBE命令查看表的描述: SQL> desc employees 名称是否为空? 类型 ----------------------------------------- -------- ------------- EMPNO NOT NULL NUMBER(10) ENAME V ARCHAR2(20) SEX CHAR(2) SALARY NUMBER(8,2) HIREDA TE DATE JOB V ARCHAR2(10) EMAIL V ARCHAR2(50) DEPTNO NOT NULL NUMBER(3) 如果要在其他模式中创建表,则必须在表名前加上模式名。例如,下面的语句将在HR 模式中创建EMPLOYEES表: SQL> create table hr.employees(...); 注意在创建表时,表的各列之间需要使用逗号隔开。

oracle创建临时表

Oracle数据库临时表管理心得 我们在创建数据表的时候,若没有特殊的指明,那么我们创建的表是一个永久的关系型表格,也就是说,这个表格中对应的数据,除非是我们显示的删除的话,表中的数据是永远都存在的。相对应的,在Oracle数据库中还有一种类型的表,叫做临时表。这个临时表跟永久表最大的区别就是表中的数据不会永远的存在。当一个会话结束或者事务结束的时候,这个临时表中的数据,不用用户自己删除,数据库自己会自动清 除。 1、事务临时表的管理。 (1) 事务临时表的创建。 Oracle数据库根据临时表的性质不同,可以分为事务临时表与会话临时表。事务临时表是指数据只有在当前事务内有效。一般情况下,如果在创建数据表的时候,没有特殊指明这表是会话临时表的话,则该表默认为事务临时表。 我们可以以下面的语句创建事务临时表。 Create global temporary table Temp_user (ID NUMBER(12) Primary key,name varchar2(10)); 笔者建议: 这个创建临时表的语句中,虽然没有显性的指明该表是事务临时表,但是,默认的情况下,若没有指明是什么临时表的话,系统默认是事务临时表。我们要创建事务临时表时,可以不指定关键字。但是,这查看起来比较麻烦。我建议,无论在建立什么临时表,都要利用具体的关键字来显形的指明,这大家看起来都方便。一般可以利用ON COMMIT DELETE ROWS关键字来说明该表就是事务性的临时表,而不是会话性质 的临时表。 (2) 事务临时表数据的变化分析。 事务临时表的话,当事务结束的时候,就会清空这个事务临时表。所以,当我们在数据库临时表中插入数据后,只要事务没有提交的话,该表中的数据就会存在。但是,当事务提交以后,该表中的数据就会被删除。而且,这个变化不会在重做日志中 显示。 具体事务临时表与会话临时表有什么区别,我们在介绍完会话临时表后会详细介 绍。

实验1oracle创建数据库及创建表

实验一:创建数据库、及表的管理 一、实验目的 1. 掌握使用DBCA创建数据库 2. 掌握手工创建Oracle数据库的方法(学习oracle的体系后再讲) 3.表的管理—见实验2 二、实验内容及步骤 1. 使用DBCA创建数据库 (1) 打开DBCA组件,创建数据库sale. (2) 安装完后进入D:\oracle\product\10.2.0\db_1\install目录(根据自己机子的路径),打开readme文件,查看打开OEM的URL。 (3) 登陆OEM,管理sale数据库。 3.表的管理 2. 手工创建Oracle数据库(暂时不做,等讲完oracle 的体系结构后在做) 数据库名:mydb 安装路径:d:\oracle\product\10.2.0\ (1)、手工创建相关目录 D:\oracle\product\10.2.0\admin\mydb D:\oracle\product\10.2.0\admin\mydb\adump D:\oracle\product\10.2.0\admin\mydb\bdump D:\oracle\product\10.2.0\admin\mydb\udump D:\oracle\product\10.2.0\admin\mydb\cdump D:\oracle\product\10.2.0\admin\mydb\ddump D:\oracle\product\10.2.0\admin\mydb\pfile D:\oracle\product\10.2.0\oradata\mydb (2)、手工创建初始化参数文件D:\oracle\product\10.2.0\admin\mydb\pfile\ init.ora,内容可以copy别的实例init.ora文件后修改。 (3)、在命令提示符下,使用orapwd.exe命令,创建口令文件pwdmydb.ora,命令格式如下: orapwd file=F:\oracle\product\10.2.0\db_2\database\pwdmydb.ora password=123 entries=5 (4)、通过oradim.exe命令,在服务里生成一个新的实例管理服务,启动方式为手工 set ORACLE_SID=mydb oradim -new -sid MYDB -pfile D:\oracle\product\10.2.0\db_2\database\initmydb.ora

相关文档
最新文档