安装

下载 https://dev.mysql.com/downloads/windows/installer

编辑my.ini文件,配置数据库

  1. #代码开始
  2. [Client]
  3. #设置3306端口
  4. port = 3306
  5. [mysqld]
  6. #设置3306端口
  7. port = 3306
  8. # 设置mysql的安装目录
  9. basedir=D:\Program Files\mysql-5.7.21
  10. # 设置mysql数据库的数据的存放目录
  11. datadir=D:\Program Files\mysql-5.7.21\data
  12. # 允许最大连接数
  13. max_connections=200
  14. # 服务端使用的字符集默认为8比特编码的latin1字符集
  15. character-set-server=utf8
  16. # 创建新表时将使用的默认存储引擎
  17. default-storage-engine=INNODB
  18. sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  19. [mysql]
  20. # 设置mysql客户端默认字符集
  21. default-character-set=utf8
  22. #代码结束

安装为window服务

  1. mysqld install
  2. # 启动 && 关闭
  3. net start mysql
  4. net stop mysql
  5. # 注意: 在 5.7 需要初始化 data 目录:
  6. cd C:\web\mysql-8.0.11\bin
  7. mysqld --initialize-insecure
  8. #初始化后再运行 net start mysql 即可启动 mysql

登录MySQL

  1. mysql -h 主机名 -u 用户名 -p
  2. mysql -u root -p

忘记密码

  1. # 跳过mysql的用户验证(输入此命令之前先在任务管理器中结束mysqld.exe进程)
  2. mysqld --skip-grant-tables
  3. # 新开一个窗口直接登录数据库
  4. show databases;
  5. use mysql;
  6. # 会发现有个user表
  7. show tables;
  8. # 修改密码
  9. update user set password=password('a1234567') where user='root' and host='localhost';
  10. # 5.7版本,user表里就没有了password字段,需要用authentication_string字段
  11. update user set authentication_string=password('a1234567') where user='root' and host='localhost';

Mysql 基本操作(数据库、数据表)

创建数据库

  1. CREATE DATABASE 数据库名;

删除数据库

  1. drop database <数据库名>;

选择数据库

  1. use <数据库名>;

创建数据表

  1. CREATE TABLE table_name (column_name column_type)
  2. # 实例
  3. CREATE TABLE
  4. IF NOT EXISTS `runoob` (
  5. `runoob_id` INT UNSIGNED AUTO_INCREMENT,
  6. `runoob_title` VARCHAR (100) NOT NULL,
  7. `runoob_author` VARCHAR (40) NOT NULL,
  8. `submission_date` DATE,
  9. PRIMARY KEY (`runoob_id`)
  10. ) ENGINE = INNODB DEFAULT CHARSET = utf8;
  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码。

删除数据表

  1. DROP TABLE table_name;

Mysql 基本操作之CRUD

查询数据

  1. SELECT column_name,column_name
  2. FROM table_name
  3. [WHERE Clause]
  4. [LIMIT N][ OFFSET M]
  5. # 查询所有数据
  6. SELECT * FROM table_name
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 子句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

插入数据

  1. INSERT INTO table_name (field1, field2 ,...fieldN) VALUES (value1, value2 ,...valueN);
  2. # 实例
  3. INSERT INTO websites(id,name,url,alexa,country) VALUES(0,'菜鸟工具','https://c.runoob.com',123,'CN')

更新数据

  1. UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
  2. # 实例
  3. UPDATE websites SET name = '菜鸟移动站',url = 'https://m.runoob.com' WHERE id = 23
  • 你可以同时更新一个或多个字段。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在一个单独表中同时更新数据。

删除数据

  1. DELETE FROM table_name [WHERE Clause]
  2. # 实例
  3. DELETE FROM websites where id=22

Nodejs中使用Mysql

