一、创建表空间、用户及授权
Oracle数据库创建时,会自动创建一些默认表空间,他们不仅包含用来管理用户数据的表空间,也包括用来管理Oracle系统内部数据(如数据字典)的表空间。以下是 Oracle11g 默认创建的主要表空间:
查看已创建的表空间名称
SQL>select tablespace_name from dba_tablespaces;
每个表空间(逻辑存储结构)至少包含一个数据文件(物理存储结构)
(1)SYSTEM系统表空间:用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。Oracle不推崇将用户创建的表、索引等数据对象存放在系统表空间中。可根据需要追加系统表空间的大小,即系统表空间中的数据文件个数并非固定不变。
要在数据库打开的前提下通过dict查看数据库中数据字典的信息
SQL>col table_name for a30;
SQL>col comments for a30;
SQL>select * from dict;
(2)SYSAUX辅助表空间:Oracle11g新增的,充当SYSTEM表空间的辅助表空间,降低系统表空间的负荷。存储除数据字典以外的其他数据对象,一般不存储用户的数据,由系统内部维护。
(3)UNDO撤销表空间:用于存储撤销信息。当用户对数据表进行修改操作(插入、修改、删除等)时,系统自动使用撤销表空间来临时存放修改前的旧数据。当所做的修改操作完成并提交后,Oracle根据系统设置的保留时间长度来决定何时释放掉撤销表空间的部分空间。
(4)USERS用户表空间:Oracle建议用户使用的表空间。Oracle系统的样例用户Scott对象就存放在用户表空间中。
查看某张表的字段和及类型
SQL>describ dba_users;
查看某个用户所在的默认表空间
奇怪的是
SQL>select default_tablespace /* from dba_users where username=’scott’;
只要加上where 子句就会“未选定行”,即没查到数据
(5)TEMP临时表空间:
(6)EXAMPLE样例表空间:
(7)SQPT税企平台表空间:为应用程序“毕节税源专业化煤炭系统”所建立的数据库
以SYSTEM或者SYS身份登录PLSQL Developer
A:创建表空间:
create tablespace TS_SQPT datafile 'D:\app\yangshan\oradata\MYSQPT\SQPT.dbf' size 12M autoextend on next 6M extent management local;
commit;
B:创建用户:
create user mtgl identified by "hubu88661126" default tablespace TS_SQPT profile DEFAULT;
commit;
C:给用授权
grant connect to mtgl;
grant resource to mtgl;
grant dba to mtgl;
以SYSTEM或者SYS登录到PL/SQL DEVELOPER
--(1)创建表空间,放在ORACLE服务器中
create tablespace TS_XSXK datafile 'D:\app\yangshan\oradata\mall\xsxk_data.dbf' size 12M autoextend on next 6M extent management local;
commit;
--(2)创建用户
create user yangshan identified by "123456" default tablespace TS_XSXK profile DEFAULT;
commit;
--(3)给用户授权
grant connect to yangshan;
grant resource to yangshan;
grant dba to yangshan;
二、建表及向表中插入数据
先以yangshan(用户)身份登录PLSQL DEVELOPER
(一)创建表Student、Course、SC
CREATE TABLE TABLE_NAME
(
字段名1 数据类型 约束,
字段名2 数据类型 约束,
...
字段名n 数据类型 约束,
CONSTRAINT PK_TABLENAME_COLUMNNAME PRIMARY_KEY(COLUMNNAME),
CONSTRAINT FK_REFERTABLENAME_COLUMNNAME FOREIGN KEY(COLUMNNAME) REFERENCES BEREFEREDTABLENAME(COLUMNNAME)
)
Create table Student ( Sno VARCHAR2(5) NOT NULL, /* 学号 */ Sname VARCHAR2(20) UNIQUE, /* 姓名 */ Ssex VARCHAR2(2) CHECK(Ssex in('男','女')), /* 性别 */ Sage INT check (sage>15), /* 年龄 */ Sdept VARCHAR2(20), /* 系别 */ CONSTRAINT pk_student_sno PRIMARY KEY(sno) --定义主键(或主码) );
CREATE TABLE Course ( Cno VARCHAR2(2) NOT NULL PRIMARY KEY, /* 课程号 */ Cname VARCHAR2(20), /* 课程名 */ Cpno VARCHAR2(2), /* 先修课程号 */ Ccredit int /* 学分 */ /*主键就包含了非空和唯一两个约束*/ );
CREATE TABLE SC ( Sno VARCHAR2(5), /* 学 号 */ Cno VARCHAR2(2), /* 课程号 */ Grade NUMBER(4) check (grade between 0 and 100), /* 成 绩 */ constraint PK_SC_SNOCNO primary key (sno,cno) /*定义(复合)主键(或主码)*/ );
/*定义外键(或外码)*/
alter table SC add CONSTRAINT FK_SC_SNO FOREIGN KEY(SNO) REFERENCES STUDENT(SNO);
alter table SC add CONSTRAINT FK_SC_CNO FOREIGN KEY(CNO) REFERENCES COURSE(CNO);
/*注意:在建表时系统会在表上针对主键列自动加上一个索引,另外要定义外键对应字段的索引,*/
create index idx_sc_sno on sc(sno);
create index idx_sc_cno on sc(cno);
/* 注意:除非自己给主键、外键、唯一(KEYS);CHECK约束;INDEXS命名,否则系统会自动给他们命名,且不易识别。 */
(二)向表插入数据
INSERT INTO TABLE_NAME{(COLUMNNAE1,...COLUMNNAEn)|EMPTY} VALUES(VALUE1,...VALUEn);
--Student表中的数据
insert into student (sno,sname,ssex,sage,sdept) values('95001','李勇','男',20,'CS');
insert into student (sno,sname,ssex,sage,sdept) values('95002','刘晨','女',19,'IS');
insert into student (sno,sname,ssex,sage,sdept) values('95003','王敏','女',18,'MA');
insert into student (sno,sname,ssex,sage,sdept) values('95004','张立','男',19,'IS');
commit;
--course表中的数据
insert into course values('1','数据库','5',4);
insert into course values('2','数学','',2);
insert into course values('3','信息系统','1',4);
insert into course values('4','操作系统','6',3);
insert into course values('5','数据结构','7',4);
insert into course values('6','数据处理','',2);
insert into course values('7','PASCAL语言','6',4);
commit;
--SC表中的数据
insert into SC values('95001','1',92);
insert into SC values('95001','2',85);
insert into SC values('95001','3',88);
insert into SC values('95002','2',90);
insert into SC values('95002','3',80);
insert into SC values('95002','1',null);
insert into SC values('95002','4',null);
insert into SC values('95003','1','');
insert into SC values('95003','2','');
insert into SC (sno,cno)values('95003','3');
insert into SC (sno,cno)values('95003','5');
commit;