暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

7天快速掌握MySQL-DAY1

有关SQL 2019-11-26
418

一周内快速了解并掌握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数据库基础知识

                          • 学习视图创建方法

                          • 学习存储过程创建方法



                          End





                          往期精彩:


                          本号精华合集(二)

                          精通 SQL 编程,你却只用来拉数据

                          偏见的背后,是你想象不到的无知







                          最后修改时间:2020-06-09 16:09:32
                          文章转载自有关SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                          评论