文章目录
数据库
用来存储和管理数据的仓库
优点
- 可存储大量数据,方便检索
- 保持数据的一致性、完整性、安全、可靠
- 通过分析组合可产生新数据
分类
- 磁盘文件存储数据库
- 层次结构模型数据库
- 关系型数据库
- 使用二维表格存储数据
- MySQL 就是关系型数库
- 关系-对象型数据库
常见数据库
Oracle
:甲骨文- 传统行业使用较多(不差钱行业)
- 银行、政府部门等
DB2
:IBMsqlserver
:微软sybase
:塞尔斯MySQL
:甲骨文- 互联网公司使用较多
RDBMS
RDBMS
:关系型数据库管理系统,即数据库服务器Relational DateBase Management System
DBMS
:数据库管理系统database management system
- DB:数据库
database
RDBMS
=Management
(管理员) +datebase
(数据仓库)datebase
= N 个table
table
:表结构
- 安装数据库服务器后可以在服务器创建多个数据库
- 数据库中可以创建多张表
SQL
定义
- 结构化查询语言,属于高级语言
- 标准通用的语言
- 标准的 sql 适合所有的数据库产品
- 执行时内部先进行编译,再执行 sql
- 编译、执行由 DBMS 完成
- 通过执行 sql 语句来操作 DB 中的数据
- DBMS 执行 SQL 操作 DB 中数据
分类
DDL
:数据定义语句Data Definition Language
- 对表结构增删改
create
(创建)、drop
(删除)、alter
(修改)
DML
:数据操作语句Data Manipulation Language
- 操作表中数据
- 增
insert
、删delete
、改update
- 增
DQL
:数据查询语句(select)Data Query Language
DCL
:数据控制语句Data Control Language
- 管理数据库,如用户权限
grant
赋予;revoke
收回
TCL
:事务控制语言(T:Transaction)Transaction Control Language
commit
:提交事务rollback
:回滚事务
sql 脚本
- 文件后缀拓展名为
.sql
且文件中编写了大量 sql 语句- 这样的文件被称为
sql
脚本
- 这样的文件被称为
sql 语句规范
sql
语句以;
结尾- 最后一句可以不写
sql
语句不区分大小写- 只有存储的数据区分大小写
- 字符串以
''
引用- 支持使用
""
,但尽量不用
- 支持使用
- 数据库不可用
=
判空is null
、is not null
来判断空- xxxxxxxxxx12 1# dos命令备份,文件名可以带路径2mysqldump -u 用户名 -p密码 -B 数据库1 数据库2 数据库n > 文件名.sql 34# 备份数据库中具体的表,不写-B(B:表示数据库)5mysqldump -u 用户名 -p密码 - 数据库 表1 表2 表n > 文件名.sql 67-- 恢复数据库8# 进入 MySQL 命令行执行,先在 dos 窗口登录 MySQL9Source 文件名.sql1011# navicat 中右键数据库转储 SQL 文件可以备份数据库12# 右键运行 SQL 文件可以恢复数据mysql
null
参与运算结果都为null
- 使用
()
提高优先级执行顺序
CRUD
- 增查改删
- 增加:
Create
- 检索:
Retrieve
- 修改:
Update
- 删除:
Delete
MySQL
启动
-
DOS命令 命令行启动
-
服务方式启动(界面)
-
net stop mysql服务名
:启动服务 -
net start mysql服务名
:关闭服务
-
连接
-
命令行连接,语法格式
mysql -h 主机IP -P 端口 -u 用户名 -p密码
- 登陆前需要服务已经启动
-h
:默认本地 ip-P
:默认是 3306-p
:直接跟密码,没有空格- 此时不输入密码再回车后会要求输入密码
-
数据库常见端口
- mySQL:3306
- oracle:1521
- sqlServer:1433
修改密码
-- set password 命令(命令行)
mysql> set password for 用户名@localhost = password('新密码')
-- mysqladmin
mysqladmin -u用户名 -p旧密码 password 新密码
-- update 编辑
update user set password = password('新密码') where user = '用户名' and host = 'ip地址'
忘记密码
- 关闭正在运行的
MySQL
服务 - 打开
DOS
窗口,转到mysql\bin
目录 - 输入
mysqld --skip-grant-table
,回车- 该指令意思是启动 MySQL 服务的时候绕过权限表认证
- 再打开一个 DOS 窗口,转到
mysql\bin
目录- 第一个窗口此时不能使用
- 输入
mysqld
回车,成功后出现 MySQL 提示符 > - 连接数据库:
user mysql
- 改密码:
update user set password = password('新密码') where user = '用户名';
- 通过自己的用户名修改密码
- 刷新权限:
flush privileges
- 退出:
quit
- 注销系统,重新使用刚改过的密码进入
三层结构
结构
DBMS
:数据库管理系统- 数据库1(存放在数据库目录的 Data 文件夹下)
- 数据库2 …
- 数据库n
- 表1、视图、事件等存储数据(存放在数据库所在的目录下)
- 表2 …
- 表n
- 安装 MySQL 数据库就是在主机安装数据库管理系统(DBMS),管理多个数据库
DataBase Management System
- 一个数据库中可以创建多个表,表中记录数据
- 外部程序通过服务端口和数据库进行通信
表
- MySQL数据库普通表的本质仍是文件
- 数据库中数据必须持久化才能持续存放
- 表中包括行(row),列(column)
- 一行被称为一条记录(data)
- Java 程序中一条记录往往代表一个对象
- 一列被称为 一个字段
- 应有 字段名、数据类型、约束 等属性
- 一行被称为一条记录(data)
三范式
- 设计范式
- 设计表的依据
- 按照三范式设计的表不会出现数据冗余
- 实际设计以客户需求为主
- 有时以数据冗余换执行速度
关系数据库设计三范式
- 任何表都应该有主键,每个字段是原子性的不可再分
- 不能存在重复记录
- 字段不能再拆分开
- 例如:联系方式可拆分为 email、电话,违反第一范式
- 按具体情况决定设计,不一定必须遵循范式
- 所有非主键字段完全依赖主键,不能产生部分依赖
- 在第一范式基础上进行
- 不能有非主键字段部份依赖主键
- 即:不使用复合主键
- 完全依赖:单独和一个字段相关
- 部分依赖:同时和联合字段相关
- 在第一范式基础上进行
- 非主键字段直接依赖主键
- 在第二范式基础上进行
- 不能产生传递依赖
- 所有字段都直接和主键存在依赖
- 非主键字段直接和主键相关,不能通过其他字段和主键产生依赖
- 在第二范式基础上进行
经典设计
多对多
-
多对多,三张表:关系表加外键
-
student 学生表
- sno(PK),sname
-
teacher 教师表
- tno(PK),tname
-
relation 关系表
- id(PK),sno(FK),tno(FK)
-
一对多
-
一对多,两张表:多的表加外键
-
class 班级表
- cno(PK)、cname
-
student 学生表
- sno(PK)、sname、cno(FK)
-
一对一
- 两张表主键共享
- user_login 用户登录表
- id(PK),username,password
- user_detail 用户详细信息表
- id(PK,FK),name,adress …
- 第二张表主键同时外键连接第一张表主键
- 保证两张表记录一一匹配
- 没有重复记录,没有多余记录
- user_login 用户登录表
- 外键 + 唯一约束 + not null
- user_login 用户登录表
- id(PK),username,password
- user_detail 用户详细信息表
- id(PK),name,userId(FK, unique,not null)…
- 相当于主键 + 外键,适用于已经存在主键的情况
- 外键唯一保证两张表的联系,并且没有重复记录
- user_login 用户登录表