文章目录
- 数据库
- 数据类型
- 建表create table
- 插入数据insert into
- 查询数据select from
- 修改数据update set
- 删除数据delete from
- 备份ctas
- 结果插入iis
- 截断表 truncate table
- 修改表结构alter table
- 添加注释
注:本文的SQL语法是基于Oracle数据库操作的,但是基本的SQL语法在数据库中应该都是通用的
数据库
什么是数据库?什么是表?
数据库可以理解为图书馆,图书馆里面的书就是数据库中的数据,数据库表就是书架,每个架子都有自己名字(编号),不同的架子放的是不同类型的书,数据库表也一样。
针对表的操作有很多,可以分为对表本身的操作,包括创建表、删除表、修改表,这类操作称为DDL;还有操作表中的数据,包括插入数据、修改数据、删除数据,这类操作称为DML;还有一类是对前面操作的授权,称为DCL;最重要的是查询表中数据的操作,称为DQL。
- DDL(data definition language)操作包括:create table、alter table、drop table;
- DML(data manipulation language)操作包括:insert into、update set、delete from、truncate table;
- DCL(data control language)操作包括:grant、revoke;
- TCL(transaction control language)操作包括:commit、rollback;
- DQL(data query language)操作包括:select;
数据类型
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(伪列)等。
注:
- oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。
- char是一种固定长度的类型,无论储存的数据有多少都会固定长度,如果插入的长度小于定义长度,则可以用空格进行填充。而varchar2是一种可变长度的类型,当插入的长度小于定义长度时,插入多长就存多长。
在SQL中没有bool类型,在plsql中有bool类型。
建表create table
create table 表名 (列名1 类型, 列名2 类型....)
说明:
- “create table 表名(列名 类型)”是固定写法。表名是自己起的,英文开头,可以包含数字,可以包含下划线,表名中不能有空格,不要使用中文做表名。
- 表名后面必须跟小括号,里面是列的定义,列名后面是一个类型,中间用空格区分;多个列定义之间使用逗号分割。列名定义规则跟表名一样。
- 创建表时,只能执行一次,多次执行会报错“00955 名称已由现有对象使用”。
eg:创建学生表stu
create table stu(sno number, sname varchar2(32), sage int, sdate date, sincome number(8,2));
插入数据insert into
语法如下:
insert into 表名(列1,列2,......)values(值1,值2,......);
说明:
- “insert into (…) values (…)”是固定结构,小括号是必须有的。
- 第一个小括号中是需要插入的列名,第二个小括号中是需要插入的值。一定要注意的是列名跟值是一一对应的。不仅个数一致,位置也要一致。
- 插入的值,必须跟数据类型保持一致:number/int类型就是纯数字,varchar2类型是用单引号引起来;date类型是字符串前面加date;
- 被插入的表必须存在,如果不存在,需要create table创建。
- 同一条插入语句,重复执行,会插入多条相同的数据。
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 * from 表名;
select 列名1, 列名2... from 表名;
说明:
- “select … from …”是固定结构,先写select,再写from;
- select后面跟着是星号,表示显示所有列;
- select后面可以跟具体的列名,多个列名之间使用逗号分割;
- from后面跟的是表名;
修改数据update set
语法如下:
update 表名 set 列名1=新值1,列名2=新值2 [where 列名=某值];
说明:
- “update … set …”是固定结构。
- set后面的等号表示把新值1赋给某一列,让该列的值变成新的值;有多个列的值要修改,就写多个等式,中间用逗号分割。
- where是可选的,如果没有where条件,意味着对所有行都修改;有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
语法如下:
delete from 表名 [where条件];
说明:
- 如果不带where条件,则删除表中所有记录;带where条件,则删除符合条件的行。
eg:按如下要求删除stu表中数据
-- 删除张三
delete from stu where sno=1;
-- 删除所有
delete from stu;
备份ctas
如果对一个表进行备份,或者对表中一部分数据,一部分列备份,就可以使用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;
结果插入iis
查询一个表的内容,把查询结果插入到另一个表中。
语法如下:
insert into 表名 select语句;
例 :演示iis插入数据。
insert into stu3 select * from stu;
截断表 truncate table
对于删除整个表的所有数据,delete并不会释放表所占用的空间。
如果用户确定是删除整表的所有数据,那么使用 truncate table 速度更快。
一个表可以看做是一张纸,上面有很多数据,使用delete删除相当于使用橡皮擦擦除数据,使用truncate删除相当于换了一张新的纸,非常干净,而且速度快。
使用delete删除,可以回滚数据;使用truncate删除,不能回滚数据。
例 :对stu1表进行截断操作。
truncate table stu2;
修改表结构alter table
主要操作包括增加列、删除列、修改列名、修改列的数据类型。
- 添加字段
语法如下:
alter table 表名 add(列名1 列类型, 列名2 列类型)
说明:
- 添加列,add后面有小括号,里面是列名和类型;添加多个列,使用逗号分隔;
例 :在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 '学生姓名';