Oracle

2024-01-03 10:27:35

简介

Oracle 数据库

1.数据库 DataBase : 存储数据的仓库

SQL 与 No SQL

SQL: 结构化查询语言, 增删改查

关系型数据库 利用表存数据

No SQL: 非关系型数据库, 例如 Redis, 他们采用的键值对形式存数据,

键值对: 班长 ---- 李四

副班长----王五

学习委员--- 赵六

数据库 术语,

DDL: 数据定义语言, 对数据库中的某写对象(数据库或表),进行管理

create , drop, alter

DCL:数据控制语言, 主要作用 授权, 数据回滚roll back 数据提交 commit

DQL:数据查询语言, 主要用于 查询操作, select from where

DML:数据操纵语言, 主要用于 增加,删除,修改, insert delete update

数据库特性 ACID

A: 原子性, 事务里所有的操作,要么全部做完, 要么都不做,

事务成功的条件是 事务里的所有的操作都成功,

只要有一个操作失败,整个事务就失败,需要回滚

示例: 银行转账, A账户 转100 给 B 100, 分2步 第一 从A 取出 100, 第二 存B账户100,

C 一致性: 数据库要一致处于一致的状态, 事物的运行不会改变数据库原本的一致性约束.

A 300元, B: 400元, 一共 300+400 =700

A 给 B 转100, A 200, B 500 一共700

I: 独立性 并发的事务之间不会相互影响,如果一个事务要访问的数据正在被另一个事务修改,只要另外一个事务未提交,他所访问的数据不受未提交事务的影响,

示例: A 转账给B 200元, 再这个交易还未完成的情况下, 此时 B 查询自己的账户余额 是 看不到即将增加的 200元的,

D 持久性

持久性 指 一旦事务提交后,它所做的修改将会永远的保存在数据库中,即使出现宕机也不会丢失,

三大范式

三大范式: 为了建立冗余少, 结构合理的数据库, 设计数据库时 必须遵循 一定的规则,

在 关系型数据库中 这种规则叫 范式

1. 第一范式

第一范式 确保每列保持原子性

2. 第二范式

第二范式 确保表中的每一列都和主键相关, 而不能只与 主键的某一部分相关

3. 第三范式

确保每列都和主键列直接相关,而不是间接相关

ER图

ER 图: 实体-关系图

实体: 学生, 老师 (一般是名词,) 使用 矩形

关系: 指导关系 ----- 一般是 动词 使用 菱形

属性: 是 实体具备的 名字特性, (学生实体为例: 学号, 姓名, 性别, 住址……….) (一般是名词,) 使用 椭圆

数据类型

数据类型OracleMysql
数值类型 (整型)Number Int ànumber(10)Int, Bigint
数值类型 (浮点)Number(10,2)Float ,double,decaimal(M,D)
字符串类型Varchar2Varchar
日期类型Date年月日时分秒Date 只有年月日 Datetime 年月日时分秒

Varchar(50) --**à 可变长度的字符,最多允许50个字符,**

Char(50) -**à 固定长度的字符, 长度就是50, 例如 abc ,补齐 47个空格,**

?首先得知道Oracle是严格区分大小写的
??
?写建表语句如果没有用双引号,则默认采用大写,也就是说,oracle在看到输入的sql脚本中,没有引号的单词,都会装换成大写。
??
?所以我们写sql查询的时候,不用非得写大写,是因为Oracle帮我们转换了。
??
?当我们需要写小写的时候,不想Oracle帮我们装换成大写,这时候就需要加上""双引号,只有用双引号括起来的,oracle才不会转换。
??
?当表名或字段名只有大写字母的时候,双引号可有可无,因为“AAA”与AAA的效果是一样的。不写引号,Oracle会自动转换成大写。
??
?所以建表一旦用了引号括起来的小写字段,或小写表名,我们写查询,修改,删除的时候也需要用引号,因为不写引号,oracle就会帮我们转换成大写,而大写的字段,或表名在数据库中是没有的,所以会报  表或视图不存在  这个错误
??

建表

?语法:
?create  table  表名(
?列名  列的数据类类型,
?列名2  列2的数据类型,
?列名3  列3的数据类型
?)
??

示例:

?-- 建表 dept
?create table dept(
?  depid number,
?    depname VARCHAR2(40)
?)
??
?-- 员工表 emp
?create table emp(
??
?eno number,
?ename varchar2(40),
?sex char(1),
?borndate date,
?depid number 
??
?)

添加约束

主键 alter table 表名 add primary key(主键列名);

非空 alter table 表名 modify 列名 列数据类型 not null; 唯一 unique alter table 表名 add unique (列名)

默认值 default

alter table 表名 modify 列名 default '默认值' 外键, 主从表,

alter table 从表 add constraint 外键名字 foreign key (外键) references 主表(主键)

示例:

?-- 主键约束
?alter  table result add primary key(rid);
??
?-- 非空 
?alter table result modify  stuno VARCHAR2(50) not null;
??
?-- 唯一约束 ?  student 表的phone 应该唯一的
?alter table student add ? unique (phone) ;
??
? 
?-- 默认值 ? student  表的 sex 设置 默认值
??
? alter table student modify sex default '1' ? ?
??
?-- 外键
?alter table student add constraint fk_grade_student foreign key (gid) references grade(id)
??

删除约束,添加列,修改列,删除列

?删除主键约束
?alter table 表名 drop primary key ? ?  --删除主键
??
?alter table 表名 drop constraint 约束名  –-删除外键,唯一,外键
??
?alter table 表名 modify 列名 类型null; ? ? ? ? ----删除非空约束
?alter table 表名 modify 列名 default null ; -- 删除默认值约束
??
?--  添加列 
??
?-- 语法:  alter table 表名 add (列名  数据类型)
??
?alter table dept add (pos varchar2(50));
??
?-- 修改列名类型
??
?-- 语法:  alter table 表名 modify (列名  新数据类型)
??
?alter table dept modify (pos number);
??
?-- 修改列名 (重命名列名) 或 先删除 再增加
??
?-- 语法: alter table 表名 rename column 旧列名 to 新列名
??
?alter table  dept rename column pos to position_1
??
?-- 删除列名
?-- 语法 : alter table 表名 drop column 列名;
??
??
?alter table dept drop column position_1;
??

示例:

?-- 为 result表 增加 examtime ?
?alter table result add (examtime date);
??
??
?-- 修改 result 表的rid 为 id
??
?alter table result rename column rid to id;
??
?-- 为 result 表 增加一列 abc varchar2(50)
??
?alter table result add (abc varchar2(50));
?-- 删除  result 表 abc 列
?alter table result drop column abc;
??

文章来源:https://blog.csdn.net/ly121862/article/details/135354966
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。