Oracle学习笔记(二)
来源:互联网 发布:跳跃表c语言 编辑:程序博客网 时间:2024/06/05 22:42
一、sql各种语句划分
SQL : Structured Query Language 结构化 查询 语言---------------------------------------------------DDL: Data Definition Language 数据 定义 语句 create drop truncate alterDML: Data Manipulation Language 数据 操纵 语句 insert update delete DQL: Data Query Language 数据 查询 语句 select from DCL: Data Control Language 数据 控制 语句 grant to revoke from TCL: Transactional Control Language 事务 控制 语句---------------------------------------------------DDL: 数据定义语句 create 创建 alter 修改 drop 删除 truncate 截断 * create 创建用户: create user 用户名 identified by 口令; 创建表: create table 表名(列名1 数据类型,列名2 数据类型,...列名x 数据类型 ); create table student( sid number,sname varchar(20),phone varchar2(11) ); * alter 修改 修改用户密码: alter user 用户名 identified by 新密码; 修改表结构: **新增一个列:alter table 表名 add (列名 类型,列名2 类型,..); Exec:给student 表添加一个新列 gender 字符类型:alter table student add(gender varchar(2) );**修改列的类型:alter table 表名 modify 列名 新类型;Exec:将student的性别列修改为number:alter table student modify gender number;**删除列:alter table 表名 drop column 列名;Exec:将student的性别列删除:alter table student drop column gender;**修改列的名字:alter table 表名 rename column 原列名 to 新列名;Exec:将student表的sname列更改为name列:alter table student rename column sname to name;**修改表名:alter table 表名 rename to 新名; * drop 删除 删除用户: drop user 用户名; (这种写法用在没有内容的用户中) drop user 用户名 cascade; 删除表: drop table 表名; ** 通过drop删除的表会被存放到系统回收空间中, 表以及其中数据原先占有的内存空间并没有被释放掉. recyclebin: 回收站 ** 可以使用purge命令来清空回收站, 或者在删除表的同时添加purge关键字. 使用了purge命令的删除语句会立即释放表原先占有的内存空间 * truncate 截断 截断表: truncate table 表名; * 保留表的结构,释放表中数据占有的内存空间.-----------------------------------------------------------------------DML : Data Manipulation Language 数据操纵语句 * insert 新增 向表中插入一条数据: insert into 表名 values(列1值,列2值...); * 如果表名之后没有括号写出列名, 那么values之后的括号中要根据表的列的默认顺序, 把所有的列都给赋值. * 如果某个列是字符类型, 那么values中的对应的值必须使用单引号引起来 insert into 表名(列1,列3,列2) values(列1值,列3值,列2值); * 可以在表名之后指定要给哪几个列插入数据. insert into student(sname,sid) values(&a,&b); 注: & 符号可以用来匹配多次插入数据 插入日期类型的字段: insert into student(sid,sname,birth) values(100,'小明','15-7月 1915'); * 如期类型可以通过字符串的方式来插入数据 * update 更新 update 表名 set 列名=值,列名=值... where 条件; * 如果没有where条件,默认更新全表 * 更新操作将表中set后的列默认的更新为等号右侧的值 * 如果列是字符串,那么值需要用单引号 * delete 删除 delete from 表名 where 条件;* 如果没有where条件,那么默认清空整张表 效果等同于 truncate 相同 DQL : Data Query Language 数据查询语句 * select 查询 查询当前用户中的可用表名: select table_name from user_tables; 查询所有的符合条件的记录: select * from 表名 where 条件;--------------------------------------------------------DCL: Data Control Language 数据控制语句 权限: grant 权限 [on 资源] to 用户 [with admin/grant option]; revoke 权限 [on 资源] from 用户;------------------------------------------------------TCL : Transactional Control Language 事务控制语句commit ; 提交 * 将收受影响的DML操作,持久化到数据库中rollback ; 回滚 * 回退到上一次commit操作之后savepoint ; 还原点 * 在某个DML操作之后,可以设置还原点, 通过rollback to 还原点名; 就能够回退到该状态. 事务: * 事务只能影响DML操作 * 事务是一个整体操作,所有的操作步骤全部成功执行, 那么整个操作才算完成;如果有一个步骤操作失败, 那么整个操作全部失败需要回退到最初状态.Oracle 开启事务: set autocommit off; -- 设置自动提交关闭 打开事务 set autocommit on; -- 设置自动提交开启 关闭事务事务特性: * 原子性 :事务不可再分 * 一致性 :操作事务中数据时,类型保持一致 * 持久性 :事务能够持久化数据到数据库中 * 隔离性 :多个事务之间可能产生的隔离性问题 隔离性问题: * 脏读: 如果两个事务A和B, 事务A读到事务B未提交的数据. * 不可重复读:(更新) 两个事务A和B, 如果事务A读取某张表,事务B同时读取这张表,并且做了修改操作, 事务B提交后,事务A再次读取这张表时读到了修改后的数据,跟上一次读取的数据不同 * 数据量未发生变化而数据内容被修改 * 幻读:(新增 删除) * 数据量发生变化 以下为《Spring实战》上对事务隔离级别的介绍
隔离级别: 脏读 不可重复读 幻读 未提交读 read uncommitted: √ √ √ *提交读: read committed : × √ √ 可重复读: repeatable read : × × √ √串行化: Serializable : × × ×Oracle支持提交读和串行化两个级别:开启事务: set autocommit off;更改隔离级别: 提交读: set transaction isolation level read committed; 串行化: set transaction isolation level serializable;隐式提交: * 在事务中,执行DML操作时,执行了一个DDL操作, 数据库会在DDL操作之前隐式的添加一个commit操作显示提交: * 在事务中,手动执行commit操作------------------------------------------------** drop trucate 和delete 有什么区别? 1 drop 和truncate 是DDL 而delete是DML 2 drop 表示删除表,不会释放表原先占有的内存空间 truncate是截断表,能够释放表中数据所占有的内存空间 delete是删除表中的数据,不会释放数据占有的内存空间. 3 drop使用purge命令时,可以释放表和数据所占有的内存空间. --------------------------------Exec:1 创建打卡时间 cardtime表 结构如下: 编号cid 员工姓名ename 手机号phone 打卡时间ctime 请写出创建表的语句2 在原表的基础上新增一个员工住址列 addr3 插入数据如下图: cid ename phone ctime addr 1 LILEI 13725221234 12-4月 2014 山东济南 2 Di_mi 15612341212 23-4月 2014 河北邯郸 3 Lucy 15110105566 20-5月 2014 山东青岛 4 HMM 18616521652 25-7月 2014 山东济南 5 LILI 13225219800 15-4月 2014 北京朝阳 6 Tom 13556567878 4-8月 2014 香格里拉 7 Tom_mi 13678261277 14-3月 2014 上海虹桥 请写出新增语句,以'LILEI'为例
二、表的约束
什么约束?(下面是百度的专业回答) 约束是在表中定义的用于维护数据库完整性的一些规则 通过为表中的列定义约束可以防止将错误的数据插入表中,也可以保持表之间数据的一致性 .若某个约束条件只作用于单独的列,可以将其定义为列约束也可定义为表约束; 若某个约束条件作用域多个列,则必须定义为表约束 表约束通常放在最后一个列定义的后面 .如:CREATE TABLE products ( product_no integer, name text, price numeric CHECK (price > 0) ) 这是列约束 CREATE TABLE products ( product_no integer, name text, price numeric, discounted_price numeric, CHECK (price > discounted_price)) 这是表约束什么时候使用约束?使用什么约束? * 需要唯一标识数据的列,我们可以使用主键 * 需要告诉数据库母子表之间的关系,需要指定外键 * 如果该列上不能出现空值,比如一条数据的录入日期 not null .... ** 约束越多,数据库数据越健壮; 约束越多,数据库效率越低.Oracle中表的约束:1、主键约束: primary key 主键: 能够通过该列上的一个唯一的值确定一条数据 * 特性: 非空且唯一 创建主键: create table test1( tid number constraint pk_tid primary key, tname varchar2(10), age number ); * constraint pk_tid : 约束名 (可有可无) primary key : 主键约束 将该列变为一个主键列,则这个列是非空且唯一 ** 复合主键: 一个主键是由多个列组成. 也就是说多个列组合在一起才起到一个主键的作用. create table test2( tid number , tname varchar2(10) , age number, constraint pk_t primary key(tid,tname) ); 表外添加主键:alter table 表名 add constraint 约束名 primary key(列名1,列2...);create table test3( tid number , tname varchar2(10) , age number ); 如何给test3添加主键? alter table test3 add constraint pk_t3 primary key(tid);2、外键约束: foreign key 一个部门中有多个员工 主表(母表) : 部门表 从表(子表) : 员工表 * 外键: 在子表中,如果有一个列上的数据引用了另外一张 表的主键列上的数据,那么这个在子表中的列就被称作外键列创建外键: 主表: create table mother( mid number primary key, mname varchar2(20) ); 子表: create table child( cid number primary key, cname varchar2(20), age number, birth date, mno number, constraint fk_c foreign key(mno) references mother(mid) );插入数据: 首先插入主表数据,然后插入子表数据删除数据: 首先删除对应的子表中子记录,然后删除主表数据表外给子表添加外键约束的写法:alter table 表名 add constraint 约束名 foreign key(列1,列2...) references 主表名(列1,列2...)主键约束: primary key 主键: 能够通过该列上的一个唯一的值确定一条数据 * 特性: 非空且唯一 * 一张表只能有一个主键 创建主键: create table test1( tid number constraint pk_tid primary key, tname varchar2(10), age number ); * constraint pk_tid : 约束名 (可有可无) primary key : 主键约束 将该列变为一个主键列,则这个列是非空且唯一 ** 复合主键: 一个主键是由多个列组成. 也就是说多个列组合在一起才起到一个主键的作用. create table test2( tid number , tname varchar2(10) , age number, constraint pk_t primary key(tid,tname) ); 表外添加主键:alter table 表名 add constraint 约束名 primary key(列名1,列2...);create table test3( tid number , tname varchar2(10) , age number ); 如何给test3添加主键? alter table test3 add constraint pk_t3 primary key(tid);外键约束: foreign key 一个部门中有多个员工 主表(母表) : 部门表 从表(子表) : 员工表 * 外键: 在子表中,如果有一个列上的数据引用了另外一张 表的主键列上的数据,那么这个在子表中的列就被称作外键列创建外键: 主表: create table mother( mid number primary key, mname varchar2(20) ); 子表: create table child( cid number primary key, cname varchar2(20), age number, birth date, mno number, constraint fk_c foreign key(mno) references mother(mid) );插入数据: 首先插入主表数据,然后插入子表数据删除数据: 首先删除对应的子表中子记录,然后删除主表数据表外给子表添加外键约束的写法:alter table 表名 add constraint 约束名 foreign key(列1,列2...) references 主表名(列1,列2...)3、唯一性约束: unique * 数据库会在具有唯一性的列上,自动添加索引 创建唯一性约束:create table Test4( tid number primary key, tname varchar2(20) unique); * 带有唯一性的列可以不添加数据 * 如果唯一性的列上带有数据,那么必须不能重复表外添加: alter table test5 add constraint un_tname unique(tname);非空约束: not null * 不允许在该列上出现空值创建非空约束:create table test5( tid number not null, tname varchar(20));alter table test5 modify tid not null;检查约束: check * 数据库需要对某些字段做另外的一些约束比如学生年龄必须大于12岁:create table teacher( sid number primary key, sname varchar(10), age number, check(age>56));4、删除约束: alter table 表名 drop constraint 约束名;--------------------------------------------------Exec:学生表Student : 学号sno 姓名sname 年龄age学科表Subject: 学科号bno 学科名bname成绩表Sc: 学号sid 学科号bid 成绩score* 分别给学生表和学科表添加主键alter table student add constraint pk_sno primary key(sno);alter table subject add constraint pk_bno primary key(bno); 给成绩表添加联合主键alter table sc add constraint pk_sc primary key(sid,bid);* 给成绩表添加外键: sid引用学生表的学号,bid引用学科表的学科号alter table sc add constraint fk_sid foreign key(sid) references student(sno);alter table sc add constraint fk_bid foreign key(bid) references subject(bno);* 成绩不能为空alter table sc modify score not null;
0 0
- oracle学习笔记(二)
- Oracle学习笔记(二)
- Oracle学习笔记(二)
- oracle学习笔记二
- oracle学习笔记(二)
- oracle学习笔记二
- oracle学习笔记 二
- oracle 学习笔记(二)
- Oracle学习笔记(二)
- Oracle学习笔记(二)
- Oracle学习笔记二
- Oracle学习笔记(二)
- Oracle学习笔记二存储
- Oracle学习笔记(二)
- oracle学习笔记之二
- ORACLE学习笔记(二)
- Oracle学习笔记(二)
- oracle视频学习笔记(二)
- ios 博客
- 堆区(heap)和栈区(stack)的区别
- javascript入门
- STM32启动文件分析
- QQ热修复原理地址
- Oracle学习笔记(二)
- Oracle计算时间差函数
- HDU 1274
- C++二目运算符重载
- ListView 中关于checkBox的复用出错问题,个人总结的
- 新浪微博分布式爬虫分享
- 蓝桥杯 兰顿蚂蚁
- 解决条目监听冲突
- 模态出来报错:Application tried to present modally an active controller