SQL简介

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中标识符的语法规则

  1. 标识符不能使用关键字
  2. 避免使用中文
  3. 标识符不能使用数字开头
  4. 标识符的长度有限制不能超过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 表示整数
   --描述一个商品表(商品的编号,商品的名称,商品的价格)
   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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值