Oracle数据库常用操作笔记

1、关于建立数据表相关操作:

1.1、建表语句实例

-- 创建表,表名为:TEST_TABLE_NAME
CREATE TABLE TEST_TABLE_NAME(
    ID NUMBER NOT NULL ,--设置表主键
    RELATION_SEX NUMBER DEFAULT -1 NULL,--设置主角性别字段,默认值为-1
    BIRTHDAY DATE,--设置主角生日字段
    DESCRIPTION VARCHAR2(128) DEFAULT '初始值' NULL,--设置主角基本信息字段,不为空
    DATE2CHAR VARCHAR2(64) --设置日期转字符串字段
);

1.2、为表列添加主键

-- 修改表,为表添加主键,主键为列ID
ALTER TABLE TEST_TABLE_NAME ADD PRIMARY KEY ("ID");

1.3、为表各字段添加注释

-- 为表添加注释
COMMENT ON COLUMN TEST_TABLE_NAME.ID is '主键';
COMMENT ON COLUMN TEST_TABLE_NAME.RELATION_SEX is '主角性别';
COMMENT ON COLUMN TEST_TABLE_NAME.BIRTHDAY is '主角生日';
COMMENT ON COLUMN TEST_TABLE_NAME.DESCRIPTION is '主角介绍';
COMMENT ON COLUMN TEST_TABLE_NAME.DATE2CHAR is '字符串格式的日期';

1.4、删除操作

-- 条件删除指定数据
DELETE FROM TEST_TABLE_NAME WHERE ID = 6;
-- 删除改表中的所有数据,但是不删除表结构
TRUNCATE TABLE TEST_TABLE_NAME;
-- 删除表所有数据,也删除表结构
DROP TABLE TEST_TABLE_NAME; 

2、关于设置主键自增的相关操作

推荐使用方法一

方法一:设置自增序列+创建触发器

2.1.1、创建自增序列

-- 第一步:创建一个自增序列
CREATE SEQUENCE SEQ_TEST_TABLE_NAME
    MINVALUE 1 -- 设置序列最小值
    MAXVALUE 99999999999999999999 --设置序列最大值,这里设置了20位
    START WITH 1 --设置从1开始自增
    INCREMENT BY 1 -- 设置每次自增1
    NOCYCLE --设置序列达到最大值后是否循环,CYCLE or NOCYCLE
    CACHE 20 --指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE
    NOORDER ; --设置是否按照请求的顺序产生序列,ORDER or NOORDER

2.1.2、创建触发器

-- 第二步:创建一个触发器
CREATE OR REPLACE TRIGGER TIG_TEST_TABLE_NAME_INSERT
    BEFORE INSERT ON TEST_TABLE_NAME
    FOR EACH ROW
    BEGIN
        -- 关于下一行代码相关注释:
        -- 查询序列的写一个值,作为表新一行ID列主键的值,
        -- :NEW.主键列,ID是该表的主键,其中FROM DUAL是固定写法
        SELECT SEQ_TEST_TABLE_NAME.nextval INTO :NEW.ID FROM DUAL;
    END;

2.1.3 关于序列与触发器的删除

-- 触发器和序列删除语句实例:
DROP TRIGGER TIG_TEST_TABLE_NAME_INSERT;--删除触发器
DROP SEQUENCE SEQ_TEST_TABLE_NAME;--删除序列

方法二:设置自增序列+显示调用序列的值插入

2.2.1、创建自增序列

-- 与2.1.1创建方式相同
-- 第一步:创建一个自增序列
CREATE SEQUENCE SEQ_TEST_TABLE_NAME
    MINVALUE 1 -- 设置序列最小值
    MAXVALUE 99999999999999999999 --设置序列最大值,这里设置了20位
    START WITH 1 --设置从1开始自增
    INCREMENT BY 1 -- 设置每次自增1
    NOCYCLE --设置序列达到最大值后是否循环,CYCLE or NOCYCLE
    CACHE 20 --指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE
    NOORDER ; --设置是否按照请求的顺序产生序列,ORDER or NOORDER

2.2.2、显示调用序列的下一个值插入

-- 第二步:显示调用序列的下一个值插入
INSERT INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (1, SYSDATE, '主角一号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO TEST_TABLE_NAME
VALUES (SEQ_TEST_TABLE_NAME.currval, 0, SYSDATE, '主角二号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO TEST_TABLE_NAME(ID, RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (SEQ_TEST_TABLE_NAME.currval, 1, SYSDATE, '主角三号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO TEST_TABLE_NAME(ID, RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (SEQ_TEST_TABLE_NAME.currval, 1, SYSDATE, '主角四号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO TEST_TABLE_NAME(ID, RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (SEQ_TEST_TABLE_NAME.currval, 1, SYSDATE, '主角五号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

INSERT INTO TEST_TABLE_NAME(ID, RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (100, 1, SYSDATE, '主角六号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));--注意,此处如果创建方法一的触发器的话,该语句创建的主键的值为6

3、关于批量插入的相关操作

前言:
一条SQL语句批量插入数据到数据库:
(1)INSERT INTO 某表 VALUES(各个值),VALUES(各个值),…;
(2)多个INSERT INTO VALUEES(各个值);以“;”隔开一同执行
以上两种方法OracleSQL Server都不支持,MySQL支持
针对Oracle数据库,有以下两种批量插入方法
方法一:

扫描二维码关注公众号,回复: 15185434 查看本文章
--批量插入数据操作,方法一:
INSERT ALL
    INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR) VALUES (0, SYSDATE, '主角一号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'))
    INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR) VALUES (0, SYSDATE, '主角二号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'))
    INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR) VALUES (0, SYSDATE, '主角三号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'))
SELECT 1 FROM DUAL;

方法二:

--批量插入数据操作,方法二:
INSERT INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
    SELECT 1, SYSDATE, '主角四号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
UNION ALL
    SELECT 1, SYSDATE, '主角五号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL
UNION ALL
    SELECT 1, SYSDATE, '主角六号诞生', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

4、关于数据CRUD的一些操作

4.1、数据查询

-- 将RELATION_SEX字段值为0设置为‘女’,字段值为1设置为‘男’
SELECT 
	RELATION_SEX AS 性别编号, 
	CASE WHEN RELATION_SEX = 0 THEN '女' ELSE '男' END AS 性别
FROM TEST_TABLE_NAME
WHERE ID IS NOT NULL;

4.2、数据增删改查操作

-- 删除掉ID值为6的那一行信息
DELETE FROM TEST_TABLE_NAME WHERE ID = 6;

-- 修改ID值为7的主角信息
UPDATE TEST_TABLE_NAME SET DESCRIPTION = '主角' WHERE ID = 7;

-- 插入一条数据
INSERT INTO TEST_TABLE_NAME(RELATION_SEX, BIRTHDAY, DESCRIPTION, DATE2CHAR)
VALUES (1, SYSDATE, '主角', TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));

-- 查询ID不为空的所有数据
SELECT * FROM TEST_TABLE_NAME WHERE ID IS NOT NULL;

猜你喜欢

转载自blog.csdn.net/weixin_43730812/article/details/128451529