Oracle数据库之SQL基础(一)
主要内容:用户与表空间;表与约束;查询语句。
一、概述
Oracle安装:访问官网,下载
二、用户与表空间
在安装Oracle时在开始菜单里可以用sql puls登录oracle。
★1、系统用户
- sys、system (sys的权限要大于system,sys只能以系统管理员sysdba登录,system可以直接登录)
- sysman (用于企业管理,也是管理员级别的用户)
- scott (密码默认密码为tiger)
在sys,system,sysman,scott四个用户权限中,scott用户最低。
在安装Oracle时,前三个用户的密码是由你自己设置的,在设置时一般设置的是统一的密码。
★2、用户登录
登录方式:(sql语句中不区分大小写)
方法一:[username/password] [@server] [as sysdba|sysoper]
方法二:connnect username/password @server as sysdba|sysoper
例如:使用system用户登录
system/root @orcl sa sysdba
orcl就是自己设置的服务名(注意:如果数据库和服务器不在同一个机器上,就需要输入服务名或者IP地址)
★3、查看登录用户
- 查看当前用户:show user;(不属于SQL语句的范畴,可以不加分号)
- 通过数据字典查看用户信息:dba_users数据字典 -- 是数据库提供的表, 用于查看数据库的信息。查看数据字典:desc dba_users(不属于SQL语句的范畴,可以不加分号)
- 查看用户:select username from dba_users;(注意, 使用sql语句时必须在结尾添加";")
★4、启用Scott用户 (oracle默认用户,锁定的)
- 启用用户的语句:alter user username account unlock/lock;
如:alter user scott account unlock;(这里解锁) - 使用scott用户登录SQL Plus:
如:connect scott/tiger
★5、表空间概述
- 表空间与数据库之间的关系:
表空间是数据库的逻辑处理空间;可以把表空间理解为在数据库中开辟的一个空间用于存放数据库的对象;一个数据库可以有多个表空间构成;并且oracle的很多优化是基于表空间实现的。
- 表空间与数据文件的关系:
表空间是由一个和多个数据文件构成的;(数据文件的位置和大小可以由用户自己来定义)
我们需要知道我们存储的表、数据库、数据库当中的一些其他的对象都是存放在表空间的数据文件里面的。
- 表空间分类:
表空间分为 永久表空间、 临时表空间、 undo表空间。
- 永久表空间: 永久存储的对象,比如表、视图、存储过程等
- 临时表空间:数据库操作中中间执行的过程, 完了自行删除将不永久保存
- UNDO表空间:保存事务所修改的旧值,修改前的数据(利于撤销等方便回滚)
★6、查看用户的表空间
在Oracle数据库当中,使用不同用户登录之后,他们所使用的表空间可以有所不同。
- 数据字典:dba_tablespaces(系统管理员级别用户登录后查看的字典)、user_tablespaces(普通用户登录后查看的字典)
用 “desc 数据字典名;” 命令可以查看表空间数据字典的信息。
如:
decs dba_tablespaces(查看dba_tablespaces表有哪些字段)
select tablespace_name from dab_tablespaces;(查看有哪些表空间)
系统用户可以查看系统和普通用户的表空间数据字典信息(向下兼容),普通用户只能查看自己的。
- 数据字典:dba_users(系统用户级)、user_users(普通用户级),用法同上
- 设置用户的默认或临时表空间:ALTER USER username DEFAULT|TEMPORARY TABLESPACE tablespace_name;(普通用户没有修改表空间的权限,必须为他设置权限,否则的话只能使用系统用户为普通用户设置表空间)
- 在Oracle数据库安装完成后(默认情况下),system用户的默认表空间和临时表空间分别是system,temp
default(默认),temporary(临时),默认下,每个用户只有一个临时表空间。
★7、创建表空间
- 语法格式:create [temporary] tablespace tablespace_name
tempfile|datafile 'xx.dbf' size xx;
- 创建永久表空间:create tablespace 表空间名 datafile '数据文件名.dbf' size 数据文件大小;
- 创建临时表空间:create temporary tablespace 表空间名 tempfile '数据文件名.dbf' size 数据文件大小;
数据文件名可以包含路径,若是没有包含路径,则在默认路径(Oracle安装目录)下创建!
例子:
①创建永久表空间:
create tablespace test1_tablespace
datefile 'test1file.dbf' size 10m;
②创建临时表空间:
create temporary tablespace temptest1_tablespace
tempfile 'temptest1file.dbf' size 10m;
创建好永久表空间或者临时表空间后,如何进行查看表空间中文件的具体路径?如果我们不知道默认路径怎么办?
在永久表空间中,通过“desc dba_data_files”查看这个数据字典中包含的字段;然后查看我们创建的表空间里它的文件名字“select file_name from dba_data_files where tablespace_name='TEST1_TABLESPACAE';”(注意:表空间的名称要大写)
在临时表空间,查看我们创建的临时表空间里它的文件名字“select file_name from dba_temp_files where tablespace_name='TEMPTEST1_TABLESPACAE';”
★8、修改表空间
主要是修改表空间的状态和修改数据文件
修改表空间状态:(在我们创建完表空间后,默认是联机、可读写状态)
- 设置联机或者脱机状态:ALTER TABLESPACE tablespace_name ONLINE|OFFLINE;(表空间设置为脱机状态之后就不能使用它了)
- 设置只读或可读写状态:ALTER TABLESPACE tablespace_name READ ONLY|READ WRITE;
注意:默认情况下,当表空间的状态为"online"时,其是具有读写属性的(read write);对于"offline"状态的表空间,无法修改其读写属性;(默认的联机情况下就是可读写状态)
查看表空间的状态:①查看数据字典:desc dba_tablespace;
②查看表空间的状态:select status from dba_tablespaces where tablespace_name=‘TESC_TABLESPACE’;
★9、修改数据文件
增加数据文件和删除数据文件
增加数据文件:ALTER TABLESPACE tablespace_name ADD DATAFILE 'xx.dbf' SIZE xx;
即:alter tablespace 表空间名 add datafile '数据文件名.dbf' size 数据文件大小;
删除数据文件:ALTER TABLESPACE tablespace_name DROP DATAFILE 'xx.dbf';
即:alter tablespace 表空间名 drop datafile '数据文件名.dbf';
(注:我们删除表空间时,表空间的第一个数据文件是不可以删除的,除非将整个表空间删除!)
例如:增加数据文件
删除数据文件
★10、删除表空间
删除表空间:
drop tablespace 表空间名 [including contents];
注意:如果只是删除表空间,而不删除其中的数据文件,可以省略including contents 字句;
drop tablespace tablespace_name [including contents]
(不加‘[including contents]’为只删除表空间;)
例子:
drop tablespace test1_tablespace including contents;(删除表空间及表空间下的数据文件)
三、管理表
❤ 1、认识表
- 表是基本存储单位,数据都存放在表当中;
- 在Oracle当中,表都是一个二维结构 ;也就是说它是由行和列组成的,可以把一行称为一条记录,一列称为域或字段
- 每张表都有一些约定:
- a. 每一列数据必须具有相同数据类型
- b. 列名唯一
- c. 每一行数据的唯一性(减少数据冗余)
❤2、数据类型
- 字符型【char(n)、nchar(n)、varchar2(n)、nvarchar2(n)】
- 数值型【number(p,s)、float(n)】
- 日期型【date、timestamp】
- 其他类型 【blob、clob】
字符型:
- char(n)、nchar(n)为定长类型。n表示长度。
- nchar2用于存储Unicode格式的数据,更适合存储中文数据
- char(n): MAX:2000
- nchar(n):MAX:1000 存储汉字
假设n=10(输入三个字符,不足则补充七个空格)如果n很大,输入的的数据位数比较小,就会浪费很多空间
- varchar2(n)、NVARCHAR2(n) 为可变长度类型
- nvarchar2用于存储Unicode格式的数据,更适合存储中文数据
- varchar(n): MAX:4000
- nvarchar(n):MAX:2000
假设n=10(输入三个字符,不需要补足),因此相对char类型,varchar类型节省很多空间
数值型:
- NUMBER(P,S)
- P:有效数字 -s:小数点后的位数
例子:NUMBER(5,2) ---- 有效数字5位,保留2位小数,如123.45
- FLOAT(n) 用来存储二进制数据,二进制的位数是1~126位。
- 如果将二进制数转换为十进制数,需要乘以0.30103得到。因此在Oracle中使用数值型数据时候,我们都使用Number类型
日期型:
- DATE(精确到秒)
- DATE类型表示范围:公元前4712年1月日到公元9999年12月31日 - TIMESTAMP(精确到小数秒)
- DATE(精确到秒)
一般情况下,日期类型都是会使用Date类型。
其他类型:(存放大数据对象)
- BLOB: 能存放4G字节大小的数据,以二进制的形式
- CLOB: 能存放4G字节大小的数据,以字符串的形式
❤3、管理表
创建表、修改表、删除表
创建表:
1)基本语法:
create table table_name (column_name datatype,...)
注意:同一用户下(登陆数据库的用户)表名要唯一
2)练习:创建用户信息表
所需字段 --- 字段类型
编号 -- 用户名 -- 密码 -- 邮箱 -- 注册时间
create table userinfo(id number(6,0),username carchar2(20),userpwd varchar2(20),email varchar2(30),regdate date);
查看表中的字段:
修改表:(修改表的结构,不是修改表的数据)
1)添加字段:
alter table table_name add column_name datatype;
例如:alter table userinfo add remarks varchar2(500);
2)更改字段数据类型:
alter table table_name modify column_name datatype;
例如:
alter table userinfo modify remarks varchar2(400);
alter table userinfo modify userpwd number(6,0);
3)删除字段:
alter table table_name drop column column_name;
例如:alter table userinfo drop column remarks;
4)修改字段名:
alter table table_name rename column column_name to new_column_name;
例如:alter table userinfo rename column email to new_email;
5)修改表名:
rename table_name to new_table_name;
例如:rename userinfo to new_userinfo;
删除表:
1)删除表中的全部数据:(截断表:清空表)truncate 比delete要快很多
truncate table table_name;
2)删除表
drop table table_name;
四、操作表中的数据
添加、修改、删除数据
❤1、添加数据
1)insert语句:insert into table_name (column1,column2,...) values (value1,value2,...)
添加数据时,值的个数、类型和顺序必须和字段的个数、类型和顺序相同。
如果向表中的所有字段添加值,则表名后面的(column1,column2,...)内容可省略。
2)操作实例:(字符串要加单引号)
a. 向表中所有字段添加值:insert into userinfo values (1,'xxx','xxx@126.com',sysdate);
b. 向表中指定字段添加值:insert into userinfo (id,username,userpwd) values (2,'yy','123');
c. 向表中添加默认值:
- 在创建表的时候添加默认值:CREATE TABLE table_name(column_name datatype DEFAULT def_value,...);
- 修改字段时添加:ALTER TABLE table_name MODIFY column_name datatype DEFAULT def_value;
- 插入表时添加默认值:insert into 表名(默认字段名) values(1);
create table userinfo1 (id number(6,0),regdate date default sysdate);
例如: insert into userinfo1 values(id) valuses(1);
sysdate 用于获取当前系统的时间
❤2、复制表数据
1)在建表时复制:
create table table_new as select column,...|* from table_old;
例子:
create table userinfo_new as select * from userinfo;(复制userinfo表中的全部数据)
复制一张表:create table 新表名 as select * from 旧表名; * 表示复制所有字段
复制一张表中的某几个字段:create table 新表名 as select 字段1,字段2 from 旧表名;
2)在添加时复制:
insert into table_new [(column1,...)] select column1,...|* from table_old;
例子:
insert into userinfo_new select * from userinfo;
insert into userinfo_new(id,username) select id,username from userinfo;
向表中再次加入另一表中的数据:insert into 表1 select * from 表2;
在向表中插入数据时,来指定插入某些字段:insert into 表1(字段1,字段2) select 字段1,字段2 from 表2;
❤3、修改数据
修改表数据基本语法:
UPDATE table_name SET column1=value1,... [WHERE conditions];
(不指定条件,则为整个字段均修改)
无条件更新:
update table_name set column1=values1,.....;更新的字段的所有行全部变成相应值
有条件更新:
update table_name set column1=values1,..... where conditions; 更新的字段的指定行变值
❤4、删除数据
delete语句
删除表数据基本语法:DELETE FROM table_name [WHERE conditions];
无条件删除:delete from 表名;
有条件删除:delete from 表名 where 条件;
truncate语句
删除表数据基本语法:TRUNCATE TABLE table_name
1.truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
4.速度,一般来说: drop> truncate > delete。
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。7.DELETE FROM table_name;与TRUNCATE TABLE table_name;区别:
两者都是用来删除表中的全部数据,但是TRUNCATE 的速度要比DELETE 快,因TRUNCATE 属于数据定义语言中的,所以效率较高。
Oracle数据库之SQL基础(一)的更多相关文章
- Oracle数据库之SQL基础和分支循环
一.SQL基础语言 DECLARE --声明 a ); --变量或对象 BEGIN a:='小明';-- := 表示给一个变量赋值 dbms_output.put_line(a); --输出用 dbm ...
- Oracle数据库之SQL基础(二)
一.约束 ❤ 1.约束概述 约束作用: (1)定义规则 (2)确保完整性:包括数据的精确性.可靠性.以确保数据不会出错,或者尽量减少出错. 约束的类型: (1)非空约束 (2)主键约束 (3)外键约束 ...
- Oracle数据库—— PL/SQL基础编程
一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs) ...
- 数据库学习---SQL基础(二)
数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) 上篇复习的sql的增删改查,and ,or ,>=, <=,!=等逻辑运算符,还有in ...
- 数据库学习---SQL基础(一)
数据库学习---SQL基础(一) 数据库学习---SQL基础(二) 数据库学习---SQL基础(三) SQL(struct query language)结构化查询语言:一种专门与数据库通信的语言, ...
- oracle数据库元数据SQL查询
oracle数据库经典SQL查询 .查看表空间的名称及大小 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from ...
- 搜索表字段包含某字符串的SQL和监控Oracle数据库的SQL。
1.第一个SQL 背景:需要找到SQL Server数据库中,包含某个字符串的表,输出表和包含该字符串的列. )='=' --这里填要搜索的字符串 DECLARE @sql NVARCHAR(MAX) ...
- Oracle数据库的sql语句性能优化
在应用系统开发初期,由于开发数据库数据比较少,对于查询sql语句,复杂试图的编写等体会不出sql语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目 ...
- 数据库语言——SQL——基础部分——初篇
概述 SQL全称为Structured Query Language,是关系型数据库的语言标准,它并不与特定的数据库商品类型有关,例如Mysql,Oracle,DB2等等都可以使用SQL语言,它与特定 ...
随机推荐
- require(__DIR__ . "/../sss.php"
魔法函数 __DIR__ 是 php5.2以后新加的函数,返回当前文件所在的目录,返回的目录不带 \,所以上边的意思是:Require当前目录的父目录中的 sss.php
- x86_64编译JPEG遇到Invalid configuration `x86_64-unknown-linux-gnu'
把 /usr/share/libtool/config/config.guess 覆盖到相关软件自带的config.guess 把 /usr/share/libtool/config/config ...
- 红米note3的wifi断流或假死
红米note3的wifi断流/假死 日常使用note3的时,比如长时间浏览网页,点击一个链接会卡住不动,在等待十几秒之后才恢复.第一反应是不是网络不好?但是这种情况常常出现之后,对比其他的手机,比如价 ...
- Ubuntu安装Tcpdump
参考:ubuntu下安装Tcpdump并使用 请先安装libpcap等,可以参照上文链接. 安装: 网址:http://www.tcpdump.org/ 解压: tar -zxvf tcpdump-4 ...
- PHP 错误与异常 笔记与总结(13 )自定义异常类
针对不同的异常,进行不同的处理,可以通过自定义异常类记录特定的异常信息来处理不同类型的异常.自定义异常类通过继承基类(Exception),对基类进行扩展. 自定义异常类 <?php heade ...
- MySQL 授权远程登录(Ubuntu 环境)
环境:Ubuntu 13.10 (GNU/Linux 3.11.0-12-generic i686) 在用 Navicat 连接远程数据库时报错: ERROR (HY000): Host *** is ...
- cURL 学习笔记与总结(5)用 cURL 访问 HTTPS 资源
<?php $curlobj = curl_init(); // 初始化 curl_setopt($curlobj, CURLOPT_URL, "https://ajax.aspnet ...
- 使用shape设置只有部分边框有颜色
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android=" ...
- php防攻击方法
php防攻击方法 更多答案 请参考 @如何有效防止XSS攻击/AJAX跨域攻击 我说下防止非法用户的一些常用手段吧 1 前端的js验证: 我认为js验证只是一种用户体验的提升,对普通用户群体的简单 ...
- double-clicking
<!doctype html> <button id="id0" onclick="w('id0','str0')">target0&l ...