1 node知识汇总03 - MySQL

302 阅读4分钟
  • MYSQL [安装教程](./MySQL for Windows)

2.1 安装 MYSQL 相关的软件

  • MYSQL Server: 专门用来提供数据存储和服务的软件
  • MYSQL Workbench: 可视化的 MYSQL 管理工具,通过它,可以方便的操作存储在 MYSQL Server 中的数据

2.2 MYSQL 的基本使用

2.2.1 使用 MYSQL Workbench 管理数据库
  • 连接数据库

    04 MYSQL Workbench连接数据库.png

  • 了解主界面的组成部分

05 了解主界面的组成部分.png

  • 创建数据库

06创建数据库.png

  • 创建数据表

07 创建数据表.png

  • DataType 数据类型:

    • int 整数
    • varchar(len) 字符串
    • tinyint(1) 布尔值
  • 字段的特使标识

    • PK (Primary Key)主键、唯一标识,比如:id
    • NN (Not null)值不允许为空
    • UQ (值唯一)
    • AI (Auto Increment)值自动增长
  • 向表中写入数据

08表中写入数据.png

2.3 使用 SQL 管理数据库

  • SQL(英文全称:Structured Query Language)是结构化查询语言,专门用来访问和处理数据库的编程语言,能够让我们以编程的形式,操作数据库里面的数据。

    三个关键点:

    • SQL 是一门数据库编程语言
    • 使用 SQL 语言编写出来的代码,叫做 SQL 语句
    • SQL 语言只能在关系型数据库中使用(例如 MySQL、Oracle、SQL Server)。非关系型数据库(例如 Mongodb)

2.4 SQL 的基本使用

-- 1. 通过 * 把 users 表中所有的数据查询出来
-- select * from users

-- 2. 从 users 表中把 username 和 password 对应的数据查询出来
-- select username, password from users

-- 3. 向 users 表中,插入新数据,username 的值为 tony stark  password 的值为 0987123
-- insert into 表 (要插入的列名,用英文逗号分割) values (要插入的数据,用英文逗号分割)
-- insert into users (username, password) values ('tony stark12', '0987123')
-- select * from users

-- 4. update 更新某一行中的某一列
-- update users set password='888888' where id=3
-- select * from users
 
-- 5. update 更新某一行中的多个列
-- update users set password='admin123', status=1 where id=2
-- select * from users

-- 6. delete 删除 列表中某一列
-- delete from users where id=7
-- select * from users
2.4.1 SQL 的 where 子句
  • where 子句用于限定选择的标准。在 selectupdatedelete 语句中,皆可使用 where 子句来限定选择的标准

    -- 查询语句中的 where 条件
    -- select 列名称 from 表名称 where 列 运算符 值
    -- 更新语句中的 where 条件
    -- update 表名称 set 列=新值 where 列 运算符 值
    -- 删除语句中的 where 条件
    -- delete from 表名称 where 列 运算符 值
    
  • where 子句中使用的运算符

    09where子句中使用的运算符.png

  • 注意:在某些版本的 SQL 中,操作符 < > 可以写为 !=

  • andor 可在where 子语句中吧两个或多个条件结合起来,and 表示必须同时满足多个条件,相当于 JavaScript 中的 **&& **;or 表示只要满足任意一个条件即可,相当于 JavaScript 中的 ||

    -- 查询语句中的 where 条件
    -- select 列名称 from 表名称 where 列 运算符 值
    -- select * from users where id <> 2
    -- and 表示且,or 表示或
    -- select * from users where id != 3 and status=1 
    -- select * from users where id=1 or status=1
    
2.4.2 order by 语句
  • 用于根据指定的列对结果集进行排序
  • order by 语句默认按照升序对记录进行排序 asc,如果希望按照降序进行排序,可以使用 desc 关键字
