专栏首页datartisan7天快速掌握MySQL-DAY1刷新

7天快速掌握MySQL-DAY1刷新

一周内快速了解并掌握MySQL的使用方法。

1. MySQL数据库安装

1.1 MySQL官网下载(zip版本安装)

  • Mysql官网下载最新的安装包:https://dev.mysql.com/downloads/mysql/
  • 点击 download
  • 选择No thanks, just start my download.

选择这个就好,32位和64位系统都是。

下载后解压至安装目录。

1.2 配置环境变量

配置路径:计算机—属性—高级系统设置—环境变量—系统变量—path—编辑—新建—粘贴mysql的bin目录

举例:D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64

1.3 配置my.ini

打开刚刚解压的文件夹 D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64 ,创建一个配置文件为 my.ini,编辑 my.ini 配置以下基本信息:

[mysql]
default-character-set=utf8

[mysqld]
port = 3306
basedir=D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64
datadir=D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64\data
character-set-server=utf8
default-storage-engine=INNODB

1.4 初始化并启动mysql

切换到mysql安装目录bin下

C:\Users\Administrator>d:
D:\>cd D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64\bin

初始化数据库,D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64\bin>输入以下命令

mysqld --initialize-insecure --user=mysql

执行后发现bin目录下多了data文件夹,D:\mysql-8.0.15-winx64\mysql-8.0.15-winx64\bin>输入以下命令

net start mysql

看到提示请求的服务成功启动证明连接成功。

1.4 修改密码

//bin目录输入命令
mysql -u root -p
//初始化过程中如果提示过设置了临时密码,请输入临时密码,否则直接回车
//查询用户密码 
mysql> select host,user,authentication_string from mysql.user;

host: 允许用户登录的ip;

user:当前数据库的用户名;

authentication_string: 用户密码;

如果没密码, root 这一行应该是空的。

  • 修改root密码的步骤为:
  1. 步骤1:如果当前root用户authentication_string字段下有内容,先将其设置为空,没有就跳到步骤 2。
use mysql;  
update user set authentication_string=''  where user='root'
  1. 步骤2:使用ALTER修改root用户密码方法为:
use mysql;
ALTER user 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

设置新密码后重新连接数据库

至此,本地MySQL数据创建完毕。尽情玩耍吧。

2. 数据库基础知识

2.1 数据库定义

个人理解就是存储及查询数据的一种工具。

2.2 关系型数据库

大部分数据库都是关系型数据,存储的是结构化数据,以关系模型来组织数据。

数据库事务必须具备ACID特性,ACID分别是Atomic原子性,Consistency一致性, Isolation隔离性,Durability持久性。

当今十大主流的关系型数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP

非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。

非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。

2个主流非关系型数据库 Redis, MongoDB

2.3 二维表

一维表:第一行为字段名,其他行为数据 二维表:第一行也是字段名,但是可能也是数据的一部分。 简而言之:一维表砍掉一列只是砍掉了表的一个属性,二维表砍掉一列是砍掉了某个属性的一部分,造成数据缺失,因为建议使用一维表来组织数据。 见下图理解:

2.4 主键、外键

举个例子:

学生表(学号,姓名,性别,班级) ,学号是一个主键

课程表(课程号,课程名,学分),课程号是一个主键

成绩表(学号,课程号,成绩),学号和课程号的属性组构成一个主键

成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键

定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键

以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。

3. mysql数据库关系系统

查看数据库

打开MySQL 5.5 Command Line Client 输入密码

-------------------------------
--show databases; # 查看数据库
-------------------------------
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| user               |
| world              |
+--------------------+
12 rows in set (0.01 sec)

查看数据表

----------------------------
--use world;  # 选定数据库
--show tables; # 查看数据表
----------------------------
mysql> use world;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
+-----------------+
1 row in set (0.00 sec)

视图

通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。

视图优点:

  • 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
  • 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;

使用场景:

  • 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary…
  • 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;
mysql> select * from city limit 10; --查看city前10行
+------+----------------+-------------+---------------+------------+
| ID   | Name           | CountryCode | District      | Population |
+------+----------------+-------------+---------------+------------+
|    1 | Kabul          | AFG         | Kabol         |    1780000 |
|    2 | Qandahar       | AFG         | Qandahar      |     237500 |
|    3 | Herat          | AFG         | Herat         |     186800 |
|    4 | Mazar-e-Sharif | AFG         | Balkh         |     127800 |
|    5 | Amsterdam      | NLD         | Noord-Holland |     731200 |
|    6 | Rotterdam      | NLD         | Zuid-Holland  |     593321 |
|    7 | Haag           | NLD         | Zuid-Holland  |     440900 |
|    8 | Utrecht        | NLD         | Utrecht       |     234323 |
|    9 | Eindhoven      | NLD         | Noord-Brabant |     201843 |
|   10 | Tilburg        | NLD         | Noord-Brabant |     193238 |
+------+----------------+-------------+---------------+------------+
10 rows in set (0.00 sec)

