1. 概念
概念: mysql是一个关系型数据库管理系统,由瑞典mysql-ab公司开发,目前属于oracle旗下产品,在web应用方面是最好的RDBMS应用软件之一。
- 关系型数据库:关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据结构,一个关系型数据库由一个或多个表格组成,增加了速度并提高了灵活性。
- 易于维护:都是使用表结构,格式一致。
- 使用方便:SQL语言通用,可用于复杂查询,即在一个表以及多个表之间非常复杂的查询。
- 读写性能比较差,尤其是海量数据的高效率读写。
- 固定的表结构,灵活度稍欠。
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
- 非关系型数据库:非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
- 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
- 成本低:nosql数据库部署简单,基本都是开源软件。
- 不提供sql支持,学习和使用成本较高。
- 无事务处理。
- 数据结构相对复杂,复杂查询方面稍欠。
1.1 优势特点
概念:
- mysql软件采用了双授权政策,它分为社区版和商业版,体积小、速度快、成本低。
- mysql是免费开源的,可以自定义mysql系统。
- mysql支持大型的数据库,是一个支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
- mysql使用标准的SQL数据语言形式。
- mysql可以用于多个系统上,并且支持多种语言,比如C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
1.2 RDBMS术语
概念: RDBMS,Relational Database Management System,关系数据库管理系统:
- 数据库(database):数据库是一些关联表的集合,关系型数据库的数据都是存放在表中的。
- 数据表(table):表是数据的矩阵,在一个数据库中的表看起来像一个简单的电子表格。
- 列(column):列包含了相同类型的数据,如姓名列,年龄列,性别列等。
- 行(row):行,也叫元组或记录,是一组相关的数据,如一条用户信息,一条文章数据等。
- 冗余:存储两倍数据,冗余可以使系统速度更快。
- 主键(primary key):主键是唯一的,一个数据表中只能包含一个主键,一般用于查询数据。
- 外键(foreign key):一个表的外键用于关联另一个表的主键。
- 复合键:复合键,也叫组合键,将多个列作为一个索引键,一般用于复合索引。
- 索引(index):使用索引可快速访问数据库表中的特定信息,索引是对数据库表中一列或多列的值进行排序的一种结构,类似于书籍的目录。
1.3 存储引擎
概念: mysql存储引擎在不同的版本下,使用的也不同:
MyISAM是mysql5.0之前的默认数据库引擎,最为常用,拥有较高的插入,查询速度,但不支持事务。InnoDB是mysql5.0之后的优选数据库引擎,是mysql5.5之后的默认数据库引擎,是事务型数据库的首选引擎,支持ACID事务,支持行级锁定。
1.4 SQL语言
概念: SQL,Structured Query Language,结构化查询语言,是在关系型数据库上执行数据操作,数据检索以及数据维护的标准语言,目前数据库厂商实现的都是SQL92标准,但是不是说所有的数据库的SQL都一样,就比如少数民族也得遵循中国的高考标准,但是加分。
2. 卸载
安装mysql之前,要保证当前系统环境没有安装过mysql或者已完全卸载干净之前的mysql。
流程:
- 控制面板 - 程序和功能 - 右键卸载mysql所有相关程序。
- 删除
Program Files,Program Files(x86)和Program Data目录中所有与mysql相关的文件夹。 win + r运行regedit命令打开注册表:- 删
HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Eventlog\Application中所有mysql相关文件夹。 - 删
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application中所有mysql相关文件夹。
- 删
- 重启电脑,卸载完成。
3. 安装
流程:
- 双击进入安装界面,接受协议,点击
Next,进入Choosing a Setup Type界面。 - 勾选
Server only,点击Next,进入Installation界面。- 如果选择
Full,表示安装全部,包括数据库和workbench客户端等。
- 如果选择
- 点击
Execute执行安装,等待进度条结束,点击Next,进入Product Configuration界面。 - 点击
Next,进入Group Replication界面。 - 点击
Next,进入Type and Networking界面。- 确认端口号为3306。
- 点击
Next,进入Accounts and Roles界面。 - 填写两遍登录密码,建议使用
root,点击Next,进入Windows Service界面。- 如果需要额外指定用户,在下方进行添加。
- 确认服务名为
MySQL57,点击Next,进入Plugins and Extensions界面。 - 点击
Next,进入Apply Configuration界面。 - 点击
Execute,开始安装,等待进度条结束,点击Finish,回到Product Configuration界面。 - 点击
Next,进入Installation Complete界面。 - 点击
Finsh,完成安装。 - 右键计算机 - 属性 - 高级系统设置 - 环境变量 - 配置mysql的环境变量:
- 新建MYSQL_HOME:
C:\Program Files\MySQL\MySQL Server 5.7 - 修改path:
%MYSQL_HOME%\bin
- 新建MYSQL_HOME:
- 启动cmd,键入
mysqladmin --version命令查看mysql版本。 - 自启动管理:右键计算机 - 管理 - 服务 - 找到mysql57服务 - 右键更改为手动。
如果安装时提示系统缺少NetFramework4.0,可安装对应插件:z-res/.NetFramework4.5.exe
如果安装提示2502和2503错误,找到C:\Windows\Temp文件,右键属性- 安全 - 添加权限,添加个everyone权限(完全控制),就可以安装了。
4. CMD操作
概念: 除了在计算机服务中启动mysql服务外,还可以在CMD命令行中来操作:
- 启动:
net start mysql57,忽略大小写。 - 停止:
net stop mysql57,忽略大小写。 - 卸载:
sc delete mysql57,忽略大小写。 - 登录:
mysql [-hIP地址] -u帐号 -p: --h: 该命令用于指定客户端所要登录的mysql主机名,默认127.0.0.1。 --u: 所要登录的帐号。 --p: 登录密码,如果为空,可以忽略此选项,不为空不建议在当前行填写,以保持隐私。 - 登出:
exit或quit可以退出登录。 - 创建数据库:
create database dbjoe character set utf8mb4:character set utf8mb4可以省略,省略后数据库编码会和连接编码保持一致,默认utf-8。
- 查看数据库:
show databases - 删除数据库:
drop database dbjoeinformation_schema,sys,mysql和perfomance_schema是不能删除的。
- 使用数据库:
use dbjoe- 也可以在登录数据库时使用
-D指定使用哪个数据库:mysql -Ddbjoe -uroot -p
- 也可以在登录数据库时使用
- 查看元数据:和表中的记录无关的数据都可以称之为元数据,如查询,修改或删除语句所影响的记录数,数据库信息,数据表的信息,mysql的当前状态,版本号等。
select version():查看数据库版本信息。select database():查看当前数据库名,或者返回空。select user():查看用户名。show status:展示当前数据库状态。show variables:展示当前数据库的一些配置变量信息。show tables:查看数据表,无法看到临时表。
mysql语句末尾尽量以分号
;作为语句的结束。
5. 可视化工具
概念: mysql的可视化工具比较主流的有Navicat,workbench,SqlYog等,这里使用IDEA自带的可视化工具。
流程:
- 点击IDEA右上角的
Database选项卡。 - 点击
+-Data Source-MySQL。 - 填写Name,这个是数据库的连接名。
- 填写Comment,这是连接的注释,可选。
- 填写Host,数据库所在服务器的IP地址。
- 填写Port,数据库端口号。
- 填写User,数据库登录账号。
- 填写Password,数据库登录密码。
- 填写Database,填写数据库名,可选。
- 填写URL,连接串,格式固定:
jdbc:mysql://localhost:3306- 如果使用高版本驱动,需要手动添加时区
?serverTimezone=UTC
- 如果使用高版本驱动,需要手动添加时区
- 点击
Driver:MySQL-Go to Driver: - 点击
+-Custom Jars- 找到本地驱动 - 点OK完成。- 低版本驱动:
mysql-connector-java-5.1.38.jar - 高版本驱动:
mysql-connector-java-8.0.15.jar
- 低版本驱动:
- 点击
Test Connection进行测试。
IDEA中添加mysql的方言:File - Settings - Languages & Frameworks - SQL Dialects,将Global SQL Dialect 和 Project SQL Dialect 都选择为 MySQL。
引入练习表
源码: emp.sql
/*
Navicat MySQL Data Transfer
Source Server : conn_root
Source Server Version : 50537
Source Host : 127.0.0.1:3306
Source Database : study
Target Server Type : MYSQL
Target Server Version : 50537
File Encoding : 65001
Date: 2019-01-10 15:47:21
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`EMPNO` int(4) NOT NULL,
`ENAME` varchar(10) DEFAULT NULL,
`JOB` varchar(9) DEFAULT NULL,
`MGR` int(4) DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` int(7) DEFAULT NULL,
`COMM` int(7) DEFAULT NULL,
`DEPTNO` int(2) DEFAULT NULL,
PRIMARY KEY (`EMPNO`),
KEY `FK_DEPTNO` (`DEPTNO`),
CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`DEPTNO`) REFERENCES `dept` (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800', null, '20');
INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600', '300', '30');
INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250', '500', '30');
INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-04-02', '2975', null, '20');
INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250', '1400', '30');
INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-05-01', '2850', null, '30');
INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-06-09', '2450', null, '10');
INSERT INTO `emp` VALUES ('7788', 'SCOTT', 'ANALYST', '7566', '1987-04-19', '3000', null, '20');
INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000', null, '10');
INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500', '0', '30');
INSERT INTO `emp` VALUES ('7876', 'ADAMS', 'CLERK', '7788', '1987-05-23', '1100', null, '20');
INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950', null, '30');
INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000', null, '20');
INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300', null, '10');
源码: dept.sql
/*
Navicat MySQL Data Transfer
Source Server : conn_root
Source Server Version : 50537
Source Host : 127.0.0.1:3306
Source Database : study
Target Server Type : MYSQL
Target Server Version : 50537
File Encoding : 65001
Date: 2019-01-10 15:47:16
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`DEPTNO` int(2) NOT NULL,
`DNAME` varchar(14) DEFAULT NULL,
`LOC` varchar(13) DEFAULT NULL,
PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');
INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');
INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');
INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');