oracle入门笔记
进入oracle客户端:运行---->sqlplus 或者使用oracle自带的SQL plus软件.
登陆oracle客户端: conn 用户名/密码;
显示当前用户: show user;
断开当前连接: disc;
.select * from user_role_privs; 查看当前用户的角色
select name from v$database; 查看数据库
Oracle中常用的数据类型:
NUMBER[(precision [, scale])] NUMBER(p,s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126
保存在机器内部的范围: 1 ~ 22 bytes
有效位:从左边第一个不为0的数算起的位数。
s > 0
精确到小数点右边s位,并四舍五入。然后检验有效位是否 <= p。
s < 0
精确到小数点左边s位,并四舍五入。然后检验有效位是否 <= p + |s|。
s = 0 等价于NUMBER(p)
此时NUMBER表示整数。
字符串:char,定长,实际内容不足会自动填充.最多2000个字符 查询,存储效率高
varchar2 不定长,所占内存根据内容决定,最多4000个字符
表操作:
查询当前用户创建的表:select table_name from user_tables;
查询当前用户创建的视图:select view_name from user_views;
查询当前用户创建的视图和表:select * from tab ;
查看表结构:desc 表名; 只能看到字段名或者字段名和类型.
添加数据:insert into 表名 values(); 或者insert into 表名(字段名) values(值);
注意:values的s不能省略.不能使用values(值1),(值2)这种方式.
修改:update 表名 set 字段1=值 [,字段2=值..] where 条件;
查询:select 查询列/* from 表名 where 条件;
删除:delete from 表名 where 条件;
说明:删除和修改,如果没有条件,操作的是所有的数据.
创建表及约束:create table t1(id int primary key,name varchar(20) unique,age int check(age>18 and age<100),sex char(2) default '男',address varchar(40) not null);
注意:oracle中"并且"不能使用&&,可以换成and. User是oracle的关键字,表名不能用user.
在oracle中唯一约束,主键约束,外键约束,检查性约束(强制执行),非空约束,默认约束的效果和mysql相比,效果不变.
|------删除约束:
alter table 表名 drop constraint 约束名称; 可以根据外键匿名删除任何约束
alter table 表名 drop primary key ; #删除主键约束
alter table 表名 drop primary key cascade; #在两张表存在主从关系,带上 cascade,自动删除外键关系
alter table 表名 drop unique (字段名); 删除唯一约束
alter table 表名 modify 字段名 字段类型 null; # 删除非空约束,必须明显指出null
alter table 表名 modify 字段名 字段类型 default null; #删除默认约束,必须明显指出默认值为null
注意:删除外键不能使用mysql的"alter table 表名 drop foreign key 外键匿名;"
|------添加约束:
添加主键约束:alter table 表名modify id int primary key; 通过修改字段类型添加主键约束
Alter table 表名 add [constraint 约束匿名] primary key (字段名); 添加主键约束
添加唯一约束:alter table表名 modify name varchar(20) unique; 修改字段类型,添加唯一约束
alter table 表名 add [constraint 约束匿名] unique (字段名);unique后不能有key.
添加外键约束: alter table 表名modify id int [constraint t1_t2] references t2(num); 通过修改字段类型添加外键约束
alter table 表名 add [constraint 外键匿名] foreign key (外键字段) references 被引用的表的表名(被引用的子段的字段名);
添加非空约束: alter table 表名modify 字段名 字段类型 not null;
注意:通过修改字段类型添加非空约束,如果删除非空约束,可以将"not null"换为"null". 若省去非空说明,则保持原来的约束.
添加检查性约束: alter table 表名modify 字段名 字段类型check(条件); 通过修改字段类型添加检查性约束.
alter table 表名 add [constraint 约束匿名] check(条件);
总结:五中约束条件都可以通过修改字段类型的方式,进行添加.
表结构操作:
alter table 旧表名 rename to 新表名; 或者 rename 表名 to 新名 /*修改表名*/
alter table 表名 modify 字段名 数据类型 /*修改字段的数据类型*/
alter table 表名 rename column 旧列名 to 新列名 /*修改字段名*/
alter table 表名 modify 字段名 default 默认值; /*修改字段的默认值*/
alter table 表名 add 新字段名 数据类型 约束条件 /*添加字段,默认添加在最后一个字段后面.没有after或者first.*/
alter table 表名 drop column 字段名 /*删除字段*/
将外部的sql文件导入到oracle中: start D:\文件名.sql 相当于mysql中的source D:\文件名.sql
导出数据库/表到外部:
等待解决的问题:
问题:mysql中的数据库(test,mydb等),对应oracle中的哪些,如果查看?
Oracle 中的实例:orcl select name from v$database;
问题: 查询某用户创建的表?
Select table_name from user_tables; //显示当前用户所拥有的所有的表,只返回用户对应方案中的所有表.
Select table_name from all_tables; //显示当前用户可以访问的有的表,返回用户对应方案的所有表.及其他方案中可以访问的表.
Select table_name from dba_tables; //显示所有方案拥有的数据表.要求用户有dba角色或者select any tables系统权限.
问题:Oracle的注释?
-- 注释内容
/* 我是多行注释*/
问题:oracle不能使用user,怎么处理?
User是oracle的关键字,如果必须创建user表,建表和删除表时,表名要加双引号. Create table “user” ....
问题:oracle的主键怎么添加自增长?
Oracle数据库的表的列没有自动增长的功能.可以通过编写序列或者触发器实现.
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;其中最大的值按字段的长度来定, 如果定义的自动增长的序列号 NUMBER(6) , 最大值为999999.INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL
问题: drop table if exists t1;的使用?
在oracle中不能使用if exists.
问题:查看某表的数据类型和约束条件?
查询某表的约束信息
Select table_name,constraint_type,search_condition,constraint_name from user_constraints where table_name='表名';.
constraint_type:约束类型代号(主键,外键,唯一等) search_condition:约束信息内容 constraint_name:外键匿名
select column_name,data_type From all_tab_columns where table_name=upper('表名') AND owner=upper('用户名');
查询某列的字段类型:
select DATA_TYPE from User_Tab_Columns t where t.column_name=upper('age') and T.TABLE_NAME=upper('表名');
问题:如何查看创建表的语句--show create table 表名; 查看视图的创建: show create view 视图名;
附加: 自增长序列
create sequence autoIncrement
increment by 1 --每次增加1
start with 1 -- 从1开始
nomaxvalue -- 没有最大值
nocycle -- 不循环
;
select autoIncrement.nextval from dual; 查询序列中的下一个数
select autoincrement.CURRVAL from dual; 查询序列中的当前数
讲课案例:
表操作使用例子:
Drop table t1;
Drop table t2;
create table t2 (id int primary key,num int unique);
create table t1(id int constraint p_id primary key ,name varchar(20) constraint u_name
unique,age int check(age>18 and age<100),sex char(2) default '男',address varchar(40) not null);
查看表的约束条件:Select table_name,constraint_type,search_condition,constraint_name from user_constraints where table_name='T2';