mysql> DROP VIEW
   -> IF EXISTS `view_user_course`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

--创建view--
mysql> CREATE ALGORITHM = UNDEFINED
   -> DEFINER = `root`@`localhost`
   -> SQL SECURITY DEFINER
   -> VIEW `view_city` AS (
   ->
   -> select * from city limit 10);
Query OK, 0 rows affected (0.02 sec)

--查询view和查询原表结果一样--
mysql> select * from view_city;
+------+----------------+-------------+---------------+------------+
| ID   | Name           | CountryCode | District      | Population |
+------+----------------+-------------+---------------+------------+
|    1 | Kabul          | AFG         | Kabol         |    1780000 |
|    2 | Qandahar       | AFG         | Qandahar      |     237500 |
|    3 | Herat          | AFG         | Herat         |     186800 |
|    4 | Mazar-e-Sharif | AFG         | Balkh         |     127800 |
|    5 | Amsterdam      | NLD         | Noord-Holland |     731200 |
|    6 | Rotterdam      | NLD         | Zuid-Holland  |     593321 |
|    7 | Haag           | NLD         | Zuid-Holland  |     440900 |
|    8 | Utrecht        | NLD         | Utrecht       |     234323 |
|    9 | Eindhoven      | NLD         | Noord-Brabant |     201843 |
|   10 | Tilburg        | NLD         | Noord-Brabant |     193238 |
+------+----------------+-------------+---------------+------------+
10 rows in set (0.00 sec)

存储过程

简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;

ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

-- ----------------------------------------------------------------------------------
-- Procedure structure for `proc_adder`
--存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,
--功能就是计算输入参数a和b的结果,赋值给输出参数sum ;
--DELIMITER ;;:之前说过了,把默认的输入的结束符 ; 替换成 ;;
--DEFINER:创建者
-- ---------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS `proc_adder`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
BEGIN
    #Routine body goes here...

    DECLARE c int;
    if a is null then set a = 0; 
    end if;
  
    if b is null then set b = 0;
    end if;

    set sum  = a + b;
END
;;
DELIMITER ;

执行以上存储结果,验证是否正确,如下图,结果OK:

mysql> set @b=5;
Query OK, 0 rows affected (0.00 sec)

mysql> call proc_adder(2,@b,@s);
Query OK, 0 rows affected (0.00 sec)

mysql> select @s as sum;
+------+
| sum  |
+------+
|    7 |
+------+
1 row in set (0.00 sec)

总结

  • 学习MySQL数据库安装方法
  • 学习MySQL数据库基础知识
  • 学习视图创建方法
  • 学习存储过程创建方法

本文分享自微信公众号 - 乐享数据8090(gh_5703273a0562),作者:mba1398

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 7天快速掌握MySQL-DAY3

    这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PR...

    披头
  • sql进阶 - 字段也能实现split拆分?

    该字段由3部分组成,分别对应ip, user, password,现在要使用sql将该字段拆分,代码如下:

    披头
  • 7天快速掌握MySQL-DAY4

    查询数据时,如果表名很长,使用起来不方便,此时,就可以为表取一个别名,用这个别名来代替表的名称 SELECT * FROM 表名 [AS] 别名; 注意,为表指...

    披头
  • 亲测:MySQL安装与python下的MySQLdb使用

    为什么选择用MySQL,因为MySQL小巧玲珑,且性能强大。不论容量的话,相比其他两个(sql server 、oracle)动则几个G,几十个G的大软件安装在...

    机器学习AI算法工程
  • MySQL安装图解

    MySQL安装图解 一、MYSQL的安装 1、打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”。...

    Java学习
  • Linux(二十)搭建JavaEE环境

    leeqico
  • Yosemite 修复mysql不能自动启动

    sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist KeepAlive ...

    苦咖啡
  • mysql ERROR 2002 (HY000): '/tmp/mysql.sock' 问题解决

    一直用的好好的,突然就不能用了, 然后在网上搜了一圈,什么改配置my.cnf, 什么改软连接啊,换用5.7版本,都用了一次,结论是都不对.

    solate
  • docker学习(5) 在mac中创建mysql docker容器

    github上有一个专门的docker-libary项目,里面有各种各样常用的docker镜像,可以做为学习的示例,今天研究下其中mysql镜像的用法,国内镜像...

    菩提树下的杨过
  • 线上测试环境搭建过程记录

    3.安装完以后  会在 /usr/java/latest 下有对应的 jdk 版本

    小勇DW3

扫码关注云+社区

领取腾讯云代金券