三、表
3.1 表的概述
表是数据库的基本存储单位,下面罗列出几个基本特点:
- 由行、列构成的二维结构
- 同一张表的结构中列名唯一
- 同一张表的每一行数据唯一
- 同一列的数据具有相同的类型
- 同一个用户下表名唯一
那么,oracle数据库中的类具有哪些类型呢,如下图:
如果使用固定长度的字符类型,当你定义类型时分配了10个字节的长度CHAR(10)
,那么就算实际只需要2个字节来存放内容数据库仍分配为10个字节;可变长度则反之,即实际分配的存储空间会根据实际存放的数据量来定。另外,CHAR(n)和NCHAR(n的区别是后者是按照Unicode编码格式存放数据的。
NUMBER(p,s)类型中的p表示有效位数,s则表示小数所占的位数;FLOAT一般主要用来存储二进制数的。DATE和TIMSTRAMP类型的主要区别是精确度,前者精确到秒,后者属于时间戳类型精确到秒的小数位。
至于BLOB和CLOB则是专门用来存放大的数据对象,这两类数据的存放上限是4GB。前者以二进制存放数据,后者以字符串形式存放。
3.2 管理表结构
创建表
创建表语法如下:
CREATE TABLE table_name
(
column_name datatype,...
);
如图创建表userinfo:
修改表
我们可以更改刚创建的userinfo表,可以对表中的字段进行增删,也可以修改字段的名字和类型。同时,我们也可以对整张表的表名修改。
语法如下:
--添加表字段
ALTER TABLE table_name
ADD column_nmae datatype;
--删除表字段
ALTER TABLE table_name
DROP COLUMN column_name;
--修改字段类型
ALTER TABLE table_name
MODIFY column_name datatype;
--重命名字段名字
ALTER TABLE table_name
RENAME COLUMN column_name TO
new_column_name;
--重命名表名
RENAME table_name TO new_table_name;
代码示例如下:
添加表字段
删除表字段
修改字段类型
重命名字段名字
重命名表名
删除表
如果只是想删除表中的数据可用delete
或者truncate
,语法如下:
--delete用法
DELETE FROM table_name [条件]
--truncate用法
TRUNCATE TABLE table_name
那么两者有什么差别呢?
简单的说delete语句是属于DML,执行时是逐条删除的,每条记录都会被写入日志。整个操作会放到rollback segement中,因此是可回滚的,当事务提交时才生效。
而truncate的用法又被称为截断表,是DDL语言。该操作会被隐式提交立即生效,原数据不放到rollback segment中,因此不能回滚。
具体的区别可自行查找,也可参考这两篇博文,博文1,博文2。
以上是删除表数据的内容,如果我们想删除表结构可以使用drop
,语法格式为:
--drop用法
DROP TABLE table_name
3.3 操作表数据
添加表数据
对一个已经存在的表我们可以向其添加数据,语法为:
INSERT INTO table_name
(column1,column2,...)
VALUES(value1,value2,...)
在添加数据时,某个字段数据为空此时我们想让他默认显示某个值,这时我们可以添加默认值。
我们可以在创建表的时候设定:
CREATE TABLE table_name
(column1 DEFAULT 默认值1,...)
如果表已经建好了,我们可以这样修改:
ALTER TABLE table_name
MODIFY column1 DEFAULT 默认值
修改表数据
修改表数据语法如下:
UPDATE table_name
SET column1=value1,...
[WHERE conditins]
复制表数据
在添加数据时,有时候我们可能会遇到这样一种需求:我们所要添加到表A的数据已经是在表B存在了,那这时候我们只需要将这些数据从表B转移到表A。分成两种情况:
在创建表时获取数据:
CREATE TABLE table_new
AS
SELECT column,...|*
FROM table_old;
在添加获取复制数据(表已存在):
INSERT INTO table_new
[(column1,...)]
SELECT column1,...|*
FROM table_old;
后者需要注意的是table_new和table_old表中赋值时对应的数据个数、类型以及顺序需完全一致。
删除表数据
删除表数据在3.2节中讲述过了,这里罗列下语法:
DELETE FROM table_name
[WHERE conditions]