一,表空间
1.1创建表空间
--问题:创建一个名为hp的表空间,指定数据文件为hp.dbf,大小为10m.
create tablespace hp datafile ‘C:\app\hp\hp.dbf‘ size 10M autoextend on next 5m maxsize unlimited;
1.2 删除表空间
drop tablespace hp;
1.3思考题
删除表空间的时候,如何删除关联的数据文件??
drop tablespace test_data including contents and datafiles;
二 创建用户
2.1创建用户
--语法结构:create user 用户名 identified by 密码 【default tablespace 表空间名】【temporary tablespace temp】
create user hope identified by 123456; create user hope1 identified by 123456 default tablespace users; create user hope2 identified by 123456 default tablespace users temporary tablespace temp;
2.2 修改用户密码
--语法结构:alter user 用户名 identified by 密码
alter user hope identified by 654321;
2.3 删除用户
--drop user 用户名【cascade】
drop user hope;
drop user hope cascade;
三 权限和角色
--权限指执行特定类型SQL命令或访问其他对象的权利
--系统权限:允许用户执行某些数据库操作
--对象权限:允许用户对某一特定对象执行特定的操作
--角色是具有名称的一组权限的组合
3.1 常用系统预定义角色
--CONNECT:临时用户
--RESOURCE:更为可靠和正式的用户
--DBA:数据库管理员角色,拥有管理数据库的最高权限
--一般情况下,普通用户,有connect和resource的角色就够了。
3.2 赋予权限和角色
--语法结构:grant 角色1,角色2,。。。 to 用户
grant connect to hope2
grant connect,resource to hope2;
--给hope2赋予查询scott的emp表的权限
grant select on scott.emp to hope2; grant select,update on scott.emp to hope2;
--撤销角色和权限:
--语法结构:revoke 角色1,角色2,。。。from 用户
revoke resource from hope2; revoke connect,resource from hope2;
四 Oracle的数据类型@@
类型 |
语法 |
|
描述 |
文本类型 |
char(n) |
定长 |
最大2000字符,默认n=1 |
varchar2(n) |
变长 |
最大4000字符 |
|
nchar(n) |
定长 |
unicode数据类型,最大2000 |
|
nvarchar2(n) |
变长 |
unicode数据类型,最大4000 |
|
clob(character large Object) |
|
字符型大对象,最大8TB |
|
blob(birnary large Object) |
|
二进制数据,可存放图片、声音,最大8TB |
|
数值 |
number(p,s) |
变长 |
p-有效位,s-小数位;1<=p<=38,-84<=s<=127 |
日期 |
date |
|
默认格式:DD-MM-YYYY ‘16-05月-2017’ |
timestamp(n) |
|
|
4.1 文本类型
--char:可以存储定长的字符串 char(200)
--varchar:可以存储变长的字符串
--varchar2:可以存储变长的字符串 varchar2(200)
--什么时候用char,什么时候用varchar(2) @@
当已知字符串长度用char比较合适
--不确定字符串长度时,用varchar2比较合适。
--nchar和nvarchar2可以存储Unicode字符集
4.2 数值类型
--数值数据类型:numer
--number 等价于number(38,0)
--number(15)表示可以存储一个15位的整数
--number(22,7)表示可以浮点数,整数部分有15位,小数点后有7位
--注意:不建议大家使用varchar,integer,float,double
4.2 日期数据类型
--与日期类型相关的函数
--sysdate:日期函数:显示当前日期
select sysdate from dual;
--systimestamp:比Date更精确的一个时间
select systimestamp from dual;
--to_date(字符串,格式):将一个Oracle不认识的字符串,转成Oracle认识的日期格式
select to_date(‘2018-01-05‘,‘yyyy-mm-dd‘) from dual;
--Date:日期类型,存储日期和时间
--TimeStamp:比Date更精确的一种日期类型。
--默认日期格式:
--中文的Oracle:日-月-年 比如1998年7月1日 ->‘01-7月-1998’
--英文的Oracle:day-mon-year 比如1998年7月1日 ->‘01-JUL-1998‘
--Lob:
--BLOB:存储二进制对象,如图像、音频和视频文件
--CLOB:存储字符格式的大型对象
五 表
5.1创建表
1.使用sql/plus创建
create table 表的名称(字段名称1 数据类型, 字段名称2 数据类型…);
示例:
创建学生表,字段和类型如下所示:
字段 |
字段类型 |
id |
number |
name |
varchar2(20) |
sex |
char(2) |
birthday |
date |
score |
number(4,2) |
create table student(
id number,
name varchar2(20),
sex char(2),
birthday date,
score number(4,2)
)
2.使用plsql developer第三方工具创建
--创建表:实际上解决的是表结构的问题,表有几个字段,每个字段的长度是多少,每个字段是什么数据类型
--create table 表名(字段名1 数据类型1(长度),字段名2 数据类型2(长度),。。。);
create table student(stuno number(4),stuname varchar2(10),age number(2),addr varchar(50));
5.2 删除表
drop table student;
5.3 修改表
1.修改表名
RENAME 旧的表名称 TO 新的表名称;
2. 添加列
ALTER TABLE 表名称 ADD
(列名称 数据类型 [DEFAULT 默认值],
列名称 数据类型 [DEFAULT 默认值],
…);
3.修改列
ALTER TABLE 表名称 MODIFY
(列名称 数据类型 [DEFAULT 默认值],
列名称 数据类型 [DEFAULT 默认值],
…);
4.删除列
alter table 表名 drop column 列名;
alter table 表名 drop(列名1,列名2,...);
5.举例
(1)给学生表添加班级编号
alter table students add(class_id number);
(2)学生姓名变成varchar2(30)
alter table students modify(name varchar2(30));
(3)删除学生表的score字段
alter table students drop column score;
alter table students drop(score);
(4)把学生表名students修改成stu
SQL>rename students to stu;
六 约束
--问题:往表中插入数据的时候,可能出现一些问题,比如:重复插入数据,内容不对(性别)
--如何保证数据库表中数据的完整性和一致性呢?
--常见的约束:主键(primary key),外键(foreign key),唯一(unique),非空(not null),默认(default),用户自定义(check)
6.1 主键约束
--什么是主键约束?主键约束就是给表定义一个主键,什么是主键?
--主键主要是用来保证表记录的唯一非空的。
--建表的时候添加主键
create table student(stuno number(4) primary key,stuname varchar2(10),age number(2),addr varchar(50)); insert into student values(1001,‘zhang‘,18,‘luoyang‘);
--再次插入相同记录,违法主键约束,不允许插入
SQL> insert into student values(1001,‘zhang‘,18,‘luoyang‘);
insert into student values(1001,‘zhang‘,18,‘luoyang‘)
ORA-00001: 违反唯一约束条件 (SYS.SYS_C0010797)
--如果主键为null也不允许插入,同样是违反了主键约束
SQL> insert into student values(null,‘zhang‘,18,‘luoyang‘);
insert into student values(null,‘zhang‘,18,‘luoyang‘)
--创建一张课程表:
create table course(cno number(4) primary key,cname varchar2(20),cscore number(2));
--创建一张成绩表:学号和课程号共同作为一个主键,称为联合主键
--一张表只能有一个主键
create table score(sno number(4),cno number(4),score number(5,2),constraint pk_score primary key (sno,cno));
drop table course;
create table course(cno number(4) constraint pk_course primary key ,cname varchar2(20),cscore number(2));
作业:
- 删除表空间时,如何删除相关联的数据文件
drop tablespace test_data including contents and datafiles;
2. 复习本周所讲的所有内容,预习约束的相关内容,下周提问。