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”,然后页面往下拉

  img

  ②接下来看到的页面是这样的,红色框框的链接就是mysql社区版,是免费的mysql版本,然后我们点击这个框框的链接:↓

  img

    ③接下来跳转到这个页面,在这里,我们只要下载社区版的Server就可以了:↓

img

  ④下载免安装版(windows以外的其他系统除外)

img

   这样,安装包就下载好了!

  注意,安装的目录应当放在指定位置,,其次,绝对路径中避免出现中文,推荐首选英文为命名条件!!!!(我的为参考)

  img

二、Mysql的配置

  *以管理员身份打开命令行(如下图所示),一定要是管理员身份,否则由于后续部分命令需要权限,出现错误!

  img

  

  ①下转到mysql的bin目录下:

  img

  ②安装mysql的服务:mysqld –install

  img

  ③初始化mysql,在这里,初始化会产生一个随机密码,如下图框框所示,记住这个密码,后面会用到(mysqld –initialize –console)

  netimg

  ④开启mysql的服务(net start mysql)

  img

  ⑤登录验证,mysql是否安装成功!(要注意上面产生的随机密码,不包括前面符号前面的空格,否则会登陆失败),如果和下图所示一样,则说明你的mysql已经安装成功!注意,,一定要先开启服务,不然会登陆失败,出现拒绝访问的提示符!!!

  img

  修改密码:

    由于初始化产生的随机密码太复杂,,不便于我们登录mysql,因此,我们应当修改一个自己能记住的密码!!

  img

  再次登录验证新密码:

  img

  设置系统的全局变量:

    为了方便登录操作mysql,在这里我们设置一个全局变量:↓

    ①点击”我的电脑”–>”属性”–>’’高级系统设置’’–>’’环境变量’’,接下来如下图所操作

    img

    ②把新建的mysql变量添加到Path路径变量中,点击确定,即完成:

    img

    配置完成之后,每当我们想要用命令行使用mysql时,只需要win+R,–>输入”cmd”打开命令行,之后输入登录sql语句即可。

    ③在mysql目录下创建一个ini或cnf配置文件,在这里我创建的是ini配置文件,里面写的代码是mysql的一些基本配置

    img

复制代码

1
2
3
4
5
6
7
8
9
[mysqld]
character-set-server=utf8mb4
bind-address=0.0.0.0
port=3306
default-storage-engine=INNODB
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4

复制代码

  就这样,一个免安装版的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


- 服务器操作

  1. 开启服务器(必须保证mysql为windows服务):net start mysql–>查看进程中是否有mysqld.exe存在

  2. 关闭服务器(必须保证mysql为windows服务):net stop mysql–>查看进程mysqld.exe是否不存在

    注意:若系统服务中不存在mysql的服务,可在cmd中切换到mysqld.exe对应的目录下,通过mysqld.exe -install将mysql添加到系统服务中

    ​ 删除系统服务:sc delete 服务名

    ​ 开启服务器的命令最好以管理员运行

- 客户端操作

  1. 进入cmd登录服务器:mysql-u账户 -p密码 -hIP
    • -u:后面为用户名
    • -p:后面为用户密码
    • -h:后面为IP地址
  2. 退出服务器:exit或quit+回车
  3. 查看密码
    • mysql -uroot -p
    • select host,user,password from mysql.user;

- Sql语句分类

  1. DDL(Data Definotion Language):数据定义语言,用来定义数据库对象:库,表,列等;

    > 创建,删除,修改,库,表结构!!!

  2. DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

    >增,删,改,查记录;

  3. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别(创建用户,及授权)

  4. DQL(Data Query Language):数据查询语言,用来查询记录(数据);

- DDL

  1. 数据库

    • 查看所有数据库:show databases;
    • 切换(选择要操作的数据库):use 数据库名;
    • 创建数据库:create database [if not exists] 数据库名 [charset=utf8];
    • 删除数据库:drop database [if exists] 数据库名;
    • 修改数据库编码:alter database 数据库名 character set utf8;
  2. 数据类型

    • 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

  1. 表记录(数据操作)

    • 插如表数据:

      >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

  • 一个项目创建一个用户!一个项目对应的数据库只有一个!
  • 用户只能对指定的数据库有权限,对其他数据库操作不了!
  1. 创建用户

    • create user 用户名@IP地址 identified by ‘密码’;

      >用户只能在指定的IP上登录

    • create user 用户名@‘%’ identified by ‘密码’;

      >用户可以在任意IP地址上登录

    • 修改用户密码

      >set password for ‘用户名‘@’主机名’ = password(‘新密码’);

  2. 给用户授权

    • 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地址;

      • 给用户分派指定数据库的所有权限
  3. 撤销授权

    • revoke 权限1,—,权限n on 数据库. *from 用户名@IP地址;

      >撤销指定用户在指定数据库上的指定权限

      >例如:remove creare,alter,drop,on mydb1. * from 用户名@IP地址;

      • 撤销用户在mydb1数据库上的create,alter,drop权限
  4. 查看权限

    • show grant for 用户名@IP地址

      >查看指定用户权限

  5. 删除用户

    • drop user 用户名@IP地址
  • mysql中忘记了root用户密码?
    1. cmd–>net stop mysql停止mysql服务
    2. 使用无验证方式启动mysql服务:mysqld –skip -grant -tables
    3. 打开新的cmd窗口,直接输入mysql,敲回车,就可以登录成功
    4. use mysql
    5. update user set password=password(‘新密码’) where user=’root’
    6. 关闭两个窗口
    7. 打开任务管理器,手动结束mysqld.exe的进程
    8. 启动mysql服务
    9. 使用新密码登录