-- order by 语句用于根据指定的列对结果集进行排序 
-- order by 语句默认按照升序对记录进行排序 asc,如果希望按照降序进行排序,可以使用 desc 关键字
-- select * from users order by status desc
-- select * from users order by status asc, username desc
2.4.3 count(*) 函数
  • 用于返回查询结果的总数据条数,语法格式如下:

    -- select count(*) from 表名称
    select count(*) from users where status=1
    
  • 使用 as 为列设置别名

    select count(*) as total from users where id > 2 
    
2.4.4 操作 MYSQL 数据库的步骤
  • 安装操作 MySQL 数据库的第三方模块

    npm i mysql 
    
  • 通过 mysql 模块连接到 MySQL 数据库

    // 1. 导入 mysql 模块
    const mysql = require('mysql');
    // 2. 建立与 MySQL 数据库的连接
    const db = mysql.createPool({
    	host: '127.0.0.1', // 数据库的 IP 地址
    	user: 'root', // 登录数据库的账号
    	password: 'qwertyuiop0', // 登录数据库的密码
    	database: 'my_db_01', // 指定要操作的数据库
    });
    
    // 检测 mysql 模块能否正常工作
    db.query('select 1', (err, results) => {
      if (err) return console.log(err.message);
      // 只要能打印出 [ RowDataPacket { '1': 1 } ] 的结果,就证明数据库连接正常
      console.log(results);
    });
    
  • 通过 mysql 模块执行 SQL 语句

    /**
     * 查询 users 表中所有的数据
     */
    const sqlStr = 'select * from users';
    db.query(sqlStr, (err, results) => {
      // 数据查询失败
      if(err) return console.log(err.message);
      /**
       * 数据查询成功 
       * 注意:如果执行的是 select 查询语句,则执行的结果是数组
       */
      console.log(results);
    });
    
    const userData = {
      username: '胖丁',
      password: '123456',
    };
    
    const insertSqlData = 'insert into users (username, password) values (?, ?)';
    db.query(insertSqlData, [userData.username, userData.password], (err, results) => {
      // 数据插入失败
      if(err) return console.log(err.message);
    
      /**
       * 数据插入成功
       * 注意:如果执行的是 insert into 插入语句,则 results 是一个对象
       * 可以通过 affectedRows 属性,来判断是否插入数据成功
       */
      if(results.affectedRows === 1) {
        console.log('数据插入成功', results);
      }
    });
    
    const userList = {
      username: '芳芳',
      password: '123456',
    };
    const insertSqlList = 'insert into users set ?';
    
    db.query(insertSqlList, userList, (err, results) => {
      // 数据插入失败
      if(err) return console.log(err.message);
    
      /**
       * 数据插入成功
       * 注意:如果执行的是 insert into 插入语句,则 results 是一个对象
       * 可以通过 affectedRows 属性,来判断是否插入数据成功
       */
      if(results.affectedRows === 1) {
        console.log('数据插入成功', results);
      }
    });
    
    /**
     * 更新数据
     */
    
    const updateUserData = {
      id: 8,
      username: '我叫胖丁哈哈',
      password: '22222'
    }
    
    // const updateSqlDate = 'update users set username=?, password=? where id=?';
    
    // db.query(updateSqlDate, [updateUserData.username, updateUserData.password, updateUserData.id], (err, results) => {
    //   if(err) return console.log(err.message); // 更新失败
    
    //   if(results.affectedRows === 1) {
    //     console.log('更新成功!')
    //   }
    // })
    
    const updateSqlDate = 'update users set ? where id=?';
    
    db.query(updateSqlDate, [updateUserData, updateUserData.id], (err, results) => {
      if(err) return console.log(err.message); // 更新失败
    
      if(results.affectedRows === 1) {
        console.log('更新成功!')
      }
    })
    
    /**
     * 删除数据
     * 推荐根据 id 这样的唯一标识,来删除对应的数据
     */
    
    const deleteSqlData = 'delete from users where id=?';
    
    db.query(deleteSqlData, 8, (err, results) => {
      if(err) return console.log(err.message);
    
      if(results.affectedRows === 1) return console.log('删除成功!');
    });