数据库:数据的仓库,主要解决数据存储和管理的问题,实现数据的持久化。
管理数据:能够非常方便的实现对数据的CRUD。
C - Create - 新增数据
R - Read - 读取数据
U - Update - 编辑数据
D - Delete - 删除数据
持久化:把数据从不能长久保存数据的存储介质转移到可以长久保存数据的存储介质中,
简单的说,就是把数据从内存转移到硬盘。
-
数据库的分类:
-
关系型数据库
- 1970s - Codd - 关系模型
- 特点:
- 理论基础:关系代数和集合论
-
-
具体表象:用二维表保存数据
- 行:记录(record)
- 列:字段(field)
-
-
编程语言:SQL(结构化查询语言)
- DDL(数据定义语言):create / drop / alter
- DML(数据操作语言):insert / delete / update
- DQL(数据查询语言):
-
DCL(数据控制语言):
注:SQL不区分大小写!!!
-
-
产品:
- Oracle
- MySQL(*)
- PostgreSQL
- SQL Server
- DB2
- SQLite
-
NoSQL(非关系型数据库)—> 更符合大数据时代的需求
-
NewSQL
2008 - 去IOE运动
-
普通Linux —> IBM小型机
-
MySQL集群 —> Oracle数据库
-
FastDFS(分布式文件系统) —> EMC存储设备
使用MySQL
-
MySQL的配置文件:/etc/my.cnf
-
客户端(命令行工具):
mysql -u root -h 服务器的IP地址 -p -
显示所有数据库:
show databases; -
创建数据库(DDL)
create database school default charset utf8mb4; -
删除数据库
drop database if exists school; -
修改数据库
alter database school default charset utf8mb4; -
切换数据库上下文环境
use school; -
显示数据库下的所有表
show tables; -
创建二维表(DDL)
create tabletb_student
(
stuid
integer not null comment ‘学号’,
stuname
varchar(20) not null comment ‘姓名’,
stusex
boolean default 1 comment ‘性别’,
stubirth
date comment ‘出生日期’,
primary key (stuid
)
);
~ auto_increment 编号自动增长,必须是主键也必须是integer类型(整形)innodb - 支持行级锁,能够应对高并发访问;支持事务,保证数据的强一致性,
所以这个引擎最适合今天的互联网应用。主键列(primary key):一张表中能够唯一确定一条记录的列我们可以将其设置为主键列,
主键列不能重复,主键列也不允许为空值。
? data types;
? int; -
显示表结构
desc tb_student; -
显示建表语句
show create table tb_student; -
删除表
drop table if exists tb_student; -
修改表
alter table tb_student add column stuaddr varchar(200);
alter table tb_student drop column stuaddr;
alter table tb_student modify column stusex char(1) default ‘男’;
alter table tb_student change column stusex stugender char(1) default ‘M’;
修改表的字符集:
alter table tb_student convert to charset utf8mb4;flush privileges; 修改的立即生效!!!
-
插入数据
insert into tb_student values
(1001, ‘骆昊’, ‘M’, ‘1980-11-28’, ‘四川成都’);
insert into tb_student (stuid, stuname) values
(1002, ‘王大锤’);
insert into tb_student (stuid, stuname, stugender) values
(1003, ‘孙小美’, ‘F’),
(1004, ‘白元芳’, default),
(1005, ‘武则天’, ‘F’); -
删除数据
delete from tb_student where stuid=1005;
delete from tb_student where stuname=‘白元芳’;删全表:
truncate table tb_student; -
更新操作
update tb_student
set stubirth=‘1992-2-2’, stuaddr=‘河北保定’
where stuid=1002; -
查询数据
select * from tb_student;
select * from tb_student\G
文本编辑神器:
-
Visual Studio Code
-
Sublime
-
Atom —> Miku
-
TextMate
-
Notepad++
latin1 —> iso-8859-1 —> 中文全部变成? —> 编码黑洞
row - 行
column - 列
-
数据库设计:
-
指导理论:范式理论(Normal Form)—> 规范程度
- 1NF
- 2NF
- 3NF
--------------------------------------------
- BCNF
- 4NF
- 5NF
~ ER图(实体关系图)
E:实体(Entity,二维表)---> 矩形框
实体的属性 ---> 椭圆框
R:关系(Relationship)---> 菱形框
关系的重数
- 1:1
- 1:N
- M:N
~ 外键(foreign key)约束:
alter table tb_student add constraint fk_student_collid
foreign key (collid) references tb_college (collid);
create table tb_teacher
(
teaid integer not null comment ‘工号’,
teaname varchar(20) not null comment ‘姓名’,
teasex char(1) default ‘M’ comment ‘性别’,
teabirth date comment ‘出生日期’,
teatitle varchar(10) default ‘讲师’ comment ‘职称’,
collid integer not null comment ‘所属学院’,
primary key (teaid),
foreign key (collid) references tb_college (collid)
);
create table tb_teacher
(
teaid integer not null comment ‘工号’,
teaname varchar(20) not null comment ‘姓名’,
teasex char(1) default ‘M’ comment ‘性别’,
teabirth date comment ‘出生日期’,
teatitle varchar(10) default ‘讲师’ comment ‘职称’,
collid integer not null comment ‘所属学院’,
primary key (teaid)
);
– 添加外键约束
alter table tb_teacher add constraint fk_teacher_collid
foreign key (collid) references tb_college (collid);
– 删除外键约束
alter table tb_teacher drop foreign key fk_teacher_collid;
外键约束建立了两张表之间的参照完整性,有外键约束的存在无效的数据就无法录入,
但是外键约束对性能有明显的影响,所以实际项目中有可能会根据需要去掉外键约束。
-
MySQL图形化客户端工具:
- MySQL Workbench
- Navicat for MySQL(导航猫)
- SQLyog CE / EE(海豚)
- Toad for MySQL(蛤蟆)