- 数据库管理系统概述
- 数据库(DataBase,简称DB):按照数据结构来组织、存储、管理数据的仓库
- 数据库管理系统(DataBase Management System,简称DBMS):管理数据库的软件
- 数据词典(系统目录)也叫元数据,定义数据的数据,记录的是数据库中存放的各种对象的定义信息和一些其他的辅助管理信息。
- 数据管理主要经历过程
- 手工管理阶段:应用程序管理数据
- 一个程序的数据一般不能被其他程序使用
- 文件管理阶段:文件系统管理数据
- 应用程序可以通过文件系统将数据组织成一个文件
- 数据管理阶段:数据库系统管理数据
- 手工管理阶段:应用程序管理数据
- 数据库的特征
- 数据结构化
- 实现数据共享
- 减少数据冗余
- 数据独立性
- 数据库类型(按数据模型特点分)
- 网状型数据库
- 采用记录类型为节点的网状数据模型
- 层次型数据库
- 采用层次模型模拟现实世界中安层次组织起来的事物
- 关系型数据库
- 采用二维表结构组织和管理数据,并规定了表内和表间数据的依赖关系
- 关系数据库:关系就是指表,列指字段,行指记录,交点指字段值
- 网状型数据库
- MySQL数据库安装
- 若以前装过mysql,重装时会卡在第4步"Apply security settings",报错1045,
- 处理:删除C:\ProgramData\MySQL文件夹
- 若以前装过mysql,重装时会卡在第4步"Apply security settings",报错1045,
- MySQL数据库操作
- select version();//查看版本
- show databases;//查看数据库
- use 数据库名;//切换SQL语句作用的数据库
- show tables;//显示数据库中的表信息
- describe tablename;//查看具体的表结构
- show engines;//查看MySQL服务实例支持的存储引擎
- 存储引擎:就是指表的类型
- InnoDB存储引擎的特点
- 支持外键
- 支持事务
- 需要执行大量的增、删、改操作,使用此引擎
- MyISAM存储引擎的特点
- 支持全文索引,不支持外键,不支持事务,如果要执行大量的select语句,使用此引擎
- MEMORY存储引擎
- 基于Hash技术,使用内存创建数据表,访问速度快,适用于临时表
- InnoDB存储引擎的特点
- 存储引擎:就是指表的类型
- set default_storage_engine = MyISAM;//可以临时的设置存储引擎
- MySQL数据库体系结构
- 1、Connector:连接器,应用程序与MySQL数据库连接的接口
- 2、Management Services & Utilities:MySQL的辅助工具
- 3、Connection Pool:连接池,处理与用户访问相关的各种任务
- 4、Sql Interface:接受用户命令返回处理结果
- 5、Parser:解析器,解析SQL语句
- 6、Optimizer:优化器,优化查询进而保证数据查询效率最高
- 7、Caches & Buffers:缓存,缓存使用频率高的数据,缓存的类型有:表缓存、记录缓存、键缓存、权限缓存、主机名缓存等
- MySQL字符集
- 1、查看MySQL数据库服务器字符集:show variables like '%char%';
- 2、查看MySQL数据库表的字符集:show table status from mysql like '%servers%';
- 3、查看MySQL数据列的字符集:show full columns from user;
- SQL脚本文件
- source init.sql //即可执行init.sql脚本文件
- 数据库和数据表管理
- 创建数据库
- create database [if not exists] 数据库名;
- create database [if not exists] 数据库名 default charset utf8;
- show create database 数据库名;//查看数据库的相关信息
- 删除数据库
- drop database 数据库名;
- 数据表的设计
- E-R模型:实体关系模型,主要用于定义数据的存储需求,由实体、属性和关系三个基本要素构成。
- 主键(primary key)
- 保证数据的唯一性,可以一个字段,也可多个字段(称为复合主键)
- 不可取空值
- 外键(foreign key):表示实体间的关系
- 约束(constraint):定义在表上的一种强制规则
- 1、not null,非空约束,即不包含空值
- 2、unique,唯一性约束,指定列或列的组合必须唯一
- 3、primary key,主键约束
- 4、foreign key,外键约束,列与引用列之间的一种强制依赖关系
- 5、check,检查性约束
- 创建表
- 语法
- create table 表名(
- 字段1 数据类型 [约束条件],
- 字段2 数据类型 [约束条件],
- ...
- [其他约束条件],
- [其他约束条件]
- )其他选项(例如存储引擎、字符集等选项)
- PRIMARY KEY,指定字段为主键
- AUTO_INCREMENT,指定字段为自动增加字段
- INDEX,为字段创建索引
- NOT NULL,字段值不允许为空
- NULL,字段值可以为空。
- COMMENT,设置字段的注释信息。
- DEFAULT,设置字段的默认值。
- stu_sex char(2) check (stu_sex='男' or stu_sex='女'),
- 设置只为男或女
- class_dep int,
- constraint fk_class_dep foreign key (class_dep) references dep(dep_id)
- 外键约束:constraint 约束名 foreign key (从表外键字段) references 主表名(主键字段)
- 语法
- 复制表
- create table 新表名 like 源表;
- create table 新表名 select * from 源表;
- 删除表
- drop table 表名;
- 修改表
- 添加列:ALTER TABLE 表名 ADD 列名 数据类型和长度 列属性
- ALTER TABLE Emp ADD Tele VARCHAR(50) NULL
- 修改列
- ALTER TABLE 表名 MODIFY 列名 新数据类型和长度 新列属性
- ALTER TABLE Emp MODIFY Tele CHAR(50) NULL------修改数据类型
- ALTER TABLE Emp CHANGE Tele TTT CHAR(50) NULL--修改列名称
- 删除列
- ALTER TABLE 表名 DROP COLUMN 列名
- ALTER TABLE Emp DROP COLUMN Tele
- 添加约束
- ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 (字段名)
- 主键约束:ALTER TABLE EMP ADD CONSTRAINT mypk1 PRIMARY KEY(empno)
- 外键约束:ALTER TABLE EMP ADD CONSTRAINT myfk1 FOREIGN KEY(deptno) REFERENCES DEPT(DEPTNO)
- 唯一约束:ALTER TABLE EMP ADD CONSTRAINT myunk1 UNIQUE(ename)
- 删除主键约束
- ALTER TABLE 表名 DROP PRIMARY KEY
- 删除外键约束
- ALTER TABLE 表名 DROP FOREIGN KEY 约束名
- 删除唯一性约束,只需删除该字段的唯一性索引即可
- ALTER TABLE 表名 DROP INDEX 索引名
- 修改表的存储引擎
- ALTER TABLE 表名 ENGINE=新的存储引擎类型
- ALTER TABLE EMP ENGINE=MyISAM;
- 修改表的字符集
- ALTER TABLE 表名 DEFAULT CHARSET=新的字符集
- ALTER TABLE EMP DEFAULT CHARSET=gb2312;
- 修改表名
- RENAME TABLE 旧表名 TO 新表名
- ALTER TABLE 旧表名 RENAME 新表名
- 添加列:ALTER TABLE 表名 ADD 列名 数据类型和长度 列属性
- 创建数据库
create table dep(
dep_id int primary key,
dep_name varchar(255) unique,
dep_director varchar(255) not null,
dep_campus enum('南湖校区','湖南校区')
);
create table class(
class_id int primary key,
class_name varchar(255) unique,
class_dep int,
constraint fk_class_dep foreign key (class_dep) references dep(dep_id)
);
create table student(
stu_id char(10) primary key,
stu_name varchar(20) not null,
stu_sex char(2) check (stu_sex='男' or stu_sex='女'),
stu_birthday date,
stu_class int,
-- constraint fk_sex check (stu_sex='男' or stu_sex='女'),
constraint fk_stu_class foreign key (stu_class) references class(class_id)
);