Oracle笔记

创建(删除)一个新的数据库(数据库实例)

        左下角开始菜单:绿色图标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对数据的数量也有要求,每个版本不一样,“套接字数量不够”“无效的主机绑定名”,都有可能是数据量太大

你可能感兴趣的:(数据库,mysql)