nodejs原生驱动

  • 安装 mysql 模块:yarn add mysql
  • 使用 mysql 连接数据库(普通连接、连接池)
  1. // mysql.js
  2. const mysql = require('mysql')
  3. // 配置
  4. const config = {
  5. host: 'localhost',
  6. user: 'root',
  7. password: 'a1234567',
  8. database: 'test'
  9. }
  10. // 创建连接对象
  11. const connection = mysql.createConnection(config)
  12. // 连接数据库
  13. connection.connect(err => {
  14. if (err) throw err
  15. console.log('连接成功')
  16. })
  17. // CURD 操作
  18. // 查
  19. var sql = 'SELECT * FROM websites'
  20. connection.query(sql, function(err, result) {
  21. console.log(result)
  22. if (err) throw err
  23. console.log(JSON.stringify(result, '', '\t'))
  24. connection.end()
  25. })
  26. // 增
  27. var addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)'
  28. var addSqlParams = ['菜鸟工具', 'https://c.runoob.com', '23453', 'CN']
  29. connection.query(addSql, addSqlParams, function(err, result) {
  30. if (err) throw err
  31. console.log(JSON.stringify(result, '', '\t'))
  32. connection.end()
  33. })
  34. // 改
  35. var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'
  36. var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com', 6]
  37. connection.query(modSql, modSqlParams, function(err, result) {
  38. if (err) throw err
  39. console.log(JSON.stringify(result, '', '\t'))
  40. connection.end()
  41. })
  42. // 删
  43. var delSql = 'DELETE FROM websites where id=6'
  44. connection.query(delSql, function(err, result) {
  45. if (err) throw err
  46. console.log(JSON.stringify(result, '', '\t'))
  47. connection.end()
  48. })

ES2017写法:安装 mysql2

  1. (async () => {
  2. const mysql = require('mysql2/promise')
  3. // 配置
  4. const config = {
  5. host: 'localhost',
  6. user: 'root',
  7. password: 'a1234567',
  8. database: 'test'
  9. }
  10. // 创建连接对象
  11. const connection = await mysql.createConnection(config)
  12. // 连接数据库
  13. connection.connect(err => {
  14. if (err) throw err
  15. console.log('连接成功')
  16. })
  17. // CURD 操作
  18. // 查
  19. var sql = 'SELECT * FROM websites'
  20. await connection.query(sql).then(result => {
  21. console.log(JSON.stringify(result[0], '', '\t'))
  22. })
  23. // 增
  24. var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)'
  25. var addSqlParams = ['菜鸟工具', 'https://c.runoob.com', '23453', 'CN']
  26. await connection.query(addSql, addSqlParams).then(result => {
  27. console.log(JSON.stringify(result[0], '', '\t'))
  28. })
  29. // 改
  30. var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'
  31. var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com', 8]
  32. await connection.query(modSql, modSqlParams).then(result => {
  33. console.log(JSON.stringify(result[0], '', '\t'))
  34. })
  35. // 删
  36. var delSql = 'DELETE FROM websites where id=6'
  37. await connection.query(delSql).then(result => {
  38. console.log(JSON.stringify(result[0], '', '\t'))
  39. })
  40. connection.end()
  41. })()

创建数据库连接池

  1. const mysql = require('mysql')
  2. // 配置
  3. const config = {
  4. host: 'localhost',
  5. user: 'root',
  6. password: 'a1234567',
  7. database: 'test'
  8. }
  9. // 创建数据库连接池
  10. const pool = mysql.createPool(config)
  11. // 通过连接池执行数据CRUD操作
  12. const query = function(sqlString, params) {
  13. console.log('sqlString:', sqlString)
  14. console.log('params:', params)
  15. return new Promise((resolve, reject) => {
  16. pool.getConnection(function(err, connection) {
  17. if (err) {
  18. reject(err)
  19. } else {
  20. connection.query(sqlString, params, (err, rows) => {
  21. if (err) {
  22. reject(err)
  23. } else {
  24. resolve(rows)
  25. }
  26. connection.release()
  27. })
  28. }
  29. })
  30. })
  31. }
  32. // 测试
  33. var sql = 'SELECT * FROM websites'
  34. query(sql).then(result => {
  35. console.log(JSON.stringify(result, '', '\t'))
  36. })
  37. module.exports = {
  38. query,
  39. escape: mysql.escape
  40. }