SQL语句
概念:SQL表示结构化查询语句.是与关系型数据进行交流的标准语句.SQL的基本语法在关系型数据库中大体一致的.但时由于关系型数据库厂商不一致,所以在一些细节上略有不同.(关键字,细节的语法结构有所不同),根据SQL语句的使用场合不同,SQL语句分为五个大类
1. DDL语句(数据定义语言):定义表结构(create,drop,alter,truncat)
2. DML语句(数据操作语言):操作表数据(insert,update,delete)
3. TCL语句(事务控制语句):控制事务的语句(commit,rollback,savepoint)
4. DQL语句(数据查询语言):查询表中的数据(select)
5. DCL语句(数据控制语句):涉及DBA权限,对数据进行管理.(grant授权)
注:在Oracle数据库中,select属于DML语句(见帮助文档),在其他数据库中属于DQL语句
DDL语句
创建表的基本语法
create table 自定义表名(
自定义的字段名 字段类型 [约束][默认值] --多个字段之间使用逗号隔开
...
自定义的字段名 字段类型 [约束][默认值] --最后一个字段无需提供逗号
);
Oracle中标识符的语法规则
- 标识符不能使用关键字
- 避免使用中文
- 标识符不能使用数字开头
- 标识符的长度有限制不能超过30个字符
查看已经存在表的结构
使用 desc. 语法: desc 表名;
注意:该指令不属于SQL指令,不能在sql window中执行.必须在命令行/command window中执行
Oracle的数据类型
字符串类型
- varchar(n)/varchar2(n):可变的字符串,表示n个字节或字符,n的范围[1,4000],varchar2是Oracle独有的.节省空间,查询速度慢
- char[(n )]:定长的字符串,n表示字节或字符,n的范围[1,2000],查询效率高,浪费空间
数值类型
- NUMBER[(p [, s])]
- 指定数字的总位数为p(小数点前位数+小数点后的位数,不包含小数点),小数点后面位数为s
- 如果省略s,表示为整数,p表示位数
- 采用number,为整数,
- integer 表示整数
- NUMBER[(p [, s])]
--描述一个商品表(商品的编号,商品的名称,商品的价格)
create table product_xx(
id integer,
name varchar2(50),
price number(7,2)
);
- 日期类型
- DATE:采用7个byte表示的时间.年月日,没有时分秒的信息
- TIMESTAMP:表示时间戳,精确到毫秒
删除表 drop
语法: drop table 表名;
-- 删除product表
drop table product;
-- 创建 product表
create table product_xx(
id integer,
name varchar2(50),
price number(7,2),
dotime date
);
修改表结构 alter
语法:alter table 表名 执行语句;
- 添加一个字段
atler table 表名 add(字段名 字段类型,...);
-- 为product追加一个字段描述商品的图片的路径
alter table product_xx add(pic varchar2(100));
- 修改字段类型
alter table 表名 modify(字段名 新的类型,...);
--- 将product的dotime的类型修改为时间戳
alter table product_xx modify(dotime timestamp);
- 修改字段名
alter table 表名 rename column 旧字段名 to 新字段名;
-- 将product中name修改为pname
alter table product_xx rename column name to pname;
- 删除指定字段
alter table 表名 drop column 字段名;
-- 将product中的dotime字段删除
alter table product_xx drop column dotime;
- 修改表名(不为alter语句)
rename 旧表名 to 新表名;
-- 将product_xx修改为product
rename prodcut_xx to product;
DML语句:操作表数据
- 插入数据
语法:insert into 表名[(字段名,…)] values(值,…);
- 如果省略 字段名的定义,说明默认该表中的所有字段添加值,而且值的类型和desc查询的顺序一致.
- 声明的字段名的类型必须和提供值的类型一一匹配.
-- 创建一个用户表t_user
create table t_user(
id number,-- 用户编号
username varchar2(30),--用户名
pwd char(32),--密码
gender char(3) --性别
);
-- 插入数据
-- 注意:数据库中字符串使用单引号
insert into t_user values(1001,'Bob','123','男');
insert into t_user(id,username,pwd,gender) values(1002,'lucy','250','女');
-- 只向指定的字段添加数据
insert into t_user(id,username,pwd) values(1003,'tom','222');
- 删除数据
语法:delete from 表名 [where 条件]
注意:如果未提供where条件,那么直接将表中的所有数据全部删除
-- 删除t_user表中的所有的数据
delete from t_user;
-- 删除用户名为A的数据
delete from t_user where username='A';
-- 删除用户名为tom同时密码为123的用户数据
delete from t_user where username='tom' and pwd='123';
truncate和delete的区别
1. 都是将表中的数据删除
2. truncate属于DDL语句,事务隐式提交.delete属于DML语句,手动提交事务.
3. truncate无需回滚的内存空间,效率高.风险高;delete语句可以进行归滚,需要归滚内存空间,效率低,风险低.如果确定需要将一个大量数据的表清空,建议使用truncate.
- 更新数据 update
语法: update 表名 set 字段名=值 [where 条件];
注意:如果没有提供where条件,将更新整个表.
-- 更新所有的数据
update t_user set pwd=222;
-- 更新id=1001的用户信息
update t_user set pwd=111,username='lilei' where id=1001;
MERGE:oracle数据库独有的关键字,表示可以更新或者插入一条记录.
TCL 事务控制语句
概念:事务是由一组DML语句组成的逻辑单元,具有原子性,一致性,持久性,隔离性等特点.维护数据的安全.必须对事务进行手动的管理(提交/回滚).
- 原子性:事务不可在分,统一的整体,要么一起成功要么一起失败.
- 一致性:事务的状态是一致,那么提交要么回滚.
- 持久性:事务一旦提交,那么对于数据的影响是永久的.除非下一次的提交.
- 隔离性:事务之间是互斥.操作同一个数据底层总会有一个先执行,先持续会锁定数据.
commit:提交事务
rollback:回滚事务
savepoint:事务保存点
大批量提交DML语句,可以使用savepoint定义事务保存点,通过commit,rollback跳转到指定的保存点.
dml...
savepoint A;--A自定义的保存点的名称
dml..
savepoint B;--保存点为B
--回滚到指定的保存点
rollback to A;
-- 然后使用commit进行提交
commit;
insert into t_user(username) values('A');
insert into t_user(username) values('B');
insert into t_user(username) values('C');
insert into t_user(username) values('D');
savepoint one;
insert into t_user(username) values('E');
insert into t_user(username) values('F');
insert into t_user(username) values('G');
savepoint two;