SQL从入门到删库4数据库事务事务分析insert基础查询算术运算符别名连接符

一、数据库事务

事务:是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

ACID性质(事务四大特性):

  • 原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  • 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
  • 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行。
  • 持久性(Durability):已被提交的事务对数据库的修改应该永久保存在数据库中。 [1]

数据库事务由以下的部分触发:
一个或多个DML 语句
一个 DDL(Data Definition Language – 数据定义语言) 语句
一个 DCL(Data Control Language – 数据控制语言) 语句

关键字:

​ commit --提交

​ rollback --回滚

二、事务分析

  • 提交前或回滚前

    • 改变前的数据状态是可以恢复的
    • 执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
    • 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
    • DML语句所涉及到的行被锁定, 其他用户不能操作。
  • 提交后的数据状态

    • 数据的改变已经被保存到数据库中。
    • 改变前的数据已经丢失。
    • 所有用户可以看到结果。
    • 锁被释放,其他用户可
    • 以操作涉及到的数据。
    • 所有保存点被释放。

三、基础查询

基础查询

SELECT	*|{[DISTINCT] column|expression [alias],...}
FROM	table;

选择全部列

select * from table

查询虚拟表

select sysdate from dual;

注意:

  • SQL 语言大小写不敏感。
  • SQL 可以写在一行或者多行。
  • 关键字不能被缩写也不能分行。
  • 各子句一般要分行写。
  • 使用缩进提高语句的可读性。

四、算术运算符

数字和日期使用的算术运算符。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6xGpj4e-1587541999955)(1552916452994.png)]

操作符优先级

  • 乘除的优先级高于加减。
  • 同一优先级运算符从左向右执行。
  • 括号内的运算先执行。

五、别名

列别名

  1. 使用as
  2. 直接在字段的后面加空格 或者双引号 将别名括起来都可以。

表别名

  1. 直接在表的后面加空格 或者双引号 将别名括起来都可以。
  2. 不能使用as关键字

六、连接符

  • 把列与列,列与字符连接在一起。
  • 用 ‘||’表示。
  • 可以用来‘合成’列。

hw_sqlF:

--一个学生对应一个学生档案材料。                     一对一:2中方法:1.任意一张表设置外键  2.id一致的方式设置外键
--一个学生只属于一个班,但是一个班级有多名学生。       一对多:在多的一方设置外键
--一个学生可以选择多门课,一门课也有多名学生。         多对多:要新建一张中间表

--1.写多了sql 之后不知道怎么运行
--2.不知道怎么保存文件  // crtl + s  /另存为:
--3.外键约束
--4.没有切换账号使用---system 用户的数据不能修改也不能删除,做作业--新建一个用户

create table student_hw(
    id varchar2(32) primary key,
    name varchar2(10),
    did varchar2(32)--添加一个外键和档案表对应
)

--档案和学生是一对一
create table dangan_hw(
    id varchar2(32) primary key,
    age NUMBER(3,0), --3位数字,0个小数点
    address varchar2(200)
)
--did 是否必须创建外键约束呢?不是的,添加之后添加数据就会收到外键约束?影响。
--添加外键约束:alter table 从表表名(外键在哪个表) add constraint 外键约束名称 foreign key(列名--外键字段名称) references 主表名称(主键列名)   
alter table student_hw add CONSTRAINT ck_student_did FOREIGN key(did) references dangan_hw(id);
--是否一定要设置外键呢,可以设置,也可以不设置。
--外键约束的特点:需要主表有数据,才能新增。如果子表引用了主表的id,那么要先删除子表的数据才能删除主表的内容
--外键约束 student的did:可以为空(如果不想为空就添加多一个非空约束)、也可以重复(如果不想重复就添加一个唯一约束)

--用student的id 和档案的 id关联
--alter table student add CONSTRAINT ck_student_did FOREIGN key(id) references dangan(id);


--2. 创建一个班级表  
-- 班级和学生是一对多的关系,外键就设置在多的一方
create table clazz(
    id varchar2(32) primary key,
    name varchar2(20)
);

--为学生添加一个外键
alter table student add (cid varchar2(32));--不建立外键约束就自己来维护这个外键就可以了。

