初识数据库(TCL语句)
TCL语句 : 事物控制语句
--什么是事物 : 多种操作能够达到统一的结果
--在网上购买了一部电话
--1、查询是否有该电话的库存 ,将库存 - 1
--2、从银行卡中扣钱,a)查询卡中的钱是否足够 , 2)在银行卡中扣钱 , 3)将钱交给供货方
--3、已给物流、快递
-- 提交 / 回滚
事物控制的特性
--1、一致性 2、原子性 3、持久性 4、统一操作(隔离性)
一致性:指在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
原子性:事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据改操作要全部执行,要么全部不执行。这种特性称为原子性。
隔离性:隔离性指并发的事务是相互隔离的。
持久性:持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。
DML语句:数据操作语言
数据操作语言 -- DML语句都需要提交或回滚
--增加 insert : 向表中插入数据 insert into 表名(列名1,列名2...) values(值,值...)
--向部门表中插入一条数据,部门编号是50, 部门名称 caiwu,部门所在地 beijing
insert into dept(deptno,dname,loc) values(50,'caiwu','beijing')
insert into dept values(60,'caiwu','beijing')
--null如何插入空值
--1、直接赋值
insert into dept(deptno,dname,loc) values(50,'caiwu',null)
--2、两个单引号
insert into dept(deptno,dname,loc) values(60,'caiwu',' ')
--3、在指定列名时,忽略要插入空的列
insert into dept(deptno,dname) values(60,'caiwu')
--将自己的信息插入到员工表中
select * from emp
select * from dept
insert into emp values (9527,'HUAAN','READER','7839','24-3月-2016',1000,200,null)
--插入时间
--隐式转换
--显式转换
--利用通配符进行插入
insert into dept (deptno,dname,loc) values(&a,'&b','&c')
--同时插入多条数据(多行)
create table emp1 as select * from emp where 1 = 2
create table emp2 as select * from emp where 1 = 1
select * from emp1
select * from emp2
--将emp表中部门号是30的员工插入到emp1中
insert into emp1
select * from emp where deptno = 30
--update : 修改表中的数据 update 表名 set 列名1 = 值1,列名2 = 值2,... ...列名n = 值 n
--where 条件必须要加
update emp set ename = 'heheng'
update emp set ename = 'heheng' where empno = 9527
--给员工表中'SMITH'的工资上调200
update emp set sal = sal + 200 where ename = 'SMITH'
--将'SMITH'调转到'KING'的同部门下
update emp set deptno =(
select deptno from emp where ename = 'KING')
where ename = 'SMITH'
--将'HUAAN'调到'SCOTT'同部门下,并且将领导设置为'SCOTT'
update emp set deptno =(
select deptno from emp where ename = 'SCOTT')
,mgr =
(select empno from emp where ename = 'SCOTT')
where ename = 'HUAAN'
--将员工的工资整体上调 2%
update emp set sal = sal*1.02
--修改'SMITH'同部门下的工资,按照10部门的平均工资+500修改,但是不包含'SMITH'
--数字500要写在表达式前面,子查询写在后面
update emp set sal = (500+
(select avg(sal) from emp where deptno = 10))
where deptno =
(select deptno from emp where ename ='SMITH') and
(ename <> 'SMITH')
--delete : 删除表中的数据 delete [from] 表名 [where] --限定删除的数据
--将'SMITH'同部门的,工资比他高的全部删除
delete from emp where empno in(
select e.empno from emp e,(
select deptno,sal from emp where ename = 'SMITH') hh
where e.deptno = hh.deptno and e.sal > hh.sal)
DDL语句 : 数据定义语言
--create 语句 : create table 表名(列名1 数据类型[default 值],列名2 数据类型[default]... ...列名n 数据类型[default])
--创建学生表
create table student(
--创建字段 学号 学号类型 数字型 长度为4位
scode number(4),
--创建姓名 字符型 长度是30位
sname varchar(30),
--创建生日
sbirthday date,
--创建身高
sheight number(3),
--创建性别
ssex char,
--创建班级
cno number(2) default 1
)
--向学生表中插入一条数据
select * from student
insert into student values(9527,'华安','24-12月-1999',180,'B',default,75.21)
--create table 表名 as 查询
--创建表内容是emp表中,部门号是10的部门
create table emp3 as select * from emp where deptno = 20
select * from emp3
--创建表 只有 ename, sal , sal*12字段
create table emp4 as select ename 姓名,sal 工资,sal*12 年薪 from emp
select * from emp4
--alter : 修改表属性 -- 修改对象属性
--alter table 表名 rename column 原名 to new 新名
--修改student表中 cno列名 为 sno
alter table student rename column cno to sno
--添加列
--向学生表中添加体重列
alter table student add (sweight number(3,1))
--修改列属性
alter table student modify(sweight number(4,1))
--添加默认值
--添加
alter table student modify sheight default (100)
--删除
alter table student drop(sweight)
思考 : 如果列中有数据 , 是否可以使用drop -- 没有确认提交 ,慎重慎重
alter table heihei drop(id)
select * from heihei
--删除(销毁)表
--drop 删除对象
--drop table 表名
drop table emp4
--截断
--truncate : 截断
--与delete的区别 1、delete属于DML语句 ,可以提交或回滚,truncate属于DDL语句,直接对源数据进行操作
--2、delete可以有条件,truncate没有条件
--3、是否释放空间
--4、从效率而言,truncate高于delete
--语法结构 truncate table 表名
truncate table student
select * from student
添加约束
在表的某一列上设定一个条件,防止无效的数据输入该列
--约束种类 :
--1、not null : 非空约束,不允许为空
--2、unique : 唯一键约束 ,该列中的值必须是唯一的,允许为空
--3、primary key : 主键约束,唯一的、不能重复的、且不能为空的,它的值可以确定表中的某一行记录
--4、foreign key : 外键约束,保证表与表之间的数据完整性,两个表A、B存在公共字段,
--如果这两个表的公共字段是A表的主键且是B表的外键,则A表和B表就可以关联
一般情况下,A表被称为父表,B表被称为子表
--1、子表的公共字段里的值的范围都是父表中的主键范围
--2、当父表里的某个值被子表里的外键所应用,此时不允许删除父表中的对应行
--3、check检查约束 : 在某一列上设定一个布尔表达式
delete from dept where deptno = 20
drop table student
--创建学生表,并为其中的字段添加约束
create table student(
--创建字段 学号 学号类型 数字型 长度为4位
scode number(4) primary key,
--创建姓名 字符型 长度是30位
sname varchar(30) not null,
--创建生日
sbirthday date ,
--创建身高
sheight number(3) check(sheight>0),
--创建性别
ssex char(4),
--创建班级
cno number(2) default 1 references calss (cno)
)
--创建外键表calss
create table calss(
cno number(2) primary key,
cname varchar(30) not null
)
--向学生表中插入一条数据
select * from student
select * from calss
insert into student values(9527,'华安','24-12月-1999',180,'男',1)
insert into calss values(1 ,'java')
insert into calss values(2 ,'web')
alter table student modify(ssex char(2))
insert into student (scode,sname,ssex)values(9529,'华梅','女')
--表级约束
--创建学生表
create table student(
--创建字段 学号 学号类型 数字型 长度为4位
scode number(4),
--创建姓名 字符型 长度是30位
sname varchar(30),
--创建生日
sbirthday date ,
--创建身高
sheight number(3),
--创建性别
ssex char(4),
--创建班级
cno number(2),
--添加约束关键字--constraint
constraint student_scode_pk primary key(scode),
constraint student_sname_uk unique (sname),
constraint student_sheight_ck check(sheight > 0),
constraint student_cno_fk foreign key(cno) references calss(cno)
)
--给表里的列添加约束
--创建学生表
create table student(
--创建字段 学号 学号类型 数字型 长度为4位
scode number(4),
--创建姓名 字符型 长度是30位
sname varchar(30),
--创建生日
sbirthday date,
--创建身高
sheight number(3),
--创建性别
ssex char(2),
--创建班级
cno number(2)
)
--给表里的列添加约束
select * from student
select * from calss
--给scode列添加主键约束
alter table student add constraint student_scode_pk primary key(scode)
--给sname列添加唯一约束
alter table student add constraint student_sname_uk unique (sname)
删除约束
--级联删除 cascade 关键字
alter table student drop constraint student_scode_pk cascade
--把班级表的主键删除,(有主外键关系的表)--测试级联删除的作用
alter table calss add constraint calss_cno_pk primary key(cno)
alter table student add constraint student_cno_fk foreign key(cno) references calss(cno)
insert into student values(9527,'coco','24-3月-2016','175','男',1)
alter table calss drop constraint calss_cno_pk -- 此唯一/主键已被外键连接,删除失败
alter table calss drop constraint calss_cno_pk cascade --删除成功,连带student外键一同删除