Mysql
Mysql
免安装版的Mysql
MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的
标准化语言,其特点为体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,在 Web
应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据
库管理系统)应用软件之一。
在本博文里,我主要以Mysql免安装版为例,帮助大家解决安装与配置mysql的步骤。
首先:要先进入mysql官网里(Mysql的官网–>https://www.mysql.com/),下面是详细步骤:↓
(为了方便大家的操作,我的网盘里有安装包:
链接:https://pan.baidu.com/s/1hq0rrtdXm2g7FqwaBKxgWg
提取码:wsh6
)
一、下载安装包:
①进入官网后,点击”Dowload”,然后页面往下拉
②接下来看到的页面是这样的,红色框框的链接就是mysql社区版,是免费的mysql版本,然后我们点击这个框框的链接:↓
③接下来跳转到这个页面,在这里,我们只要下载社区版的Server就可以了:↓
④下载免安装版(windows以外的其他系统除外)
这样,安装包就下载好了!
注意,安装的目录应当放在指定位置,,其次,绝对路径中避免出现中文,推荐首选英文为命名条件!!!!(我的为参考)
二、Mysql的配置
*以管理员身份打开命令行(如下图所示),一定要是管理员身份,否则由于后续部分命令需要权限,出现错误!
①下转到mysql的bin目录下:
②安装mysql的服务:mysqld –install
③初始化mysql,在这里,初始化会产生一个随机密码,如下图框框所示,记住这个密码,后面会用到(mysqld –initialize –console)
net
④开启mysql的服务(net start mysql)
⑤登录验证,mysql是否安装成功!(要注意上面产生的随机密码,不包括前面符号前面的空格,否则会登陆失败),如果和下图所示一样,则说明你的mysql已经安装成功!注意,,一定要先开启服务,不然会登陆失败,出现拒绝访问的提示符!!!
修改密码:
由于初始化产生的随机密码太复杂,,不便于我们登录mysql,因此,我们应当修改一个自己能记住的密码!!
再次登录验证新密码:
设置系统的全局变量:
为了方便登录操作mysql,在这里我们设置一个全局变量:↓
①点击”我的电脑”–>”属性”–>’’高级系统设置’’–>’’环境变量’’,接下来如下图所操作
②把新建的mysql变量添加到Path路径变量中,点击确定,即完成:
配置完成之后,每当我们想要用命令行使用mysql时,只需要win+R,–>输入”cmd”打开命令行,之后输入登录sql语句即可。
③在mysql目录下创建一个ini或cnf配置文件,在这里我创建的是ini配置文件,里面写的代码是mysql的一些基本配置
1 | [mysqld] |
就这样,一个免安装版的Mysql就安装并配置完成了
2.1可能会出现的问题
1、ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: NO/YES)
2、”由于找不到MSVCR120.dll,无法继续执行代码。重新安装程序可能会解决此问题” 或者 “由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题”
3、”net start Mysql”启动服务时 ,显示”Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误”
解决办法: 转移至我另外两篇博客
1、ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: NO/YES)
2、解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码.重新安装程序可能会解决此问题。
3、待续,正在撰写相关博客,如遇到此问题,可评论,博主回复解决
2.2命令参考:
①安装服务:mysqld –install
②初始化: mysqld –initialize –console
③开启服务:net start mysql
④关闭服务:net stop mysql
⑤登录mysql:mysql -u root -p
Enter PassWord:(密码)
⑥修改密码:alter user ‘root‘@’localhost’ identified by ‘root’;(by 接着的是密码)
⑦标记删除mysql服务:sc delete mysql
- 服务器操作
开启服务器(必须保证mysql为windows服务):net start mysql–>查看进程中是否有mysqld.exe存在
关闭服务器(必须保证mysql为windows服务):net stop mysql–>查看进程mysqld.exe是否不存在
注意:若系统服务中不存在mysql的服务,可在cmd中切换到mysqld.exe对应的目录下,通过mysqld.exe -install将mysql添加到系统服务中
删除系统服务:sc delete 服务名
开启服务器的命令最好以管理员运行
- 客户端操作
- 进入cmd登录服务器:mysql-u账户 -p密码 -hIP
- -u:后面为用户名
- -p:后面为用户密码
- -h:后面为IP地址
- 退出服务器:exit或quit+回车
- 查看密码
- mysql -uroot -p
- select host,user,password from mysql.user;
- Sql语句分类
DDL(Data Definotion Language):数据定义语言,用来定义数据库对象:库,表,列等;
> 创建,删除,修改,库,表结构!!!
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
>增,删,改,查记录;
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别(创建用户,及授权)
DQL(Data Query Language):数据查询语言,用来查询记录(数据);
- DDL
数据库
- 查看所有数据库:show databases;
- 切换(选择要操作的数据库):use 数据库名;
- 创建数据库:create database [if not exists] 数据库名 [charset=utf8];
- 删除数据库:drop database [if exists] 数据库名;
- 修改数据库编码:alter database 数据库名 character set utf8;
数据类型
int–> 整型
double–> 浮点型,例如double(5,2)表示最多包含5位,其中小数点后有两位,即最大值为999.99;
decimal–> 浮点型,在表单钱方面使用该类,不会出现精度缺失问题;
char–> 固定长度字符串类型:char(255),最大到255;
varchar–> 可变长度字符串:varchar(65535);
text(clob):字符串类型;
>很小,小,中,大
blob:字节类型;
>很小,小,中,大
date:日期类型,格式:yyyy-MM-dd;
time:时间类型,格式:hh:mm:ss
timestamp:时间戳类型
表
创建表:
create table [if not exists] 表名(
列名,列类型,
列名,列类型,
);
查看当前数据库中的所有表名称:show tables;
查看指定表的创建语句:show create tables 表名(了解);
查看表结构:desc 表名;
删除表:drop table 表名;
修改表:前缀,Alter table 表名
>修改之添加列:Alter table 表名 add(列名 列类型,列名 列类型);
>修改列类型(若修改的列已经存在数据,那么新的类型可能会影响到已经存在的数据):Alter table 表名 modify 列名 列类型;
>修改之删除列:Alter table 表名 drop 列名;
>修改表名称:Alter table 原表名 rename to 新表名;
- DML
表记录(数据操作)
插如表数据:
>insert into 表名(列名1,列名2,…)values(‘列值1’,’列值2’,…)
>insert into 表名 values(‘值1’,‘值2’)(默认插入一整列,值顺序和列顺序一一对应)
修改表数据:
>update 表名 set 列名=列值 where +条件语句
删除数据:
>delete from 表名(where 条件)
>truncate table 表名:truncate是DDL语句,它是先删除drop该表,再create该表,而且无法回滚!!!
- DCL
- 一个项目创建一个用户!一个项目对应的数据库只有一个!
- 用户只能对指定的数据库有权限,对其他数据库操作不了!
创建用户
create user 用户名@IP地址 identified by ‘密码’;
>用户只能在指定的IP上登录
create user 用户名@‘%’ identified by ‘密码’;
>用户可以在任意IP地址上登录
修改用户密码
>set password for ‘用户名‘@’主机名’ = password(‘新密码’);
给用户授权
grant 权限1,_,权限n on 数据库.* to 用户名@IP地址;
>权限,用户,数据库
>给用户分派在指定的数据库上的指定权限
>例如:grant create ,alter,drop,insert,update,delete,select on 数据库名.* to user1@localhost;
- 给user1用户分派在数据库名上的create,alter,drop,insert,update,delete,select权限
>grant all on 数据库.* to 用户名@IP地址;
- 给用户分派指定数据库的所有权限
撤销授权
revoke 权限1,—,权限n on 数据库. *from 用户名@IP地址;
>撤销指定用户在指定数据库上的指定权限
>例如:remove creare,alter,drop,on mydb1. * from 用户名@IP地址;
- 撤销用户在mydb1数据库上的create,alter,drop权限
查看权限
show grant for 用户名@IP地址
>查看指定用户权限
删除用户
- drop user 用户名@IP地址
- mysql中忘记了root用户密码?
- cmd–>net stop mysql停止mysql服务
- 使用无验证方式启动mysql服务:mysqld –skip -grant -tables
- 打开新的cmd窗口,直接输入mysql,敲回车,就可以登录成功
- use mysql
- update user set password=password(‘新密码’) where user=’root’
- 关闭两个窗口
- 打开任务管理器,手动结束mysqld.exe的进程
- 启动mysql服务
- 使用新密码登录
- DQL
查询操作:
查询所有列:select [distinct] * from 表名+(where 条件) distinct消除查询到的重复列
查询指定列:select [distinct] 列名1,列名2 from 表名+(where 条件)
列运算:
> 数量类型(加减乘除):select 列名+2 from 表名+(where 条件)
>字符串连接运算:select concat (‘$’,sal) from 表名
>转换Null值:select ifnull(列名,替换值) from 表名
给列起别名:select 列名 as 别名 from 表名
条件控制:
条件查询:
- select * from 表 where 条件 and 条件
- select * from 表 where 列名 between 条件 and 条件
- select * from 表 where 列名 in (条件);
模糊查询:
select * from 表 where 列名 like %张% 自动匹配含有张的数据
select * from 表 where 列名 like ‘___’/匹配3个字组成的/
排序:
select * from 表 where 列名 order by 列名2 ASC;按照列名2排序升序
select * from 表 where 列名 order by 列名2 DESC;按照列名2排序,降序;
>select * from 表 where 列名 ASC,列名1 DESC;使用多列作为排序条件,使用列名升序排,列名1降序排
聚合函数:
- count–>查询表中的有效行数
- max–>查询表中的最大值
- min–>查询最小值
- sum–>查询一列和
- avg–>查询平均值
分组查询:select * from 表 group by 列名;
limit 子句(分页查询):select * from 表 limit 4,3–>表示从第5行开始查询,共查3行;
- 数据库备份
导出数据库:mysqldump -u账户名 -p密码 数据库>脚本文件路径 ,例如 mysqldump -uroot -p123 date>C:\Users\91870\Desktop\a.sql
恢复数据库:mysql -uroot -p123 date<C:\Users\91870\Desktop\a.sql
注意:备份的仅是Sql语句,需要手动创建空数据库后可成功恢复数据库
- 分页查询
- select * from student limit 0,3 —第1页,显示3条信息
- select * from student limit 3,3 —第2页,显示3条信息
公式:开始的索引=(当前的页码-1)*每页显示的条数
- 表的约束
* 概念:对表中数据进行限定,保证数据的正确性,有效性和完整性
* 分类:
- 主键约束:primary key
- 非空约束:not null
- 唯一约束:unique
- 外键约束:foreign key
- foreign key
在创建表时添加外键约束:constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称)
删除外键:alter table employlee drop foreign key emp_dept fk ;
创建表之后添加:alter table add constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称)
- 级联操作
on update cascade:级联更新
on delete cascade:级联删除
- 在创建表时添加外键约束:constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称) on update cascade;
- 创建表之后添加:alter table add constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称) on update cascade on delete cascade ;
- 数据库设计
多表之间的关系
* 分类:
- 一对一:如人和身份证
- 一对多:如部门和员工
- 多对多:如学生和课程
* 实现关系:
- 一对多:如部门和员工 实现:在多的一方建立外键,指向一的一方的主键(两张表之间完成)
- 多对多:如学生和课程 实现:多对多的关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
- 一对一:人和身份证 实现:可以在任意一方添加唯一外键指向另一方的主键
数据库设计的范式
* 概念:设计数据库时,需要遵循的一些规范
* 要求:设计数据库时,遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗杂越小。
* 目前的六种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式。和第五范式(5NF)
* 几个概念:
- 第一范式(1NF):每一列都是不可分割的原子数据项
- 第二范式(2NF):在一范式的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对对主码的部分函数依赖)
- 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
- 如:学号–>名称 ,(学号,课程名称)–>分数
- 完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
- 如:(学号,课程名称)–>分数
- 部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可
- 如:(学号,课程名称)–>姓名
- 传递函数依赖:A–>B,B–C,如果通过A属性(属性组)的值,可以确定B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A
- 如:学号–>系名,系名–>系主任
- 码:如果在一张表中,一个属性或属性组,被其他所有属性完全依赖,则称这个属性(属性值)为该表的码
- 如:该表中的码为:(学号,课程名称)
- 主属性:码属性组中的所有属性
- 非主属性:除过码属性组的属性
- 如:该表中的码为:(学号,课程名称)
- 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
- 第三范式:在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)
- 数据库的备份与还原
- 命令行:
- 备份语法:mysqldump -u用户名 -p密码 要备份的数据库名称 >保存的路径
- 还原语法:
- 登陆数据库
- 创建数据库
- 使用数据库
- 执行文件:source 文件路径
- 事务
* 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
* 操作:
- 在sql语句执行前开启事务:start transaction;
- 在没有出错的地方提交事务:commit
- 执行出错,回滚事务:roolback
*注意:
- 事务提交方式有两种:
- 自动提交
- mysql就是自动提交的,执行一条DML(增删改)语句会自动提交一次事务
- 手动提交
- 需要先开启事务,再提交
- 自动提交
- 修改事务的默认提交方式:
- 查看事务的默认提交方式:select @@autocommit;—1代表自动提交,0代表手动提交
- 修改默认提交方式:set @@autocommit=0
* 事务的四大特征:
- 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
- 持久性:当事务提交或回滚后,数据库会持久化保存数据
- 隔离性:多个事务之间,相互独立,
- 一致性:实务操作前后,数据总量不变
* 事务的隔离级别(了解)
- 概念:
- 多个事物之间隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
- 存在问题:
- 脏读:一个事务,读取到另一个事务中没有提交的数据
- 不可重复读(虚读):在同一事务中,两次读取到的数据不一样
- 幻读:一个事务操作(DML)数据表中的所有记录,另一条事务添加了一条数据,则第一个事务查询不到自己的修改
- 隔离级别:
- read uncommitted:读取未提交
- 产生的问题:脏读,幻读,不可重复读
- read committed:读已提交
- 产生的问题:不可重复读,幻读
- repeatable read:可重复读
- 产生问题:幻读
- serializable:串行化
- 可以解决所有问题
- read uncommitted:读取未提交
- 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
- 数据库设置隔离级别:
- 查询隔离级别:select @@isolation;
- 设置隔离级别:set global transaction isolation leval 级别字符;
- DCL管理用户
* SQL分类:
- DDL:操作数据库和表
- DML:增删改表中的数据
- DQL:查询表中的数据
- DCL:管理用户授权
* DBA:数据库管理员
管理用户
添加用户
删除用户
修改用户密码
查询用户:
授权