什么是数据库?什么是表?
数据库可以理解为图书馆,图书馆里面的书就是数据库中的数据,数据库表就是书架,每个架子都有自己名字(编号),不同的架子放的是不同类型的书,数据库表也一样。
针对表的操作有很多,可以分为对表本身的操作,包括创建表、删除表、修改表,这类操作称为DDL;还有操作表中的数据,包括插入数据、修改数据、删除数据,这类操作称为DML;还有一类是对前面操作的授权,称为DCL;最重要的是查询表中数据的操作,称为DQL。
Oracle数据库中常用的数据类型大致如下:
类 型 | 描 述 |
---|---|
char(n) | 保存固定长度的字符串,n在1-2000之间。 |
varchar2(n) | 保存数字、字母等变长字符串,n在1-4000之间。 |
number(m,n) | 保存数字,是整数或小数。n表示小数长度,整数长度是m-n。 |
date | 保存日期时间类型,不含毫秒。 |
timestamp | 保存日期时间类型,含毫秒。 |
clob | 存放海量文字。 |
blob | 存放海量二进制文件,如图片、电影、音乐等。 |
还有其他类型,如long、float、int、rowid(伪列)等。
注:
在SQL中没有bool类型,在plsql中有bool类型。
create table 表名 (列名1 类型, 列名2 类型....)
说明:
eg:创建学生表stu
create table stu(sno number, sname varchar2(32), sage int, sdate date, sincome number(8,2));
语法如下:
insert into 表名(列1,列2,......)values(值1,值2,......);
说明:
eg:向表中插入下述内容
insert into stu(sno, sname, sage, sdate, sincome)values(1,'张三',23,date'1990-02-23', 3000.32);
insert into stu(sno, sname, sage, sdate, sincome)values(2,'李四',24,date'1989-10-12', 4300.46);
insert into stu(sno, sname, sage, sdate, sincome)values(3,'王五',25,date'1987-07-03', 4977.58);
语法如下:
select * from 表名;
select 列名1, 列名2... from 表名;
说明:
语法如下:
update 表名 set 列名1=新值1,列名2=新值2 [where 列名=某值];
说明:
eg:按下面要求,修改stu中的数据
update stu set sincome=4000;
update stu set sincome=4000 where sno=1;
update stu set sincome=4000 where sno<3;
update stu set sincome=sincome+1000;
语法如下:
delete from 表名 [where条件];
说明:
eg:按如下要求删除stu表中数据
-- 删除张三
delete from stu where sno=1;
-- 删除所有
delete from stu;
如果对一个表进行备份,或者对表中一部分数据,一部分列备份,就可以使用ctas。
相当于“文件的另存为”功能。
语法如下:
create table 新表名 as select语句
eg:
对stu表备份,新的表名是stu1
create table stu1 as select * from stu;
把stu表的sno、sname、sage三列数据备份到新的表stu2中。
create table stu2 as select sno, sname, sage from stu;
创建一个表stu3,结构跟stu表完全相同,但是没有数据。
create table stu3 as select * from stu where 1=2;
查询一个表的内容,把查询结果插入到另一个表中。
语法如下:
insert into 表名 select语句;
例 :演示iis插入数据。
insert into stu3 select * from stu;
对于删除整个表的所有数据,delete并不会释放表所占用的空间。
如果用户确定是删除整表的所有数据,那么使用 truncate table 速度更快。
一个表可以看做是一张纸,上面有很多数据,使用delete删除相当于使用橡皮擦擦除数据,使用truncate删除相当于换了一张新的纸,非常干净,而且速度快。
使用delete删除,可以回滚数据;使用truncate删除,不能回滚数据。
例 :对stu1表进行截断操作。
truncate table stu2;
主要操作包括增加列、删除列、修改列名、修改列的数据类型。
alter table 表名 add(列名1 列类型, 列名2 列类型)
说明:
例 :在stu表中增加一列sphone,类型是varchar2(11)。
alter table stu add (sphone varchar2(11));
alter table 表名 drop column 列名
例 :删除stu表中刚刚添加的sphone列。
alter table stu drop column sphone;
-- 列的名字重新命名
alter table 表名 rename column 旧的列名 to 新的列名
-- 修改列的类型
alter table 表名 modify 列名 新的列类型
例 :把stu表中的列sincome改为salary。
alter table stu rename column sincome to salary;
comment on table 表名 is '注释内容';
comment on column 表名.字段名 is '注释内容';
例 :给stu表添加表注释和字段注释,并在plsql developer中点击右键“描述”查看注释。
comment on table stu is '学生表';
comment on column stu.sno is '学号';
comment on column stu.sname is '学生姓名';