- DQL

  1. 查询操作:

    • 查询所有列: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 表名

  2. 条件控制:

    • 条件查询:

      • 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降序排

  3. 聚合函数:

    • count–>查询表中的有效行数
    • max–>查询表中的最大值
    • min–>查询最小值
    • sum–>查询一列和
    • avg–>查询平均值
  4. 分组查询:select * from 表 group by 列名;

  5. 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)*每页显示的条数

- 表的约束

* 概念:对表中数据进行限定,保证数据的正确性,有效性和完整性

* 分类:

  1. 主键约束:primary key
  2. 非空约束:not null
  3. 唯一约束:unique
  4. 外键约束:foreign key

- foreign key

  1. 在创建表时添加外键约束:constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称)

  2. 删除外键:alter table employlee drop foreign key emp_dept fk ;

  3. 创建表之后添加:alter table add constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称)

- 级联操作

  • on update cascade:级联更新

  • on delete cascade:级联删除

    1. 在创建表时添加外键约束:constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称) on update cascade;
    2. 创建表之后添加:alter table add constraint 外键名称 foreign key(外键列名称) reference 主键名称(主表列名称) on update cascade on delete cascade ;

- 数据库设计

  1. 多表之间的关系

    * 分类:

    • 一对一:如人和身份证
    • 一对多:如部门和员工
    • 多对多:如学生和课程

    * 实现关系:

    • 一对多:如部门和员工 实现:在多的一方建立外键,指向一的一方的主键(两张表之间完成)
    • 多对多:如学生和课程 实现:多对多的关系实现需要借助第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
    • 一对一:人和身份证 实现:可以在任意一方添加唯一外键指向另一方的主键
  2. 数据库设计的范式

    * 概念:设计数据库时,需要遵循的一些规范

    * 要求:设计数据库时,遵循不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗杂越小。

    * 目前的六种范式:第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式。和第五范式(5NF)

    * 几个概念:

    1. 第一范式(1NF):每一列都是不可分割的原子数据项
    2. 第二范式(2NF):在一范式的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对对主码的部分函数依赖)
      1. 函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
        • 如:学号–>名称 ,(学号,课程名称)–>分数
      2. 完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值
        • 如:(学号,课程名称)–>分数
      3. 部分函数依赖:A–>B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可
        • 如:(学号,课程名称)–>姓名
      4. 传递函数依赖:A–>B,B–C,如果通过A属性(属性组)的值,可以确定B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称C传递函数依赖于A
        • 如:学号–>系名,系名–>系主任
      5. 码:如果在一张表中,一个属性或属性组,被其他所有属性完全依赖,则称这个属性(属性值)为该表的码
        • 如:该表中的码为:(学号,课程名称)
          • 主属性:码属性组中的所有属性
          • 非主属性:除过码属性组的属性
    3. 第三范式:在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)

- 数据库的备份与还原

  1. 命令行:
    • 备份语法:mysqldump -u用户名 -p密码 要备份的数据库名称 >保存的路径
    • 还原语法:
      1. 登陆数据库
      2. 创建数据库
      3. 使用数据库
      4. 执行文件:source 文件路径

- 事务

* 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。

* 操作:

  1. 在sql语句执行前开启事务:start transaction;
  2. 在没有出错的地方提交事务:commit
  3. 执行出错,回滚事务:roolback

*注意:

  • 事务提交方式有两种:
    • 自动提交
      • mysql就是自动提交的,执行一条DML(增删改)语句会自动提交一次事务
    • 手动提交
      • 需要先开启事务,再提交
  • 修改事务的默认提交方式:
    • 查看事务的默认提交方式:select @@autocommit;—1代表自动提交,0代表手动提交
    • 修改默认提交方式:set @@autocommit=0

* 事务的四大特征:

  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
  2. 持久性:当事务提交或回滚后,数据库会持久化保存数据
  3. 隔离性:多个事务之间,相互独立,
  4. 一致性:实务操作前后,数据总量不变

* 事务的隔离级别(了解)

  • 概念:
    • 多个事物之间隔离的,相互独立的,但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
  • 存在问题:
    1. 脏读:一个事务,读取到另一个事务中没有提交的数据
    2. 不可重复读(虚读):在同一事务中,两次读取到的数据不一样
    3. 幻读:一个事务操作(DML)数据表中的所有记录,另一条事务添加了一条数据,则第一个事务查询不到自己的修改
  • 隔离级别:
    1. read uncommitted:读取未提交
      • 产生的问题:脏读,幻读,不可重复读
    2. read committed:读已提交
      • 产生的问题:不可重复读,幻读
    3. repeatable read:可重复读
      • 产生问题:幻读
    4. serializable:串行化
      • 可以解决所有问题
  • 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
  • 数据库设置隔离级别:
    • 查询隔离级别:select @@isolation;
    • 设置隔离级别:set global transaction isolation leval 级别字符;

- DCL管理用户

* SQL分类:

  1. DDL:操作数据库和表
  2. DML:增删改表中的数据
  3. DQL:查询表中的数据
  4. DCL:管理用户授权

* DBA:数据库管理员

  1. 管理用户

    1. 添加用户

    2. 删除用户

    3. 修改用户密码

    4. 查询用户:

  2. 授权