1.表空间
(1)表空间概述
1.表空间:是数据库的逻辑存储空间。可以理解为,在数据库当中开辟的一个空间,用于存放数据库的对象。
2.一个数据库可以由多个表空间构成。
3.oracle中的表空间概念是与MySQL、SQL Server等数据库的一个重要区别;oracle的很多优化都是通过表空间实现的
4.表空间:是由一个或多个数据文件构成的,数据文件的位置和大小可以由用户自己定义。
(2)表空间分类
1.永久表空间:数据库中要永久化存储的一些对象,如:表、视图、存储过程
2.临时表空间:数据库操作当中中间执行的过程,执行结束后,存放的内容会被自动释放
3.UNDO表空间:用于保存事务所修改数据的旧值,可以进行数据的回滚
2.创建表空间
-- 创建默认表空间和临时表空间
create [temporary] tablespace tablespace_name -- [temporary] :临时的
tempfile | datafile 'xx.dbf' -- tempfile :创建好的表空间默认在oracle安装目录下;datafile 'xx.dbf' :为你的表空间设定存储位置
size xx -- 设置表空间大小,xx可以为10m
3.创建用户并指定表空间
CREATE USER cici IDENTIFIED BY cici -- 创建用户cici,并设置密码cici
-- PROFILE DEFAULT -- 存储位置默认
-- DEFAULT TABLESPACE CICI -- 默认表空间为CICI
ACCOUNT UNLOCK; -- 解锁用户
4.为用户赋予权限
GRANT connect TO cici; -- 可以与服务器建立连接
GRANT resource TO cici; -- 可以创建表、序列、过程、触发器、索引
1.认识表
表其实是我们存储数据的一个基本单位。
在数据库中的表都是一个二维结构;在一张表中,每一列的数据必须具有相同的数据类型;列名要具有唯一性每一行的数据也要保证其唯一性。
2.数据类型
(1)字符型数据类型
固定长度的数据类型:
CHAR(n)类型;-- CHAR类型的n的最大值是2000;
NCHAR(n)类型;-- NCHAR类型的n的最大值是1000;
可变长度的数据类型:
VARCHAR2(n)类型;-- VARCHAR2(n)类型的n最大值是4000;
NVARCHAR(n)类型;-- NVARCHAR(n)类型的n的最大值是2000;用于存储Unicode格式的数据,更适合存储中文数据。
(2)数值型数据类型
NUMBER(p,s)类型:是Oracle中比较常用的的一个数值型,p在这里代表这有效数字,而s则可以理解为效数点后的位数
-- 例:NUMBER(5,2)==有效数字是五位,保留两位小数。
FLOAT(n)类型:主要是用来存储二进制数据,还能表示二进制的位数是1~126位
(3)日期型数据
DATE类型:DATE类型的存储范围是从公元前4712年1月1日到公元9999年12月31日,DATE类型可以精确到秒的数据类型。
TIMESTAMP类型:时间戳类型,能精确到小数秒的数据类型。
(4)其他类型
存放大对象的数据:
BLOB类型(以二进的形式来存放数据,最大值为4GB)
CLOB类型(以字符串的形式来存放数据,最大值为4GB)
3.管理表
(1)创建表
创建表的基本语法:
CREATE TABLE table_name -- 在同一个用户下,表名要是唯一的
{
columu name datatype,
....
}
create table student
(
sid number primary key, -- 添加主键约束
sname varchar2(20) not null, -- 添加非空约束
gender varchar2(2) check(gender in('男','女')), -- 添加检查约束
email varchar(40) unique not null -- 添加唯一约束及非空约束
);
查看表里面的字段信息 :
desc table_name
(2)修改表
alter table table_name add column_name datetype; -- 向表中添加字段
alter table table_name modify column_name datatype; -- 修改字段类型
alter table table_name drop cloumn column_name;-- 删除字段
alter table table_name rename column column_name to new_name;-- 修改字段名
rename table_name to new_table_name;-- 修改表名
(3)删除表
DELETE FROM table_name [WHERE conditions];
delete | truncate | drop | |
---|---|---|---|
效果 | 只删除数据 | 只删除数据 | 删除表结构、约束、触发器、索引、... |
语言区别 | DML(事务提交后生效) | DLL(立即生效) | DLL(立即生效) |
速度 | 慢 | 快 | 最快 |
1.添加数据
(1)向表userinfo中添加数据:
-- 示例:
INSERT INTO table_name(column1,column2,…) VALUES(value1,value2,…);
-- sysdate是获取当前日期
insert into userinfo values(1,‘xxx’,‘123123’,‘[email protected]’,sysdate);
(2)创建表userinfo2的时候,给表中设置默认值
-- DEFAULT关键字代表默认,sysdate代表当前时间
create table userinfo2
(
id number(6,0),
dates date DEFAULT sysdate
);
向表userinfo2中添加数据
insert into userinfo2(id) values(1);
(3)向表userinfo中添加默认值
alter table userinfo modify email default ‘无’;
insert into userinfo(id) values(3);
-- 不想要默认值的时候,直接赋予值就行
insert into userinfo(id,email) values(4,‘[email protected]’)
(4)复制表table_old的数据到表table_new
-- 在建表时复制
create table table_new as select column1,...|* from table_old;
-- 在添加数据是复制
insert into table_name [(column1,...)] select column1,...|* from table_old;
2.修改数据
Update table_name Set column1=value1,column2=value2,...[where conditions]
(1)无条件修改
(2)有条件修改
3.删除数据
DELETE FROM table_name [WHERE conditions];
1.基本查询语句:
-- FROM (可以多表查询) WHERE 子句可带多个条件 DISTINCT 显示不重复数据
select [Distinct] 列名 .. From 表名 [where condition]
2.查询所有字段和指定字段
-- 查询所有
select * from table_name;
-- 查询指定字段
select column1, ... from table_name;
3.给字段设置别名
-- as可省略
select column_name as new_name, ... from table_name;
4.运算符和表达式
(1)表达式 = 操作数 + 运算符
(2)oracle中的操作数可以是常量、变量和字段
(3)oracle中的运算符:算数运算符(+ - * /)、比较运算符(> < = >= <= <>)、逻辑运算符(and or not)
(4) () 可以改变运算符优先级
5.在select语句中使用运算符
-- 在查询语句中,使用算术运算法对字段进行运算,并不影响真正表中的数据
-- 所有工资结果加200
select id,username,salary+200 from users;
select username from users where salary>800 or salary<>1801;
6.带条件的查询
逻辑运算符的优先级:按not、and、or的顺序依次递减; 比较运算符的优先级高于逻辑运算符
7.模糊查询
通配符的使用: 一个_只能代表一个字符,一个%可以代表0到多个任意字符
-- 查询以a开头的用户名
select * from users where username like 'a%';
-- 查询第二个字符为a的用户名
select * from users where username like '_a%';
8.范围查询
(1)BETWEEN...AND/NOT BETWEEN...AND:查询结果为闭合区间
(2)IN/NOT IN:结果为一个具体的值
9.消除重复行
select distinct deptno from emp;
10.对查询结果进行排序
SELECT [DISTINCT] column_name1,...|* FROM table_name [WHERE conditions] ORDER BY column_name1 DESC|ASC,...
-- DESC是降序排序,ASC是升序排序,默认情况下是升序排序