07-Node.js操作MySQL数据库

Node.js 连接 MySQL

(1)安装 mysql 包:

  1. $ npm install mysql

(2)引入 mysql 包:

  1. const mysql = require("mysql");

(3)建立连接:

  1. let mysql = require("mysql");
  2. let options = {
  3. host: "localhost",
  4. //port:"3306", //可选,默认3306
  5. user: "root",
  6. password: 'xxx', // 这里改成你自己的数据库连接密码
  7. database: "qiangu_database",
  8. };
  9. //创建与数据库进行连接的连接对象
  10. let connection = mysql.createConnection(options);
  11. //建立连接
  12. connection.connect((err) => {
  13. if (err) {
  14. // 数据库连接失败
  15. console.log(err);
  16. } else {
  17. // 数据库连接成功
  18. console.log("数据库连接成功");
  19. }
  20. });

正常来说,运行程序后,应该会提示数据库连接成功

如果在运行时提示错误Client does not support authentication protocol requested by server,解决办法如下:(在终端进入 sql 之后,输入如下命令)

  1. # 注意,这里的 'root' 请填你的user账号, 'localhost' 请填 你的 host, 'password' 请填你的密码
  2. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  3. # 然后执行如下命令
  4. flush privileges;

Node.js 增删改查 MySQL

针对下面这张表:

07-Node.js操作MySQL数据库 - 图1

通过 Node.js可以对其进行一些增删改查操作。代码举例如下。

1、查询表

  1. let mysql = require('mysql');
  2. let options = {
  3. host: 'localhost',
  4. //port:"3306",//可选,默认3306
  5. user: 'root',
  6. password: 'xxx', // 这里改成你自己的数据库密码
  7. database: 'qiangu_database'
  8. }
  9. //创建与数据库进行连接的连接对象
  10. let connection = mysql.createConnection(options);
  11. //建立连接
  12. connection.connect((err) => {
  13. if (err) {
  14. // 数据库连接失败
  15. console.log(err)
  16. } else {
  17. // 数据库连接成功
  18. console.log('数据库连接成功')
  19. }
  20. });
  21. // 1、查询表
  22. let strSql1 = 'select * from qiangu_student_table';
  23. connection.query(strSql1, (err, result, fields) => {
  24. if (err) {
  25. // 表查询失败
  26. console.log(err);
  27. } else {
  28. // 表查询成功
  29. console.log('qiangu_student_table 表查询结果:' + JSON.stringify(result));
  30. console.log('fields:' + JSON.stringify(fields));
  31. }
  32. })

打印结果如下:

  1. qiangu_student_table 表查询结果:
  2. [{"id":1,"name":"千古壹号","age":28},{"id":2,"name":"许嵩","age":34},{"id":3,"name":"邓紫棋","age":28}]
  3. fields:[
  4. {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"id","orgName":"id","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
  5. {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"name","orgName":"name","charsetNr":33,"length":765,"type":253,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
  6. {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"age","orgName":"age","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true}
  7. ]

删除表

  1. // 2、删除表
  2. let strSql2 = 'drop table test2_table';
  3. connection.query(strSql2, (err, result) => {
  4. if (err) {
  5. // 表删除失败
  6. console.log(err);
  7. } else {
  8. // 表删除成功
  9. console.log('表删除成功:' + result);
  10. }
  11. });

打印结果:

  1. 表删除成功:
  2. OkPacket {
  3. fieldCount: 0,
  4. affectedRows: 0,
  5. insertId: 0,
  6. serverStatus: 2,
  7. warningCount: 0,
  8. message: '',
  9. protocol41: true,
  10. changedRows: 0
  11. }

删除数据库

将上方的sql语句换一下即可:

  1. let strSql3 = 'drop database qiangu_database';

2、新建数据库

  1. let mysql = require('mysql');
  2. let options = {
  3. host: 'localhost',
  4. //port:"3306",//可选,默认3306
  5. user: 'root',
  6. password: 'smyhvae001',
  7. // database: 'qiangu_database' // 注意,因为代码里是创建新的数据库,所以这里不需要填其他的数据库名
  8. }
  9. //创建与数据库进行连接的连接对象
  10. let connection = mysql.createConnection(options);
  11. //建立连接
  12. connection.connect((err) => {
  13. if (err) {
  14. // 数据库连接失败
  15. console.log(err);
  16. } else {
  17. // 数据库连接成功
  18. console.log('数据库连接成功')
  19. }
  20. });
  21. // 创建新的数据库
  22. const strSql4 = 'create database qiangu_database3';
  23. connection.query(strSql4, (err, result) => {
  24. if (err) {
  25. console.log(err);
  26. } else {
  27. console.log('新建数据库成功:' + JSON.stringify(result));
  28. }
  29. });

打印结果:

  1. 数据库连接成功
  2. 新建数据库成功:{
  3. "fieldCount":0,"affectedRows":1,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
  4. }

3、新建表

新建表的sql语句举例:

  1. CREATE TABLE `qiangu_table5` (
  2. `id` int NOT NULL AUTO_INCREMENT,
  3. `name` varchar(255) DEFAULT NULL,
  4. `age` int DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. );

如果是在 js 代码中执行上面这样命令的话,要记得把 sql 语句存放在字符串里的同一行。

代码举例如下:

  1. let mysql = require('mysql');
  2. let options = {
  3. host: 'localhost',
  4. //port:"3306",//可选,默认3306
  5. user: 'root',
  6. password: 'smyhvae001',
  7. database: 'qiangu_database'
  8. }
  9. //创建与数据库进行连接的连接对象
  10. let connection = mysql.createConnection(options);
  11. //建立连接
  12. connection.connect((err) => {
  13. if (err) {
  14. // 数据库连接失败
  15. console.log(err);
  16. } else {
  17. // 数据库连接成功
  18. console.log('数据库连接成功')
  19. }
  20. });
  21. // 新建表
  22. // 注意,在 js 代码中,sql 语句要存放在字符串里的同一行。
  23. const strSql5 = 'CREATE TABLE `qianguyihao_table5` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`));';
  24. connection.query(strSql5, (err, result) => {
  25. if (err) {
  26. // 新建表失败
  27. console.log(err);
  28. } else {
  29. // 新建表成功
  30. console.log('qianguyihao 新建表成功:' + JSON.stringify(result));
  31. }
  32. })

打印结果:

  1. 数据库连接成功
  2. qianguyihao 新建表成功:
  3. {
  4. "fieldCount":0,"affectedRows":0,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
  5. }

在指定的表中插入数据

在指定的表中插入数据:

  1. // 在指定的表中插入数据
  2. const strSql6 = "insert into qianguyihao_table5 (name, age) values ('千古壹号', '28')";
  3. connection.query(strSql6, (err, result) => {
  4. if (err) {
  5. // 插入数据失败
  6. console.log(err);
  7. } else {
  8. // 在指定的表中插入数据成功
  9. console.log('qianguyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
  10. }
  11. });

打印结果:

  1. qianguyihao 在指定的表中插入数据成功:
  2. {
  3. "fieldCount":0,"affectedRows":1,"insertId":1,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
  4. }

如果插入的数据是变量(比如是用户提交上来的数据),那么,sql 语句可以这样写:

  1. // 在指定的表中插入数据(数据作为变量)
  2. const strSql7 = "insert into qianguyihao_table5 (name, age) values (?, ?)";
  3. connection.query(strSql7, ['许嵩', '34'], (err, result) => {
  4. if (err) {
  5. // 插入数据失败
  6. console.log(err);
  7. } else {
  8. // 在指定的表中插入数据成功
  9. console.log('qiangauyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
  10. }
  11. });