目录
前言
2020-06-01
六月第一天,开始记一个超长笔记。
只作为个人的笔记,供自己查看阅读。
这篇不算文章,权当做个笔记,不然返回去找一些东西,时间长了还是会忘记,而且有些东西确实记不住在哪里了。
一、oracle数据库
1、oracle用户和账号
本地虚拟机centos7,普通用户ssc_oracle和数据库用户oracle
1)本地数据库账号
账号scott/tiger
数据库连接参数:
2)服务器数据库账号
数据库连接参数:
数据库连接参数文件:
2、数据库准备
1)数据库启动、关闭
启动数据库:dbstart
关闭数据库:dbshut
2)监听启动、关闭、状态
启动监听:lsnrctl start
关闭监听:lsnrctl stop
数据库监听状态
没有启动
已经启动
3、采用sqlplus登录数据库
使用账号scott/tiger
登录
退出
4、数据库操作
1)创建表(sqlplus下)
2)查询表(客户端-PLSQL Developer)
sqlplus下查询
3)删除表(sqlplus下)
注意
如果出现未选定行的提示,有可能是没有提交事务。执行commit。
drop table tablename;
drop删除表将删除表中所有数据,不产生事务
5、PLSQL Developer使用技巧(个别)
1)执行单条SQL语句
如果不设置,(F8)默认执行全部语句,选中AutoSelect statement之后可以只执行光标所在行的SQL语句。
2)格式化sql语句,避免sql语句写太长
3)自动替换
创建文本文档shortcuts.txt,编辑写入常用语句
i=insert
u=update
s=select
f=from
w=where
o=order by
d=delete
df=delete from
sf=select * from
sc=select count(*) from
sfu=select * from for update
cor=create or replace
v=view;
保存在目录PLSQL_Developer->PlugIns下
应用替换文件shortcuts.txt
替换测试,输入s,按空格,变成selsct,输入sf,按空格,变成selsct * from。
4)直接操作表
删除一行,插入一行,修改数据。。。
5)SQL window注释
代码前加--
6、oracle表操作(pl/sql developer)
1)创建表
创建表table
select * from table;
创建表t_girl
设置主键
一个表创建之后需要对这个表中的一个字段设置为主键:
table_name—表名
alter table table_name add primary key (id);
2)插入数据
向表t_girl中插入一条数据
3)查询数据
查询记录数
select count(*) from table_name;
条件查询、排序
select * from table_name where 字段=查找的值;
按某一或多列查询并排序
降序在属性后面加desc
,不加默认升序(asc
),也可以同时按多列查询,增加属性即可。
查询时间date
系统时间
转换格式
'yyyy-mm-dd hh24:mi:ss'
都是可选字段
4)修改数据
2、3行除了ID一样,修改第三行
修改第二行
5)删除数据
删除第四行数据
delete from t_girl where id ='000004';
不加where条件表示删除全部数据。
写法2:
delete from t_girl where id in ('000004');
或者
delete t_girl where id in ('000004');
一般不省略
6)delete、truncate 删除表数据区别
1)delete from tablename where ...;
用delete删除数据时,只删除数据,不释放空间,产生碎片。
2)truncate table tablename;
删除表中所有数据,并且回收存储空间,truncate不产生事务。
7)SQL语言
查询语句:select
DML(data manipulation language,数据操作语言)语句:主要由insert、update和delete三个关键字完成。
DDL(data definition language,数据定义语言)语句:主要由create、alter、drop和truncate四个关键字完成。
DCL(data control language,数据控制语言)语句:主要由grant(增加权限)和revoke(撤销权限)两个关键字完成。
事务控制语句:commit、rollback和savepoint。
7、sql语句小技巧
1)查看表结构
desc tablename
2)重复执行上一句sql语句
/
3)显示上一句sql语句
l
4)替换上一句sql语句中的值
c/要替换的内容/替换内容
5)去除字段名信息,只显示数据
例如:执行select * from t_girl;
直接查询的结果会存在表的字段名信息
去除字段名信息,只显示数据,set head off
,再执行查询语句(/
重复上一次sql语句)
二、oracle事务
事务举例
创建两张表,一张表放账户信息,另一张记录账户信息变更的日志
这四句SQL语句是一个事务,如果其中一条SQL执行失败要使全部都执行失败,报错。
--提交事务(永久写到数据库)
commit;
--回滚事务(撤销刚才的操作)
rollback;
三、shell和环境变量
1、shell
1)创建shell脚本(我理解为一个批处理文件)
vi test.sh
2)写入命令
3)执行脚本
sh tsst.sh
或者./test.sh
2、linux环境变量
显示所有环境变量
env
PATH 设置执行程序的搜索路径
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ssc_zcys/.local/bin:/home/ssc_zcys/bin
全局环境变量
vi /etc/profile
用户环境变量
vi /home/ssc_zcys/.bash_profile
以上两种都是永久有效的修改,临时有效的方法:
export 变量名=变量值
3、oracle环境变量
su oracle
只切换用户权限,不切换环境(假设原先是root用户、root环境)
su - oracle
用oracle(自己起的账户名字 )登录oracle数据库,并使用oracle用户的环境
四、C语言操作数据库
1、makefile(oracle数据库相关操作下的makefile)
(/oracle/freecplus/db/oracle/makefile
)
(oracle数据库相关操作下的makefile)
-I
指定头文件的搜索目录 /oracle/home/rdbms/public
-L
指定库文件的搜索目录 /oracle/home/lib
-l
指定链接库名 libclntsh.so
简单的情况下,头文件在当前目录,否则就需要像上面一样链接
例如:(我虚拟机centos(名:oracle)上安装的oracle数据库)
oracle头文件路径
oracle库文件路径
动态库,后缀.so
libclntsh.so
是 /oracle/home/lib/libclntsh.so.11.1
的一个软链接
动态库和静态库
动:编译时不载入目标代码,程序执行到相关函数才进行调用。
静:编译过程中载入静态库的代码到程序中。
同一个程序分别使用两种方式进行链接时,静态链接生成的文件所占用的内存要远远大于动态链接所成成的文件。
*创建表示例
编译程序:make createtable
执行程序:./createtable
1、成功情况
2、失败情况
1)错误代码ORA-01017
,账户密码不对。
2)表存在,已经创建
2、oracle数据类型
1)字符串
char
定长字符串,最大长度2000
char(10)包含10字节,不够十个字节补空格
varchar2
变长字符串,最大长度4000
char和varchar2比较
char比varchar2快(char的存储是对齐的,查找更快)
2)数字
number不指定长度,默认38位
number(10,3),指定长度为10,小数点后3位,例如123.456
注意:存储精度会四舍五入,例如123.4567会存储为123.457
3)日期
date
7个字节,存储 世纪、年、月、日、时、分、秒
4)二进制及大文本数据
CLOB
变长的字符串大对象
适合存储纯文本信息
BLOB
变长的二进制大对象
存储电子表格、word、图像
word不是纯文本,是二进制文本。
如果都用BLOB存储,问题也不大。
oracle数据库用于高性能数据的存放,一般不存储表格、word、图像、视频。只是不建议,如果占用空间比较小,也可以存。
结构化数据 — 表格 (有行有列)
非结构化数据 — 图片、视频
3、oracle数据库字符集
1)查看oracle server端字符集
select userenv ('language') from dual;
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
2)查看oracle client端的字符集
在unix平台下,字符集就是环境变量NLS_LANG
echo $NLS_LANG
Simplified Chinese_China.ZHS16GBK
如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集
3)支持中文的字符集
…(待完善)
oracle存储过程 PL/SQL过程
这是oracle存储过程的基本结构,aaa是存储过程的一个名字
存储过程不提供调试的方法,所以调试是一件很麻烦的事情