您的位置:首页 > 数据库 > Oracle

Oracle之常用命令及数据类型

2017-07-18 15:17 351 查看
1.连接数据库
sqlplus /nolog ---->表示不以任何用户名登录(oracle自带的登录工具sqlplus)
conn 用户名/密码@服务名(服务名用于区分使用的是该服务器上的哪一个数据库实例)

conn /as sysdba;---->用系统管理员账户登录

2.查看当前是哪个用户登录了数据库

show user;

3.退出连接
disc:退出连接

exit:退出连接,同时退出sqlplus客户端

4.创建用户名
create user 用户名 identified by 密码(不能以数字开头);
create user u1 identified by abc;
drop user u1;-->删除用户名

desc 表名;--->查看表结构(字段名,字段数据类型)

5.oracle的权限问题:
系统权限(admin):对数据库的相关权限(以create,drop等开头)
create user,create table,create session(用来登录),drop table,drop user
对象权限(grant):就是允许用户操作一些特定的数据对象(表,视图等的操作权限),如对某张表的增删改查等

alter,delete,execute,insert,select,update等等

all

6.对某一用户授权
grant 权限  to 用户 [with grant option]:适用于对象权限的授权,u1可给其他用户进一步进行授权(当前被赋予的权限)
grant 权限 to 用户 [with admin option]:适用于系统权限的连续授权
示例:
grant create session to u1 ;
grant select on scott.emp to u1;
grant all on scott.emp to u1;

conn system/123

7.修改默认的行字符和默认的页行数
set linesize xxx;
set pagesize xxx;
上面作法只能暂时修改配置,要永久有效,要修改下面配置文件

E:\oracle\product\10.2.0\db_1\sqlplus\admin\glogin.sql,在文件尾部添加下面两行命令

8.收回权限
revoke 权限 from 用户;

练习:
用sys用户创建两个用户u1,u2,给u1授对象和系统权限,同时要保证u1有进一步授权的能力
u1再给u2授权对象权限和系统权限,
收回u1的对象和系统权限、
请问u2还是否有系统权限和对象权限?
结论:系统权限还在,但对象权限没有了

9.角色:一组权限的集合,简化权限管理
系统预定义角色:connect,resource,dba;
自定义角色:create role 角色名;
给角色中添加权限:grant 权限 to 角色名;
把某个角色授权给用户:grant 角色 to 用户;(例:grant dba to r1;)
不掌握,查询某角色的系统权限
select * from role_sys_privs where role='R1';(r1账户需大写)
查询对象权限
select * from dba_tab_privs where grantee='R1';
 
10.修改密码:
password在当前所连接用户下使用(修改当前用户密码)
alter user u1 identified by abc(新密码);修改某个用户

锁定与解锁
alter user u1 account lock;
alter user u1 account unlock;
设置密码过期
alter user u1 password expire;
删除用户
drop user u1;如果该用户创建的有对象,则删除会不成功
drop user u1 cascade;会删除用户所拥有的对象,然后再删除用户

DML:data manipulation language;--->数据处理(操作)语句
insert,update,delete,select
DDL:data definition language--->数据定义语句
create,drop,
DCL:data control language;--->权限控制语句
grant,revoke;
DTL:data transaction language;--->事物
commit,rollback;

11.oracle的数据类型:(重点)
char(n):固定长度,执行效率高(在内存中长度固定,小于该值仍占该固定长度)
varchar2(n):可变长度,执行效率低
查看表中每一行的某些字段占多少字符
select length(name1),length(name2) from t1;

number:数值类型
number(p,s):
当s>0时,p表示最多有多少位有效数字,比如number(3,2)
s表示小数点后最多有多少位,整数部分最多为p-s位
number(5,2):小数部分最多2位,整数部分最多3位
number(p,0)或number(p):p表示整数,且整数部分有p位
比如number(3)数据范围-999.45---999.45

当s<0时:number(p,s),总有效位数为p-s;
number(4,-2):表示从小数点开始,向左数2位,这两位用用0表示,最后一个
数字要四舍五入
9999 49-->9999 00
number:表示p默认为38,

日期类型
注意:mysql中的日期类型有date,time,datetime,而oracle中就只有date

sysdate:当前时间
dual:虚表,只为符合sql语法,里面什么也没有月
示例:
create table t2(birth date);
insert into t2 values('23-5月-2017');

to_date:把字符串转date
to_char:把date 转字符串
insert into t2 values (to_date('2017-12-23','yyyy-MM-dd'));
select * from t2 where to_char(birth,'yyyy')='2017';

大对象类型:(了解即可)
1.clob:文本内容
create table t3 (text clob);
insert into t3 values('afdjksla;fjdks');
2.blob:二进制数据流,要通过InputStream方式写入,终端上不能使用

