Oracle

简介

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 图: 实体-关系图

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

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

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

Oracle_第1张图片

数据类型

数据类型 Oracle Mysql
数值类型 (整型) Number Int ànumber(10) Int, Bigint
数值类型 (浮点) Number(10,2) Float ,double,decaimal(M,D)
字符串类型 Varchar2 Varchar
日期类型 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;
 ​

你可能感兴趣的:(oracle,oracle,数据库)