美文网首页
4、oracle之认识表

4、oracle之认识表

作者: 如果不是废物谁又愿混吃等死 | 来源:发表于2018-08-22 18:39 被阅读0次

    表:表空间里的基本存储单元,表其实是我们存储数据的一个最基本的单位;

    在数据库中的表都是一个二维结构(由行和列组成的,一行可以称作一条记录,列可以称作域或者是字段);

    在一张表中,每一列的数据必须具有相同的数据类型;列名要具有唯一性;每一行得数据也要保证其唯一性。

    字符型数据类型:

    固定长度的数据类型:CHAR(n)类型;NCHAR(n)类型;

    CHAR类型的n的最大值是2000;NCHAR类型的n的最大值是1000,一般用NCHAR类型类存储文字类型;

    可变长度的数据类型:VARCHAR2(n)类型;NVARCHAR(n)类型;

    VARCHAR2(n)类型的n最大值是4000,NVARCHAR(n)类型的n的最大值是2000;

    数值型数据类型:

    包括整数和小数两部分;

    NUMBER(p,s)类型:是Oracle中比较常用的的一个数值型,p在这里代表这有效数字,而s则可以理解为效数点后的位数,也可以理解为是一个范围,若s为一个正数,则s的意义就是从小数点到最低有效数字的位数;若s为一个负数,则s的意义就是从小数点到最大有效数字的位数。

    例:NUMBER(5,2)==有效数字是五位,保留两位小数。

    FLOAT(n)类型:主要是用来存储二进制数据,还能表示二进制的位数是1~126位(若将二进制数转换成10进制数,则需要将这个数乘以:0.30103);

    日期型数据:

    DATE类型:DATE类型的存储范围是从公元前4712年1月1日到公元9999年12月31日,DATE类型可以精确到秒的数据类型。

    TIMESTAMP类型:时间戳类型,能精确到小数秒的数据类型。

    其他类型:

    存放大对象的数据:BLOB类型(以二进的形式来存放数据,最大值为4GB)和CLOB类型(以字符串的形式来存放数据,最大值为4GB)

    创建表的基本语法:

    CREATE TABLE table_name

    {

        columu name datatype,....

    }

    注:在同一个用户下,表名要是唯一的


    增加、修改、删除表中字段(修改类型)

    ALTER TABLE table_name ADD/MODIFY column_name datatype;

    ALTER TABLE table_name DROP COLUMN column_name;

    修改字段名

    ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;

    修改表名

    RENAME table_name TO new_table_name;

    删除表:

    TRUNCATE TABLE table_name(删除表当中的全部数据,也叫做截断表,相对于delete来说速度要快很多);

    DROP TABLE table_name(删除整个的表结构,同时表中数据也会随之删除)

    添加数据

    INSERT INTO table_name(column1,column2,...) VALUES (value1,value2,...);

    添加数据时,值的个数、类型和顺序必须和字段的个数、类型和顺序相同。

    如果向表中的所有字段添加值,则INSERT INTO table_name VALUES( (column1,column2,...)

    给字段添加默认值

    —1、在创建表的时候添加默认值:

    CREATE TABLE table_name(column_name datatype DEFAULT def_value,...);

    —2、修改字段时添加:

    ALTER TABLE table_name MODIFY column_name datatype DEFAULT def_value;

    建表时复制:

    create table new_table as select column1,...|* from old_table;

    如果对整个表进行复制:as select * from old_table;

    如果只复制指定的字段:as select column1,... from old_table;

    如果只想复制表结构而不想复制表里面的内容可以加上 where 1=2;

    插入数据时复制:

    insert into table_name[(column1,...)] select column1,...|* from old_table;

    例子:

    insert into userinfo_new select * from userinfo;

    insert into userinfo_new(id,username) select id,username from userinfo;

    修改数据

    update table_name set column=value,...[where conditions]

    注意,没有where条件时候表示修改全部;

    删除数据

    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,再重新导入/插入数据。

    相关文章

      网友评论

          本文标题:4、oracle之认识表

          本文链接:https://www.haomeiwen.com/subject/vfmyiftx.html