oracle03
来源:互联网 发布:mayo clinic 知乎 编辑:程序博客网 时间:2024/05/18 22:40
=======oralce============
1.not in 不等于 any
一。数据类型:
1.数字: number number(7) number(11,2)
2.字符串:char(n) varchar(n) varchar2(n)
//定长数据比较整齐,效率会高一点点:例如char(10)类似结构体对齐。但是其弱点是浪费空间比较大。 varchar(n)会动态调整空间,效率会低一点点。 varchar2(n)是oracle独有的,自动改成varchar2.
3.日期:date
--------------以上3个数据类型基本上可以解决90%的sql类型问题-----------------------
4.大字符类型 clob :最大4G空间
5.大二进制类型 blob:最大4G空间
单向加密:一旦加密就不可解。(只是一种概念罢了)
对称加密:可解。
二。标识符:命名罢了:长度1-30 必须以字符开头 _ $ # A-Z a-z 0-9
给表,字段 以及其他对象命名
建表:
create table 表名(
字段名 类型,
字段名 类型,
...
);
高级建表:as
create table cwjtab as select id,salary from s_emp where.1=2.....;复制表
1=2表示:条件不成立,可以只要表结构,不要数据。
constraint 约束,6年
插入数据:不commit就白做。
insert into 表名 values(字段1值,字段2值,null);commit;
高级的插入数据方式:(复制表)
1。insert into 表名 select id,name from s_emp xx;
2。insert into 表名(字段) select id from s_emp ; //其他字段要可以为Null
删除表:
drop table 表名: //如果创建表的时候没有commit,则drop表会失败。
修改表:
update cwjtab set salary=salary+10,name='qlr' where id=1; commit;
删除数据:
delete [from] cwjtab where id =1 ;commit;
**dml---insert delete update 数据操作语言:只有这种语句才具有事务特性。
transaction 事务,交易
A -2000;
B +2000;
commit;rollback to;//没提交,就撤销
事务特性:
1。原子性:事务的操作不可再分。最基本的操作单元,要么一起失败,要么一起成功
2。持久性:
3。一致性:同步一致
4。隔离性:事务和事务之间是相互的隔离的。
Savepoint A Savepoint B设置回滚点 rollback to A rollback to B rollback ;
:insert into cwj values(..1); savepoint a ;
insert into cwj values(..2); rollback to a;
约束:
1。主键约束:非空,唯一 primary key
2。非空约束:不能null not null
3。唯一约束:不能重复 unique
4。检查约束:不能乱来 check
5。外键约束:不能越界 foreign key references
约束的2个级别:即约束添加的2种方式;`
1。列级别:在创建表的时候的列上直接设置约束
2。表级别:在所有列定义完成之后,在表上给列再设置约束
没提交的表,是不可以删除滴,因为它的事情还没有做完。+
oralce的引号可以是:‘’ 也可以是 "",表示原样存储,不转换成大写。
作业:起2个终端,:1,2
1.insert into emp values(1,100) 不提交
2.同样insert .
3.观察操作结果有什么音响。
========下午==========
表级共享锁:
行级排他锁:dml操作影响的行,会加行级排他锁。即同时插入有约束的数据时会阻塞,直到那边commit;
二:表级约束方式:
create table cwj( id number,salary number, constraint "cwj_pk" primary key(id));
表级约束的优势:
1。联合主键。列级约束不能建联合约束。(id,salary)
id number constraint emp_pk primary key,//这是给这个主键取名叫 emp_pk
id number primary key //无名约束
2.多个约束的写法:加上逗号即可呗
3。非空约束:只有列级约束,没有表级。没有联合非空这一说!
注意:中间有空行,oracle会翻译不了。
………………………………………………………………………………………………………………………………………………
外键约束:(完整性约束)
主键:定义唯一的一个字段
子表:一个字段可以引用主表中的唯一性字段。primary key or unique;
如果子表中的字段和主表发生外键关系,子表中的字段只能取主表字段中的值。或者null值。
fid number [foreign key] references cwj(id)
外键可以为Null.
commit;
如果在表象上先删除父表中的数据,可以使用级联方式:级联删除。
drop table cwjtab cascade constraints;
先把所有的约束干掉,然后再删表。
……………………………………………………………………………………………………………………………………………………………………
级联删除:删除父表数据时,会先删除子表中相关联的数据。再删除子表中的数据。
xxxx on delete cascade 级联删除
级联置空:
xxxx on delete set null 删除父表时,子表中的外键变成空
级联更新:oracle 中没有,sqlserver中有 on update cascade
但是oracle使用触发器来完成这个级联更新操作。
执行脚本@
sqlplus openlab/open123 登录
@test.sql :执行脚本。用@号。
……………………………………………………………………………………………………………………………………………………………………
其他数据库对象:
1。序列 identity
是一个自增的数字对象,共享对象,可以替代用户的代码,可以用缓存加快主键的生成-为主键而生
create sequence 序列名(cwjtab_seq_pk);
select test_seq_pk.nextval from dual表名;调用nextval即可
例如:create table testseq( id number primary key , name varchar2(30) );
insert into testseq values(test_seq_pk.nextval,'cwj');
查看当前sequence的值:第一次查看之前必须调用一次nextval
select test_seq_pk.currval from dual;//当前值,前提必须调用国nextval
//调一次nextval,他会自动+1;
1.increment by n(1 5 8)步长可以设定,默认为1
2.start with n 起始值
3.maxvalue n | nomaxvalue 默认值,系统最大
4.cycle |nocycle 是否循环
5.cache n |nocache 默认是20个,人多的时候就慢。开发的时候要考虑一下。
数据字典:user_tables user_sequences放了所有用户sequences信息。
select cache_size from user_sequences where sequence_name='test_seq
_pk';//注意:要大写,否则找不着!! ='TEST_SEQ_PK';
建立序列:语法
create sequence s_sss
minvalue 1
maxvalue 100
increment by 10
start with 5
cache 3
cycle ;//中间没有任何分隔哦
drop sequence s_sss删除序列
日期类型:sysdate 代表系统时间 select sysdate from dual ;
默认字符串可以代表日期'dd-MON-yy' 'dd-MON-yyyy'
1999-2000千年虫,2位年不行,搞成4位年。大连青岛对日外包子
存储数据和显示数据 to_char(par1,'fm')
fm 日期相关的格式:
yyyy mm dd hh24 hh12 mi ss MON 英文三位月缩写 MONTH day 星期几
select to_char(start_date,'yyyy-mm-dd hh24:mi:ss day') from s_emp;
select to_char(start_date,'dd') from s_emp; //start_date是字段
存入日期:
年月日根据默认日期格式用字符串存入即可。2008-08-08 20:08:08
日期处理函数:可以把字符串按照格式变成日期;
create table test_date(
tdate date
);
insert into test_date values('08-AUG-2008');时分秒会丢弃掉,所以我么应该用日期函数。
select to_char(tdate,'yyyy-mm-dd hh24:mi:ss day') from test_date;
to_date('字符串','日期格式');
insert into test_date values(to_date('2008-08-08 20:08:08','yyyy-mm-dd hh24:mi:ss'));
日期的运算:
相减-------得到两个日期相差的天数:天数 :-减号运算符
例子:select sysdate-to_date('2008-08-08','yyyy-mm-dd') from dual ;
select sysdate-10 from dual;//10天前
1.select sysdate+1/(24*6) from dual; //10分钟后
现在到2008-08-08过了多少个月。
2.months_between(par1,par2);
select months_between(sysdate,to_date('2008-08-08','yyyy-mm-dd')) from dual;
3.add_months(sysdate,1);
select add_months(sysdate,1) from dual;
4.next_day('01-SEP-95','friday');//下一个星期5
select next_day(sysdate,'monday') from dual;可以得到下一个星期一(几)
5.last_day('01-SEP-95') 当前对应的月的最后一天。
select last_day(sysdate) from dual ;
作业:自学trunc round函数;计算给你任何一个时间得出这个时间下一个月的开始时间。
2。索引
3。视图
- oracle03
- oracle03
- oracle03
- Oracle03
- Day59-Oracle03
- Oracle03数据类型
- SQL-Oracle03-子查询
- C语言字符串,字符转数字,数字转字符
- linux下模拟按键输入和模拟鼠标
- 检测按键
- python 各种模块学习
- linux omfs文件系统利用bitmap管理空闲磁盘空间
- oracle03
- linux文件系统omfs的目录创建和删除
- 黑马程序员 01基础知识 for 语句等
- PhoneGAP实战笔记(一)
- 女子不满被骗刺死已婚男友获刑14年(图)
- iPhone 4S获入网许可 国行销售进入倒计时
- 嵌入式工程师经典面试题
- oracle中解决角色PLUSTRACE不存在
- linux 反汇编objdump