数据库
数据库概述:
概念:DBS(DB和DBMS)DB(Database的缩写)、DBMS(Database Manager System 的缩写)。两者共同构成了 DBS(Database System)。即:DBS(数据库系统) 包含 DB(数据库) 和 DBMS(数据库管理系统)。
简单的说:数据库管理系统是数据库系统的核心,是管理数据库的软件。常见的数据管理系统软件有:Oracle、MySql、Sql Server、SYBASE、informix、DB2等。
关系型数据库:(类似 excel 表格存储数据 )
概述:是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据, 同时也是一个被组织成一组拥有正式描述性的表格 。
-
关系:关系数据库的表采用二维表格来存储数据
是一种按行与列排列的具有相关信息的逻辑组,它类似于Excle工作表。 -
属性(字段)
数据表中的每一列称为一个字段,表是由其包含的各种字段定义的,每个字段描述了它所含有的数据的意义 。
-
元组(记录)
表中的一行即为一个元组,或称为一条记录。
SQL概述
结构化查询语言(Structured Query Language) 即 S-Q-L 发音
高度概括:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
SQL分类
SQL 分为三种类型:
- DDL(数据定义语言(Data Definition Language),开发前的设计):主要指数据对象的创建(表、用户);(主要学习的内容)
- DML(数据操作语言(Data Manipulation Language),开发中使用部分):主要指数据库的查询和更新操作;(主要学习的内容)
- DCL(数据库控制语言(Data Control Language),系统人员工作):主要是进行权限管理操作(需要结合用户来观察)。此部分由DBA(数据库管理员)负责。
sql基本命令
1: 使用sqlplus 进行 sql命令操作
2:从 cmd 输入sql命名 还是需要切换到 sqsplus
用户登录命令: ( 4个用户)
1.超级用户: sys / 1234
2.管理员用户: system/ manager
3.通用户: scott /tiger
4.大数据用户: sh/sh
登录方式: 用户名和密码
system/ manager
scott /tiger
用户切换:
普通用户:
conn scott/tiger
如果切换管理员用户:
conn sys/1234 as sysdba ;
管理员的切换可以简写:
conn / as sysdba;
查看用户:
show user;
用户上锁解锁:
上锁 :
1 切换管理用户 conn / as sysdba;
2 上锁 : alter user scott account lock;
3 切换普通用户 conn scott /tiger 系统提示 acott account lock 上锁了
解锁:
1 切换管理用户 conn / as sysdba;
2 解锁 alter user scott account unlock;
3 切换普通用户 conn scott /tiger (解锁 后 可以登录 )
修改用户名: 必须是管理员用户才可以修改
password 用户;
password scott; 输入对应的用户名和密码
1.切换用户: conn / as sysdba;
2.设置用户密码: password scott;
3.密码设置 : xxxx (没有显示密码)
4.密码设置2:xxxx (不显示密码)
5.切换用 conn scott/新密码
**屏幕清理: **
host cls;
解决 设置 格式参数:
set pagesize 30 一页显示多少条数据
set linesize 200 一行显示多少字节数据
数据的视图操作工具:
PLSQL( oracle 视图工具 油漆桶)
SQLyog ,Navicat (mysql比较好用的视图工具)
DataDriG
PLSQL的基本设置:
sql窗口 书写sql代码 命令窗口 和我们的sqlplus窗口类似
视图工具 对象 选择 scott用户 :
myobject
tables 表
scott用户 默认有四张 数据表 (学习mysql使用)
1 .选择表 可以查询数据 (表有锁图标 不能修改数据 )
2 .编辑数据 可以修改数据 (编辑数据后 保存数据 / 提交数据 到数据库)
3 .编辑表 就是设置 表的结构
用户管理:
一.创建用户:
语法: create user 用户名 identified by 密码;
创建用户:
create user root identified by root;
用户切换 登录 (不能登录 没有权限)
二.用户授权:
概述: 用户 权限 角色
1.角色: 角色是为了更好地授权 方便管理权限 ( 普通雇员 , 经理 ,副总 ,CEO)
2.权限: 规定哪些能干 哪些不能干 (connect 连接的权限 resource 资源的权限)
授权语法: 必须是管理员才可以授权
grant 权限 to 用户;
给root 用户授权 connect (连接的权限)
grant connect to root;
connect 这个权限只能连接数据库
给root用户授权 resource 权限
1. 切换到管理员用户 conn / as sysdba;
2. 授权 grant resource to root;
3. 切换到 root 用户 conn root/root
4. 创建表: create table t_stu(xxx);
三.回收角色:把之前的角色 清理掉
语法:revoke 权限 from 用户名;
1.切换到管理员用户: conn / as sysdba;
2.回收授权 : revoke connect from root;
3. root登录 会报错误
四.修改密码: 管理员可以修改用户密码:
语法: alter user 用户名 identified by 密码;
alter user root identified by root;
五.用户删除:
语法:drop user 用户名 [cascade];
语法:cascade 联级删除 ( 把删除的用户 产生的关联数据都删除)
表的操作:
一.创建一张表:
语法:
create 创建 table 表
create table 表名(
字段1 数据类型(数据长度),
字段2 数据类型(数据长度),
字段3 数据类型(数据长度)
....
);
创建一张表:
create table t_stu(
sid number(3),
sname varchar2(10)
);
create table t_stu 创建一张表 命名t_stu;
sid 是表的字段 , number数据类型 长度为3
sname是表的字段 ,varchar2 数据类型 长度为10
注意事项:
1. oracle 中sql语句是不区分大小写 如果是小写 oracle 数据库把把小写转成大写
2. 如果表已存在 就不能重写创建
3. 每个字段都是用逗号隔开 最后一个字段 不用逗号隔开
4. 表的命名规范 见名知意 一般命名为 t_表名,
二. 删除表:
语法:drop table 表名;
删除表
drop table t_stu;
三.表添加一个字段:
语法: alter table 表名 add 字段 字段类型;
创建表:
create table t_stu(
sid number(3),
sname varchar2(10)
);
添加字段 :
alter table t_stu add sage number(2);
四.修改字段类型 :
语法: alter table 表名 modify 字段 新的字段类型;
alter table t_stu modify sage varchar2(2);
五.修改字段名称:
语法: alter table 表名 rename column 旧字段 to 新字段;
alter table t_stu rename column sage to age;
六.删除表的字段 :
语法: alter table 表名 drop column 字段名;
alter table t_stu drop column age;
七.注解: (解释 )
- 表的注解
语法:comment on table 表名 is ‘注解内容’
comment on table t_stu is '学生表';
- 字段注解
语法:comment on column 表名.字段 is ‘解释内容’;
comment on column t_stu.sid is '学生id';
comment on column t_stu.sname is '学生名字';
数据类型数据类型:
一. 字符型数据类型
1.char 字符型[长度固定]
能够存储2000个字节
系统会分配固定的空间 不会因为数据大小的改变进行 空间的调整 节约了计算空间的时间 提高了效率
2.varchar2 字符型[可变长度]
能够存储4000个字节
相比char 而言 内存利用更高 会随着数据大小进行 长度的动态分配
3.long 字符型[大型的字符串]
能够存储最大长度是2G 文本
create table testChar(
text1 char(4),
text2 varchar2(4),
text3 long,
text4 varchar2
);
注意:
char 可以有默认长度 1 个
varchar2 必须要给长度
二.数据类型
number 数据值类型 可以表示我们的小数 整数
1.根式: number[p(,s)] p是 整数 s 小数进度
2.number 表示默认的整数 长度 32 最高进度38位
3.number(3) 表示整数的长度是 3
4.number(5,2) 整数是 5个 长度 小数 2个 , 如果 不够2位 补 0 (如果从超过 2位 四舍五入 保留 2位)
create table testNum(
id1 number, -- 默认长度
id2 number(5), -- 5个长度
id3 number(5,2) -- 3个整数 2小数
);
三.date 日期类型数据
1.date 日期 精确到秒 2019/11/25:14:21:23
2.timestamp 时间戳 精确到 秒后面的 6 位
create table testDate(
time1 date,
time2 timestamp
);
-- 插入一个 timestamp 这个时间格式
Insert into testDate(time2) values (to_timestamp('1990/07/17','yyyy/mm/dd hh24:mi:ss'));
四.大数据类型
1.blob 存储大型二进制文件
2.clob 存储大型的字符文件
数据库中的约束:
一.非空约束 限定某个字段不能为null
create table testNull(
id number(3),
name varchar2(20) not null
);
用户 在字段后面添加 not null 约束我们的 字段不能为null 值
如果 不能添加 这个条记录
二.默认值的约束: 如果字段没有给值 给默认值
create table testDefaul(
id number(10) not null,
name varchar2(20) default '老宋',
age number(2) default 18
);
使用 在 字段后面天添加 default xxx 给默认值就好
三.唯一约束 保证某个字段的具体值是唯一的
create table testUnique(
id number(5) unique,
name varchar2(20)
);
如果出现重复 数据不能添加成功
注意: 1 唯一性可以 为null 2个都为null 不算违背了 唯一性原则 一般使用
unique 要加 not null 约束
2.一个字段可以添加多个约束 unique not null
四.主键约束
1.主键类型 unique + not null
2.主键是自己设置的表示 某一条记录 唯一的约束 表示该字段必须唯一 而且不能重复
3.可以自动创建索引,提升查询的效率
语法: 字段 primary key;
create table testPrimary(
id number(3) primary key, -- id 是唯一约束
name varchar2(20)
);
如果把表创建完毕了 想再添加我们的 唯一约束 :
语法: alter table 表名 add constraint 标识符 primary key(字段名称);
create table testPk(
id number(3),
name varchar2(20)
);
alter table testPk add constraint pk_id primary key(id);
联合主键: 多个字段联合其来成为主键
注意事项:
1. 主键唯一性 一张表 只能有一个主键
2. 一张表可以有多个 unique not null 但只能有一个主键
五.外键约束 :
外键: 把2张表进行关联 , 从表中重复出现,在主表中作为主键存在
主表: 一方
create table t_class(
cid number(3) primary key,
cname varchar2(20)
);
从表: 多方
create table t_stu(
-- 添加 主表的pk 字段
tid number(3) primary key,
sname varchar2(20),
cid number(3),
-- 设置 外键 (从表和 主表进行关联)
constraint fk_stu_class foreign key (cid) references t_class(cid)
);
fk_stu_class 外键的标识符 外键取名
foreign key 定义外键
references 关联那个表的那个字段
创建表以后 如果设置外键(命令)
alter table t_stu add constraint fk_stu_class foreign key(classId) references t_class(cid);
注意事项:
1. 外键可以在从表中重复出现 ,他在主表中是主键
2. 一张表可以有多个外键
3. 外键可以为null
4. 外键的作用是关联多表,可以建立表之间的关系 (一对一 一对多 多对多)
5. 删除主表时候 如果 从表有使用主表的数据 是不能删除的, 从表的数据可以直接删除
如果需要把删除 主表 (java班级 ) 学生 在使用java班级的数据不能直接删除
(可以设置联级删除 java班级删除 会把java班学生也删除 )
6. 2表关联了 先删除 从表 再删除主表
先删除从表 学生 在删除 班级
7. 外键是多表查询时 必要条件
8. 开发过程中 建议是 逻辑外键 (有逻辑关系 不用设置 外键关联)
六.check 约束 (了解)
check: 保证我们的字段 按照一定的格式在指定的范围 内存储
create table t_person(
sname varchar2(20),
-- sage number(3) check(sage > 20)
-- sage number(3) check(sage between 20 and 30)
sage number(3) check(sage in(18,19,20))
);
添加的 check 约束
check(sage > 20) 规定age > 20
check(sage between 20 and 30); 规定age 在 20 - 30 之间
check(sage in(18,19,20)) 规定age 必须在 18,19,20
check 约束可以给字段加运算符 和一些关键字:
> < =
and or
in / not in
is null / is not null