4、oracle之认识表
表:表空间里的基本存储单元,表其实是我们存储数据的一个最基本的单位;
在数据库中的表都是一个二维结构(由行和列组成的,一行可以称作一条记录,列可以称作域或者是字段);
在一张表中,每一列的数据必须具有相同的数据类型;列名要具有唯一性;每一行得数据也要保证其唯一性。
字符型数据类型:
固定长度的数据类型: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,再重新导入/插入数据。