12.oracle对表的操作
1.删除表: 语法:drop table 表名
被删除的表放到了回收栈中,方便还原,但sys下不支持回收栈
查看当前用户下的表信息,包括回收栈中的表:select * from tab;
查看当前用户下的表信息,不包括回收栈中的表:select table_name from user_tables;
删除表,并不放入回收栈(彻底删除):drop table t1 purge;
还原表t2:flashback table t2 to before drop;
清空回收栈:purge recyclebin;
2.修改表:
1.重命名:rename 旧表名 to 新表名
2.添加字段:alter table 表名 add(列名 数据类型 [default 默认值]);
3.修改字段:alter table 表名 modify(列名 数据类型[default 默认值]);
4.删除字段:alter table 表名 drop column 列名;
3.复制表:
复制表结构和表内容:create table 表名 as select * from 源表名;
只复制表结构:create table 表名 as select * from 源表名 where 1=2;
只复制原表中一部分字段和数据:create table 表名 as select 字段1,字段2,... from 源表名;
复制原来表中的字段和数据,但重命名字段:create table 表名(新的字段名1,新的字段名2,...) as select 字段1,字段2,...from 源表名;
4.注释:
4.1.给表注释:
comment on table 表名 is '要注释的内容...';
查看当前用户下所有表的注释信息
select * from user_tab_comments;
4.2.给字段注释
comment on column 表名.字段名 is '字段的注释...';
查看字段注释
select * from user_col_comments;
 
查看当前用户拥有哪些表:
select table_name from user_tables;
查看某张表的列信息:
select column_name,data_type from user_tab_columns where table_name='EMP';

13.序列:
作用:自动增长
create sequence 序列名 
[increment by n]---步长,每次增长n
[start with n2]---初始值,默认为1
[maxvalue n3]---最大值
[minvalue n4]---最小值,默认是1,
[cycle]---循环,如果没有这一项,当数值大于最大值时会出错
[cache n]---放入缓冲区中数字的个数
create sequence s2 increment by 30 start with 20 maxvalue 50;
删除序列:drop sequence 序列名;
序列的属性:
nextval:下一个值
currval:当前值

使用示例:insert into t1 values(s1.nextval);(第一次使用必须先用nextval,因currval第一次是无值的) 

14.约束:(五种)
1.主键(primary key)
2.非空约束(not null)只能用第一种写法
3.唯一约束(unique)
4.外键约束(foreign key)
5.检查约束(check)

约束的两种定义方式:

1.约束的第一种定义方式:
create table p1(
  pid varchar2(19) primary key,
  name varchar2(20) not null,
  sex varchar2(2) default 'm' check(sex in('m','f')),
  birthday date unique
);
 
create table book(
  bid number(4),
  pid varchar2(19) references p1(pid)

);

2.约束的第二种方式:语法:constraint 约束名 约束字段
create table p2(
 pid varchar2(18),
 name varchar2(20) not null,   (not null和defualt必须在字段创建时指定)
 sex varchar2(2),
 birthday date,
 constraint p_pid_pk primary key(pid),
 constraint p_birth_u unique(birthday),
 constraint p_sex_ck check(sex in('f','m'))
);
外键
constraint 约束名 foreign key (子表的字段) references 父表(父表字段)[on delete cascade]
注:on delete cascade可选,表示级联删除,先删除与该表关联的所有数据
 
create table b1(
 bid number(2),
 pid varchar(18),
 constraint p_fk foreign key (pid) references p1(pid) on delete cascade
);
 
练习:
有个商店的数据库,记录客户和购物情况
1.商品表goods(goodsid,name,price,category,provider)
1.定义主键
2.price大于0,check约束,check(price>0)
2.客户表customer(customerid,name,email,sex,address);
1.定义主键
2.姓名非空
3.电子邮件不重复
4.性别必须是male或female,默认是male
3.购买表purchase(customerid,goodsid,nums);
1.定义customerid引用自customer表中的customerid,作为外键
2.定义goodsid为外键
3.nums必须在1到50之间,check(nums between 1 and 50)

约束管理
1.添加约束
alter table 表名 add constraint 约束名 约束(字段)[references 父表(父表中字段)]
2.重命名约束
alter table 表名 rename constraint 旧的约束名 to 新的约束名;
3.删除约束
alter table 表名 drop constaint 约束名;
4.启动或禁用约束
alter table 表名 disable|enable constraint 约束;

DML(insert,delete,update):
insert 
insert into 表名 values(值1,值2,...);
insert into 表名(字段1,字段2,...)values(值1,值2,...);

下面是oracle独有的
insert into 表名 select 语句;
insert into 表名(字段名1,字段名2,...)select 语句

执行脚本文件:
@文件路径\文件名;
@d:\1.sql;

事物:
commit:一旦提交无法回滚,oracle不会自动提交修改操作
rollback:可回退到修改操作之前的状态
savepoint:保存点;
savepoint s1;-->新建保存点s1
rollback to s1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: