• 数据表的基本操作


    1. SQL语句
    1.1. CREATE语句
    创建BOOKINFO表:
    CREATE TABLE BOOKINFO
    (
    BOOKID NUMBER ,
    BOOKNAME CHAR ,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50)
    );
    1.2. 修改用户密码
    ALTER USER SYSTEM BY IDENTIFIED BY ROOT123;
    ALTER USER SYSTEM ACCOUNT UNLOCK;
    GRANT CONNECT TO SYSTEM IDENTIFIED BY ROOT123;
    1.3. 查看当前用户表
    SHOW USER;
    SELECT TABLE_NAME FROM TABS;
    SELECT TABLE_NAME FROM USER_TABLES;
    SELECT TNAME FROM TAB;
    1.4. 约束
    1、约束
    约束用于确保数据库数据满足特定的商业规则。在Oracle中,约束包括:not null、unique、primary key, foreign key和check五种。
    A、not null(非空)
    如果在列上定义了not null,那么当插入数据时,必须为列提供数据。
    B、unique(唯一)
    当定义了唯一约束后,该列值是不能重复的,但是可以为null。
    C、primary key(主键)
    用于唯一的标识表行的数据,当定义主键约束后,该列不但不能重复而且不能为NULL。一张表最多只能有一个主键,但是可以由多个unique约束。
    D、foreign key(外键)
    用于定义主表和从表之间的关系,外键约束要定义在从表上,主要则必须具有主键约束或是unique约束,当定义外键约束后,要求外键列数据必须在主表的主键列存在或是为NULL。
    E、check
    用于强制行数据必须满足的条件,假定在sal列上定义了check约束,并要求sal列值在1000~2000之间,如果不在1000~2000之间就会提示出错。

    1.4.1. 检查约束
    创建语法:
    CONSTRAINT constraint_name CHECK (condition)
    Condition:用来唯一标识表中一个列,一个表中的主键约束只能有一个,但是可以在一个主键约束中包含多个列;
    CREATE TABLE BOOKINFO
    (
    BOOKID NUMBER ,
    BOOKNAME CHAR ,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50),
    CONSTRAINT CK_PRICE CHECK (PRICE>= 0 AND PRICE<=100)
    );
    1.4.2. 非空约束表
    给字段后面添加NOT NULL;
    CREATE TABLE BOOKINFO_01
    (
    BOOKID NUMBER NOT NULL ,
    BOOKNAME CHAR NOT NULL,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50)
    );
    1.4.3. 唯一约束的表
    语法:
    CONSTRAINT constraint_name UNIQUE(colume_name)
    CREATE TABLE BOOKINFO_02
    (
    BOOKID NUMBER NOT NULL ,
    BOOKNAME CHAR NOT NULL,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50),
    CONSTRAINT UN_BOOKNAME UNIQUE(BOOKNAME)
    );
    1.4.4. 外键约束表
    语法:
    CONSTRAINT constraint_name FOREIGE KEY(colume_name)
    REFERENCE table_name(colume_name)
    关键字说明:
    CONSTRAINT:创建约束的关键字
    FOREIGE KEY:外键约束的关键字
    REFERENCE:引用外表的关键字
    table_name(colume_name):引用外表(父表),colume_name表示该表的列
    注意:主外键字段的数据类型必须要相同;
    --创建父表
    CREATE TABLE PUBLISHINFO
    (
    PUBLISHID VARCHAR2(20) PRIMARY KEY,
    PUBLISHNAME VARCHAR2(30)
    );
    --创建字表
    CREATE TABLE BOOKINFO_03
    (
    BOOKID NUMBER NOT NULL ,
    BOOKNAME CHAR NOT NULL,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50),
    CONSTRAINT FK_PUBLISH FOREIGN KEY(PUBLISH) REFERENCES PUBLISHINFO(PUBLISHID)
    );
    1.4.5. 含多个约束的表
    CREATE TABLE BOOKINFO_05
    (
    BOOKID NUMBER NOT NULL ,
    BOOKNAME CHAR NOT NULL,
    PUBLISH VARCHAR2(20),
    PUBDATE VARCHAR2(20),
    PRICE DECIMAL(7,2) DEFAULT 0.0,
    AUTHOR CHAR,
    STORE INT DEFAULT 0 NOT NULL,
    READER NUMBER,
    REMARKS VARCHAR2(50),
    CONSTRAINT UN_BOOKNAME_05 UNIQUE(BOOKNAME),
    CONSTRAINT CK_PRICE_05 CHECK (PRICE <= 100)
    )
    1.5. 修改表
    1.5.1. 修改表结构
    语法:
    ALTER TABLE table_name ADD colume_name | MODIFY colume_name | DROP COLUME colume_name
    --ADD
    ALTER TABLE BOOKINFO ADD ISBN VARCHAR2(10);
    --MODIFY
    ALTER TABLE BOOKINFO MODIFY PUBLISH VARCHAR2(80) NOT NULL;
    --DROP
    ALTER TABLE BOOKINFO DROP COLUMN ISBN;
    1.5.2. 给表添加约束(主键)
    语法:
    ALTER TABLE table_name ADD colume_name CONSTRAINTS constraint_name PRIMARY KEY(colume_name)
    --添加主键
    ALTER TABLE BOOKINFO ADD CONSTRAINT PK_BOOKINFO PRIMARY KEY (BOOKID);
    --删除主键
    ALTER TABLE BOOKINFO DROP CONSTRAINT PK_BOOKINFO;
    1.6. 表
    1.6.1. 删除表
    语法:
    DROP TABLE <table_name>;
    DROP TABLE BOOKINFO_05;
    1.6.2. 清空表内容
    语法:
    DELETE FROM table_name;
    DELETE FROM BOOKINFO_02;
    语法:(截断表)
    TRUNCATE TABLE table_name;
    TRUNCATE TABLE BOOKINFO_03;
    语法
    delete from aa
    truncate table aa
    区别
    1.delete from后面可以写条件,truncate不可以。
    2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
    3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
    4.当使用行锁执行DELETE语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
    5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
    6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
    总结
    1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
    2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
    3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动显然drop语句将表所占用的空间全部释放truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate会将高水线复位(回到最开始)。
    4.速度,一般来说: drop> truncate > delete。
    5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
    6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大,想删除表,当然用drop想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
    1.6.3. 重命名表
    语法:
    RENAME oldname TO newname;

  • 相关阅读:
    DataTable distinct 去重复
    EF 实体字段设置主键和自增
    select into from 和 insert into select 的用法
    EF的 JOIN操作
    Linq左关联 右关联 内关联
    MySQL MGR集群搭建
    论用户体验测试:牛逼的功能千篇一律,好的体验万里挑一
    Spring Cloud使用总结
    数据采集与分析的那些事——从数据埋点到AB测试
    如何能低成本地快速获取大量目标用户,而不是与竞争对手持久战?
  • 原文地址:https://www.cnblogs.com/qlwang/p/6660379.html
Copyright © 2020-2023  润新知