--3. 多对多。一个学生可以选择多门课程,一门课也可以有多名学生。   多对多:需要创建一张中间表
create table course_hw(
    id varchar2(32) primary key,
    name varchar2(32)
);

create table student_course_hw(
    id varchar2(32) primary key,
    sid varchar2(32),
    coid varchar(32)
);

alter table student_course_hw add constraint st_mid foreign key(sid) REFERENCES student_hw(id);
alter table student_course_hw add constraint c_mid FOREIGN key(coid) REFERENCES course_hw(id);


class_sqlF:

-------------------第二
create table test1(
    id varchar2(32) primary key,
    aaa varchar2(32),
    bbb varchar2(32)
);
--delete 语句只是删除表数据
delete from test1;
--drop 语句删除整个表
drop table test1;

--oracle 10g之后有个 闪回的功能,还原到删除之前的状态
FLASHBACK table test1 to before drop;--危险的操作。

--删除表的列
alter table test1 drop(bbb);

--截断表数据--效果是和delete一样,可是功能不一样。delete支持事务。truncate性能高一点
truncate table aaa;

--查看表结构
desc test1;  --写一个根据数据表自动生成代码


--一次性插入多条数据呢?可以的,写法有带你麻烦
--可以使用dual 虚拟表 添加 dual是空表
--1:执行函数  2.执行计算  3.充当一张数据表来用

select * from dual;
select '123' as zifu from dual;
select user from dual;--查看到当前用户名
select '10','黄忠' as from dual;
select * from (
        select '10','黄忠' from dual
        union
        select '11','黄忠' from dual
        union
        select '12','黄忠' from dual
        union
        select '13','黄忠' from dual
        );

insert into hero_day3(
    select * from (
        select '10','黄忠' from dual
        union
        select '11','黄忠' from dual
        union
        select '12','黄忠' from dual
        union
        select '13','黄忠' from dual
        )
);


--------------------3.事务
--事务是数据库管理执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
--记住事务4性质:原子性、一致性、隔离性、持久性
--在person 中添加一个字段,演示我们的银行转账。
alter table person add (yue number(16,2));

--演示转账   ---orcale  事务时默认开启的。
update person set yue=yue-100 where id=1;
--如果在添加数这里报错了,那么就需要进行数据回滚。使用rollback关键字
--rollback;
update person set yue=yue+100 where id=2;
--如果2个语句都可以执行成功,则提交数据到数据库。 commit
--执行 dml(insert 、update、delete)、dcl(grant 授权)、dll(create、 table/..)
--都会有事务
rollback;
commit;
select * from person;--在另一个用户查询到的和在这里查询到的person不一样。因为,事务正在进行中,在没有提交之前,别人的事务无法读取到这个事务。查到的还是之前提交之前的数据。



------------------------4.select语句----------------------
--基础的select语句
--select  *|{[DISTINCT] column|expression [alias],...} from 表名
--*代表返回数据表的所有字段
select * from person;

--单独查询某个字段
--写查询语句的时候,什么都不用像,先写一个 select * from,然后要查询哪张表,再写上表名
select id,name,yue from person;
--表名后面的P就是别名,就是在返回字段内容中可以使用p的这个别名,在where条件后面,也能使用p的这个别名。
select p.name,p.id,p.* from person p;--p的别名代表的是person数据表。随便取,前后一致就行
--sql大小写不敏感,别名也是。
--sql语句可以分行写
select 
    t1.NaMe,
    t1.id,
    t1.*
from 
    person t1;

--查询虚拟表  查看系统当前时间
select sysdate from dual;

-----------------运算符
select * from person;
--数字和日期使用的算术运算符。使用别名,把结果的列名修改回来
--1.使用as使用别名
select id,name,age,yue+100*2 as yue from person where id = 1;
--别名的第二种方式。直接用空格隔开,或者用双引号括起来
select id,name,age,yue+100*2 yue from person where id = 1;
select id,name,age,yue+100*2 "余额" from person where id = 1;

--表别名,直接使用空格隔开或者双引号,不能使用as。
select id,name,age,yue+100*2 yue from person p where id = 1;

-----------------连接符
--把name和age字段合在一起
select name||age name_age from person;
select '我叫'||name||'今年'||age string from person;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值