安装
下载 https://dev.mysql.com/downloads/windows/installer
编辑my.ini文件,配置数据库
#代码开始[Client]#设置3306端口port = 3306[mysqld]#设置3306端口port = 3306# 设置mysql的安装目录basedir=D:\Program Files\mysql-5.7.21# 设置mysql数据库的数据的存放目录datadir=D:\Program Files\mysql-5.7.21\data# 允许最大连接数max_connections=200# 服务端使用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODBsql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES[mysql]# 设置mysql客户端默认字符集default-character-set=utf8#代码结束
安装为window服务
mysqld install# 启动 && 关闭net start mysqlnet stop mysql# 注意: 在 5.7 需要初始化 data 目录:cd C:\web\mysql-8.0.11\binmysqld --initialize-insecure#初始化后再运行 net start mysql 即可启动 mysql
登录MySQL
mysql -h 主机名 -u 用户名 -pmysql -u root -p
忘记密码
# 跳过mysql的用户验证(输入此命令之前先在任务管理器中结束mysqld.exe进程)mysqld --skip-grant-tables# 新开一个窗口直接登录数据库show databases;use mysql;# 会发现有个user表show tables;# 修改密码update user set password=password('a1234567') where user='root' and host='localhost';# 5.7版本,user表里就没有了password字段,需要用authentication_string字段update user set authentication_string=password('a1234567') where user='root' and host='localhost';
Mysql 基本操作(数据库、数据表)
创建数据库
CREATE DATABASE 数据库名;
删除数据库
drop database <数据库名>;
选择数据库
use <数据库名>;
创建数据表
CREATE TABLE table_name (column_name column_type)# 实例CREATE TABLEIF NOT EXISTS `runoob` (`runoob_id` INT UNSIGNED AUTO_INCREMENT,`runoob_title` VARCHAR (100) NOT NULL,`runoob_author` VARCHAR (40) NOT NULL,`submission_date` DATE,PRIMARY KEY (`runoob_id`)) ENGINE = INNODB DEFAULT CHARSET = utf8;
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
 - AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
 - PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
 - ENGINE 设置存储引擎,CHARSET 设置编码。
 
删除数据表
DROP TABLE table_name;
Mysql 基本操作之CRUD
查询数据
SELECT column_name,column_nameFROM table_name[WHERE Clause][LIMIT N][ OFFSET M]# 查询所有数据SELECT * FROM table_name
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
 - SELECT 命令可以读取一条或者多条记录。
 - 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
 - 你可以使用 WHERE 子句来包含任何条件。
 - 你可以使用 LIMIT 属性来设定返回的记录数。
 - 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
 
插入数据
INSERT INTO table_name (field1, field2 ,...fieldN) VALUES (value1, value2 ,...valueN);# 实例INSERT INTO websites(id,name,url,alexa,country) VALUES(0,'菜鸟工具','https://c.runoob.com',123,'CN')
更新数据
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]# 实例UPDATE websites SET name = '菜鸟移动站',url = 'https://m.runoob.com' WHERE id = 23
- 你可以同时更新一个或多个字段。
 - 你可以在 WHERE 子句中指定任何条件。
 - 你可以在一个单独表中同时更新数据。
 
删除数据
DELETE FROM table_name [WHERE Clause]# 实例DELETE FROM websites where id=22
Nodejs中使用Mysql
nodejs原生驱动
- 安装 mysql 模块:yarn add mysql
 - 使用 mysql 连接数据库(普通连接、连接池)
 
// mysql.jsconst mysql = require('mysql')// 配置const config = {host: 'localhost',user: 'root',password: 'a1234567',database: 'test'}// 创建连接对象const connection = mysql.createConnection(config)// 连接数据库connection.connect(err => {if (err) throw errconsole.log('连接成功')})// CURD 操作// 查var sql = 'SELECT * FROM websites'connection.query(sql, function(err, result) {console.log(result)if (err) throw errconsole.log(JSON.stringify(result, '', '\t'))connection.end()})// 增var addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)'var addSqlParams = ['菜鸟工具', 'https://c.runoob.com', '23453', 'CN']connection.query(addSql, addSqlParams, function(err, result) {if (err) throw errconsole.log(JSON.stringify(result, '', '\t'))connection.end()})// 改var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com', 6]connection.query(modSql, modSqlParams, function(err, result) {if (err) throw errconsole.log(JSON.stringify(result, '', '\t'))connection.end()})// 删var delSql = 'DELETE FROM websites where id=6'connection.query(delSql, function(err, result) {if (err) throw errconsole.log(JSON.stringify(result, '', '\t'))connection.end()})
ES2017写法:安装 mysql2
(async () => {const mysql = require('mysql2/promise')// 配置const config = {host: 'localhost',user: 'root',password: 'a1234567',database: 'test'}// 创建连接对象const connection = await mysql.createConnection(config)// 连接数据库connection.connect(err => {if (err) throw errconsole.log('连接成功')})// CURD 操作// 查var sql = 'SELECT * FROM websites'await connection.query(sql).then(result => {console.log(JSON.stringify(result[0], '', '\t'))})// 增var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)'var addSqlParams = ['菜鸟工具', 'https://c.runoob.com', '23453', 'CN']await connection.query(addSql, addSqlParams).then(result => {console.log(JSON.stringify(result[0], '', '\t'))})// 改var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?'var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com', 8]await connection.query(modSql, modSqlParams).then(result => {console.log(JSON.stringify(result[0], '', '\t'))})// 删var delSql = 'DELETE FROM websites where id=6'await connection.query(delSql).then(result => {console.log(JSON.stringify(result[0], '', '\t'))})connection.end()})()
创建数据库连接池
const mysql = require('mysql')// 配置const config = {host: 'localhost',user: 'root',password: 'a1234567',database: 'test'}// 创建数据库连接池const pool = mysql.createPool(config)// 通过连接池执行数据CRUD操作const query = function(sqlString, params) {console.log('sqlString:', sqlString)console.log('params:', params)return new Promise((resolve, reject) => {pool.getConnection(function(err, connection) {if (err) {reject(err)} else {connection.query(sqlString, params, (err, rows) => {if (err) {reject(err)} else {resolve(rows)}connection.release()})}})})}// 测试var sql = 'SELECT * FROM websites'query(sql).then(result => {console.log(JSON.stringify(result, '', '\t'))})module.exports = {query,escape: mysql.escape}
