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
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 图: 实体-关系图
实体: 学生, 老师 (一般是名词,) 使用 矩形
关系: 指导关系 ----- 一般是 动词 使用 菱形
属性: 是 实体具备的 名字特性, (学生实体为例: 学号, 姓名, 性别, 住址……….) (一般是名词,) 使用 椭圆
数据类型 | 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;