数据库 - 数据的仓库(集散地) - database - 实现数据持久化和数据管理
持久化 - 将数据从内存转移到能够长久保存数据的存储介质的过程
数据库的分类:关系型数据库(SQL)和非关系型数据库(NoSQL)
文件系统 / 层次数据库 / 网状数据库
关系型数据库
- 1970s - E.F.Codd - IBM研究员 - System R
- 理论基础:关系代数和集合论
- 具体表象:用二维表来保存数据 - 学生表
~ 行:一条记录 - 一个学生的信息
~ 列:一个字段 - 学生的某个属性,例如:学号、姓名、出生日期
~ 主键列:能够唯一标识一条记录的列,例如:学生的学号 - 编程语言:SQL - 结构化查询语言
~ DDL - 数据定义语言 - create / drop / alter
~ DML - 数据操作语言 - insert / delete / update / select
~ DCL - 数据控制语言 - grant / revoke
LAMP = Linux + Apache + MySQL + PHP
PHP ---> Java
MySQL ---> Oracle
Linux ---> 小型机
去IOE运动
IBM的小型机
Oracle的数据库
EMC的存储设备
关系型数据库产品:
- Oracle - 甲骨文
- IBM DB2
- Microsoft SQLServer
- Sybase
- MySQL
- PostgreSQL
- SQLite
连接MySQL的图形化客户端工具:
- Navicat for MySQL - 病猫
- SQLyog - 海豚
- Toad for MySQL - 蛤蟆
学生(学号、姓名、性别、生日、家庭住址)
学院(编号、名称、网站、……)
老师(工号、姓名、性别、生日、职称、所在学院编号)
课程(编号、名称、学分)
设计数据库中的表 - ER图(实体关系图)- 概念模型图
读者、图书
用户、购物车、商品、订单
用户、单车
人、身份证
实体:学生、学院
关系:属于
重数:多对一
代码:
drop database if exists school;
-- 如果存在school的库就先删除
create database school default charset utf8;
use school;
-- 创建school的库并指定编码
-- 创建学生表
drop table if exists tb_student;
-- 如果存在student的表就先删除
create table tb_student
(
stuid int not null comment '学号',
-- 学生id 是整数 不能为空,并指定描述为'学号'
stuname varchar(20) not null comment '姓名',
-- 学生姓名不能为空且设定字符串长度最多为20个字符
stusex bit default 1 comment '性别',
-- 学生性别 bit 默认为1
stubirth date comment '生日',
-- 生日是日期格式
primary key (stuid)
-- 设置学生id为主键
);
alter table tb_student add column stuaddr VARCHAR(255);
-- 修改 学生表 增加 一个 地址列
alter table tb_student change column stuaddr stuaddr VARCHAR(511);
-- 修改 地址列 为新的地址列
alter table tb_student DROP column stutaddr;
-- 删除学生表的地址列
--插入方式一 :
insert into tb_student values(1001,'张三丰',1,'1982-2-2','湖北');
-- 插入一个学生(要与前面定义的顺序一致编号,姓名,性别,生日,地址)
-- 注意:需要哪个语句的执行就去选择 那句执行一次
insert into tb_student values(1002,'张无极',1,'1992-2-2','湖南');
-- 生日和名字都是字符串,要加单引号
insert into tb_student (stuid, stuname) values(1003,'张翠花');
-- 插入方式二:同时添加三个学生
insert into tb_student (stuid,stuname,stusex) values
(1005,'林晓',default),
(1006,'郭靖',1),
(1007,'石达开',1);
-- TRUNCATE TABLE tb_student
delete from tb_student where stuid=1005;
-- 删除id为1005的学生
update tb_student set stuaddr='四川成都' where stuid=1006 or stuid=1007;
-- 更新数据
update tb_student set stuaddr='四川成都' where stuid in (1006,1007);
update tb_student set stubirth='1900-2-3',stuaddr='四川达州' where stuid = 1003;
-- 创建学院表
drop table if exists tb_college;
create table tb_college
(
colid int auto_increment comment '编号',
-- 学院id 自动编号 整数 描述为编号
colname varchar(20) not null comment'名称',
colweb varchar(2034) comment'网站',
primary key (colid)
);
-- 插入学院记录
insert into tb_college (colname) values
('外国语学院'),
('计算机学院'),
('经济管理学院');
-- 修改学生表添加外键约束(参照完整性)
alter table tb_student add constraint fk_student_colid foreign key (colid) references tb_college(colid);
alter table tb_college add column colid int;
update tb_student set colid = 1 where stuid between 1001 and 1003;
update tb_student set colid = 2 where stuid in (1004,1006);
update tb_student set colid = 3 where stuid=1007;
-- 创建老师表
drop table if exists tb_teacher;
create table tb_teacher
(teaid int not null,
teaname varchar(20) not null,
teasex bit default 1,
teabirth date,
teatitle varchar(100) default '助教',
colid int not null
-- PRIMARY key (teaid),
-- foreign key (colid) references tb_college(colid),
);
alter table tb_teacher add constraint pk_teacher_colid PRIMARY key(teaid);
alter table tb_teacher add CONSTRAINT fk-teacher_colid FOREIGN key (colid) REFERENCES tb_colleage;