创建(删除)一个新的数据库(数据库实例)
左下角开始菜单:绿色图标Database Configuration Assistant Application
system 系统账户
sys 本地账户 一般不用密码(除非自己设置)本地最高权限
创建(删除)监听程序(没有监听程序数据库不能接受客户端请求)
左下角开始菜单:蓝色Net Configuration Assistant
SQL*Plus 数据库管理工具
1启动:(1)开始菜单,SQL plus
(2)cmd 输入sqlplus
2登录 (1)本地管理员登录sys用户:sys/password as sysdba 一般不用密码
(2)网络用户登录system用户:system/password
3断开:disconn
4申请重新连接:conn
5连接数据库:一般情况下连接默认数据库,既注册表中ORACLE_SID指定的用户
连接指定数据库:用户名/密码 @SID(数据库名) 例:system/pasword @houzhijie
6可能遇到的错误
(1)[ORA-12560:TNS:协议适配器错误]
解决方法:1监听程序正常启动
2Oracle数据库实例服务正常运行
3修改注册表默认SID为存在的Oracle数据库(运行regedit)
PL/SQL Developer同上
可视化工具,百度安装
本地网络服务配置(通过配置本机服务从而访问远程Oracle数据库)
1.打开Net Configuration Assistant-->本地Net服务名配置-->添加-->输入目标数据库名-->TCP协议-->远程主机IP,oracle端口-->不测试-->自定义一个网络服务名-->完成
2.本地配置文件配置:
打开数据库文件目录F:\app\houzhijie\product\12.2.0\dbhome_1\network\admin-->编辑tnsnames.ora文件
create创建数据表:
CREATE TABLE table_name(
colum_name colum_type [not null],
colum_name colum_type [not null],...
[constraint](为表中的列设置约束,如:主键,外键,检查等)
)
例:创建一个学生表:
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sec char(2) not null,
stu_age number(2),
stu_tel char(11)
)
char为定长字符,varchar2为可变字符,number为数值类型,可不指定长度
alter修改表
新增一列:ALTER TABLE table_name ADD column_name column_type
例:向学生表插入一列邮箱列(stu_email)
alter table tb_student add stu_email varchar2(50)
修改列的类型:ALTER TABLE table_name MODIFY column_name column_type
例:修改邮箱列长度为30(列名不能修改)
alter table tb_student modify stu_email varchar2(30)
删除列:ALTER TABLE table_name DROP COLUMN column_name
例:删除学生表中的邮箱列
alter table tb_student drop column stu_email
drop删除数据表
DROP TABLE table_name
例:删除学生信息表
drop table tb_student
主键约束
1.创建表时添加主键约束
CREATE TABLE table_name(
column_name type primary key,
...
)
例:创建学生表,主键为学号
create table tb_student(
stu_num char(10) not null primary key,
stu_name varchar2(10) not null,
stu_sec char(2) not null,
stu_age number(2),
stu_tel char(11)
)
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sec char(2) not null,
stu_age number(2),
stu_tel char(11),
primary key(stu_num)
)
2创建表后添加主键
ALTER TABLE table_name ADD CONSTRAINTES constraint_name PRIMARY KEY(column_name)
alter table tb_student add constraints pk_student primary key(stu_num)
pk_student 是这个主键的名称
联合主键(2个或2个以上的字段为主键)
1创建时添加联合主键
CREATE TABLE table_name(
...,
primary key(column_name1,column_name2...)
)
例:创建学生成绩表,course_id和stu_num为联合主键
create table tb_grade(
course_id char(3),
course_name varchar2(20),
stu_num char(10),
sut_name varchar(10),
source number(3),
primary key(course_id,stu_num)
)
注:联合主键声明只能在最后,不能写多个primary key
2成绩表之后添加联合主键
ALTER TABLE table_name ADD CONSTRAINTES constraint_name PRIMARY KEY(column_name1,colunm_name2...)
alter table tb_grade ADD constraints pk_grade primary key(course_id,stu_num)
外键约束
1在创建表时添加外键
CREATE TABLE table_name(
...,
CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) ON DELETE CASCADE
)
ON DETETE CASCADE:设置级联删除,主键字段删除时,外键所对应的字段也同时被删除(可写可不写)
例:将学生表的stu_cid连接到classes表的class_id
create table tb_classes(
class_id char(2) primary key,
class_name varchar(10) not null,
class_leader varchar(10) not null,
class_desc varchar(200)
)
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sec char(2) not null,
stu_age number(2),
stu_tel char(11),
stu_cid char(2),
constraint pk_student_class foreign key(stu_cid) references tb_classes(class_id) on delete cascade
)
2修改数据表时添加外键
ALTER TABLE table_name ADD CONSTRAINTS constraint_name FOREIGN KEY(column_name) REFERENCES table_name(column_name) ON DELETE CASCADE;
alter table tb_student add constraints pk_student_classes foreign key(stu_cid) references tb_classes(class_id) on delete cascade
3删除外键(主键)约束
ALTER TABLE table_name DROP CONSTRAINTS constraint_name
CHECK约束
1.创建时添加
CREATE TABLE table_name(
...,
CONSTRAINT constraint_name CHECK(约束条件)
)
例:为学生表的性别,年龄添加约束
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11),
stu_cid char(2),
constraint ck_student_sex check(stu_sex='男' or stu_sex='女'),
constraint ck_student_age check(stu_age between 6 and 30)
)
2修改表时添加
ALTER TABLE table_name ADD CONSTRAINTS constraint_name CHECK(约束条件)
alter table tb_student add constraints pk_student_sex check(stu_sex='男' or stu_sex='女')
3删除约束
与删除主外键约束一样
UNIQUE约束
1创建时添加
CREATE TABLE table_name(
...,
CONSTRAINT constraint_name UNIQUE(column_name)
)
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11),
stu_cid char(2),
constraint uq_student_tel unique(stu_tel)
)
create table tb_student(
stu_num char(10) not null,
stu_name varchar2(10) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11) unique,
stu_cid char(2)
)
2修改时添加
ALTER TABLE table_name ADD CONSTRAINTS constraints_name UNIQUE(column_name)
alter table tb_student add constraints uq_student_tel unique(stu_tel)
NOT NULL约束
1创建时添加
2修改时添加
ALTER TABLE table_name MODIFY column_name NOT NULL
添加数据
1使用insert直接添加(添加完要commit提交)
INSERT INTO table_name(column_name1,column_name2,...) values(data1,data2,...)
insert into tb_student(stu_num,stu_name,stu_sex) values('1821074101','张三','男')
2通过其他表添加数据
INSERT INTO table_name(column_name1,column_name2,...)
SELECT column_name1,column_name2,... FROM other_table_name
insert into tb_student2 select * from tb_student
3创建数据表时添加数据(复制其他表)
CREATE TABLE table_name AS
SELECT column_name1,column_name2,... FROM source_table;
create table tb_student3 as select * from tb_student2
修改数据(记得commit提交)
UPDATE table_name SET column_name1=data1,column_name2=data2,... WHERE conditions;
update tb_student set stu_age=18 where stu_num='1821074101'
删除数据
DELETE FROM table_name WHERE conditions
delete from tb_student3 where stu_num='1821074101'
查询数据
DISTINCT:去重(SELECT后面加) ALL:所有
GROUP BY:分组 HAVING:对分组后的数据筛选 必须跟在GROUP BY后面
ORDER BY:排序规则 DESC:降序 ASC:升序 默认升序
排序时NULL值处理 ASC NULLS FIRST
DESC NULLS LAST
AS:取别名(oracle取别名不用 ' ')
subStr(column_name,int a,int b) 截取字符串 a:起始外置,b:取几位
运算符:
IS NULL 是NULL IS NOT NULL 不是NULL,
LIKE 模糊查询 like '% %' like '_ _' %任意多个字符 _任意一个字符,
BETWEEN..AND.., IN,=ANY,!=ALL
聚合函数:
count() count(*) count(column_name),
sum() 求和,max(),min(),avg()平均值
连接查询:
1内连:只查询两表中匹配的数据,不匹配的不显示
where table_name.column_name=table_name1.cloumn_name1
from table_name INNER JOIN table_name1 ON table_name.column_name = table_name1.cloumn_name1
2外连
左外:LEFT JOIN 左边全显示,右边显示匹配信息
右外:RIGHT JOIN 与左相反
全外:FULL JOIN 全显示
3自连
自己连自己
内置函数
数值函数:
ABS(n):绝对值,MOD(m,n):取余,SIGN(n):判断正负 正 1 负 -1
select ABS(-10) from dual
select MOD(-10,3) from dual -- -1
select SIGN(-10) from dual -- -1
三角函数:SIN(n),SINH(n),ASIN(n),COS(n),COSH(n),ACOS(n),TAN(n),TANH(n),ATAN(n)
参数为弧度
select COS(3.141592653) from dual -- -1
数值取整:CEIL(n):只入不舍(向上取整),FLOOR(n):只舍不入(向下取整),ROUND(n):四舍五入(最接近的整数)
select CEIL(1.01) from dual -- 2
select floor(1.9) from dual --1
select ROUND(2.5) from dual --3
SQRT:平方根(开根号)
select SQRT(4) from dual --2
POWER(m,n):次幂运算
select POWER(2,10) from dual --1024
LOG(m,n),LN(n):对数
select LOG(3,9) from dual --2
select LN(2.74555) from dual --1.00998141918997
字符函数
CHR(n),ASCII(char)
select CHR(97) from dual --a
select ASCII('d') from dual --100
LENGTH(char)
select LENGTH(stu_name) from tb_student -- 张三
SUBSTR(char,pos,len):截取字符串
select SUBSTR('123456',3,3) from dual --345
CONCAT(char1,char2):字符串拼接
select CONCAT('asf','asdf') from dual --asfasdf
INSTR(char1,char2,pos,n):字符串搜索(从第pos个位置开始找,第n次出现)
select INSTR('1523456','5',3) from dual --6
select INSTR('1523456','5',3,2) from dual --0
UPPER(char),LOWER(char),INITCAP(char):大小写转换
select UPPER('abc') from dual --ABC
select LOWER('ABC') from dual --abc
select INITCAP('abc') from dual --Abc
REPLACE(char1,char2,char3):替换字符串
select REPLACE('hello','l','abc') from dual --heabcabco
LPAD(char1,n,char2):左填充,RPAD(char1,n,char2):右填充
select LPAD('hello',10,'?') from dual --?????hello
select RPAD('hello',12,'0') from dual --hello0000000
TRIM(char),TRIM(TRAILING char1 FROM char2),RTRIM(char),LTRIM(char):删除首尾字符
select TRIM(' abc ') from dual --abc
select RTRIM(' abc ') from dual -- abc
select LTRIM(' abc ') from dual --abc
select TRIM(trailing 'a' from 'aba') from dual --ab
使用MyBatis对Oracle批量操作
0,心得
(1)查询数据的时候,idea如果用实体类接受信息,那么实体类的字段里面不能有下划线,否则无法匹配值,只能得到null,查询的字段如果需要大写,那么要用resultMap匹配,
1,批量插入
(1)直接insert,内部进行foreach
insert into table_name
(
column_name1,
column_name2,
column_name3,
...
)
select
#{item.column_name1,jdbcType=VARCHAR},
#{item.column_name2,jdbcType=VARCHAR},
#{item.column_name3,jdbcType=VARCHAR},
...
from dual
注:jdbcType=VARCHAR大部分时候都要写,否则会报“无效的列类型”,如果参数里面有日期,需要注意它的格式类型,如果传入的是Date类,可以直接传,如果是Timestemp,参数的时间类型会出错,“2022-01-01 12:00:00.0”,它后面会多一个.0,要把它去掉才能传
to_date(to_char(#{item.time},"yyyy-mm-dd h24:mi:ss"),"yyyy-mm-dd h24:mi:ss")
批量插入的时候oracle对数据的数量也有要求,每个版本不一样,“套接字数量不够”“无效的主机绑定名”,都有可能是数据量太大