为了以后查找方便,特地将一些API摘出来,总结出了如下内容:
MySQL 数据库
数据库的存储结构
- 一个数据库服务器可以有多个数据库
- 一个数据库可以有多张表
- 一张表里面可以有多条记录
SQL 语言
数据定义语言
数据库定义语言主要用于定义数据库、表等,其中包括:
CREATE 语句用于创建数据库、数据表等
ALTER 语句用于修改表的定义等
DROP 语句用于删除数据库、删除表等
数据操作语言
数据操作语言主要用于对数据进行添加、修改和删除操作,其中包括:
INSERT 语句用于插入数据
UPDATE 语句用于修改数据
DELETE 语句用于删除数据
添加数据:
-- 为表中所有字段添加数据
INSERT INTO table_name
VALUES(value1,value2,value3...)
-- 为表中指定字段添加数据
INSERT INTO table_name (colum1,colum2,colum3...)
VALUES (value1,value2,value3...)
更新数据:
UPDATE table_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
删除数据:
DELETE from table_name
[WHERE where_definition];
WHWRE 条件运算符
比较运算符 > < <= >= = <> 大于、小于、大于(小于等于)、不等于
BETWEEN…AND 显示在某一区间的值
IN(set) 显示在in列表中的值,例:in(100,200)
LIKE ‘张pattern’ 模糊查询
IS NULL 判断是否为空
逻辑运算符 AND 多个条件同时成立
OR 多个条件任一成立
NOT 不成立,例:WHERE NOT(salary>100)
数据查询语言
-- SELECT指定查询哪些列的数据
-- column指定列名
-- * 号表示查询所有列
-- FROM 指定查询哪种表
-- DISTINCT 可选,指查询结果时,是否去除重复数据
SELECT [DISTINCT] *|{colum1, colum2, colum3...} FROM table_name;
-- 查询所有字段
SELECT * FROM table_name;
-- 查询指定字段
SELECT colum1, colum2, colum3... FROM table_name;
-- 按条件查询
SELECT * FROM table_name WHERE expr;
数据查询语言主要用于查询数据,也就是SELECT语句, 使用SELECT 语句可以查询数据库中一条数据或多条数据。
演示 SQL
-- 添加记录
-- INSERT INTO users VALUES(NULL,'abc','123','dsnajdnsa@dsadsa.com',0,'2006-6-6',16);
-- INSERT INTO users(username, password, age) VALUES('张三','zs123',18);
-- 更新所有记录
-- UPDATE users SET gender=1
-- 按照指定条件修改
-- UPDATE users SET age=20 WHERE username='张三'
-- UPDATE users SET gender=1,email='abc@abc.com' WHERE username LIKE 'a%' AND age BETWEEN 10 AND 20;
-- 删除表中所有数据
-- DELETE FROM users;
-- DELETE FROM users WHERE id=5;
-- 查询所有表属于
-- SELECT * FROM users;
-- 查询指定列
-- SELECT username,password FROM users;
-- 根据条件查询指定列
-- SELECT gender FROM users WHERE username='张三';
关于 MySQL 乱码的补充
找到 my.ini 配置文件,然后修改如下内容,如果没有,则自己放进去:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
改完之后,记得重启 MySQL 服务器。
使用 Node 操作 MySQL 数据库
MySQL 官方提供了一个 Node 包:mysql,可以通过 npm 下载,
该包提供了一系列的用以操作 MySQL 数据库的 API,具体使用流程如下:
安装:
$ npm install --save mysql
基本使用:
var mysql = require('mysql');
// 创建连接对象
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});
// 连接数据库,可用省略,调用 query 方法的时候,会自动 connect
// connection.connect();
// 使用连接对象的 query 方法操作数据
connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});
// 数据库操作完毕,关闭连接对象
connection.end();
上面的形式不太好,因为每一次使用的时候都要重新创建连接(连接本身也是很消耗时间的一件事儿), 所以这个包还提供了另一种形式:连接池。
连接池就是默认帮你创建好一些连接,使用的时候,直接从连接池拿就可以了(不需要重新连接), 但是注意用完之后记得将连接对象释放回连接池,为了重复高效利用。 下面是一个基本的示例:
var mysql = require('mysql');
// 创建连接池
var pool = mysql.createPool({
host : 'example.org',
user : 'bob',
password : 'secret',
database : 'my_db'
});
// 从连接池拿一个可用的连接对象
pool.getConnection(function(err, connection) {
// 使用连接对象操作数据库
connection.query( 'SELECT something FROM sometable', function(err, rows) {
// 操作结束的时候将连接对象释放回连接池
connection.release();
// Don't use the connection here, it has been returned to the pool.
// 当前连接对象被释放之后,就不要再使用了,否则报错
// 如果想再次操作数据库,则重新去连接池中获取一个连接对象
});
});
以上的操作,每一次都写那么长的代码很麻烦,所以我这里给它封装了一个简化的版本,具体代码如下:
const mysql = require('mysql')
// 1. 创建一个连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'root',
database: 'itcast'
})
exports.query = function(sql, params = [], callback) {
// 2. 从连接池拿一个可用的连接
pool.getConnection((err, connection) => {
if (err) {
return callback(err)
}
// 3. 操作数据库
connection.query(sql, params, (err, rows) => {
if (err) {
return callback(err)
}
callback(null, rows)
// 4. 将连接释放回连接池
connection.release()
})
})
}
接下里就可以直接加载该模块,然后使用里面的 query 方法操作数据了,非常方便,
下面是一个使用示例:
const db = require('./db')
db.query('SELECT * FROM comments', (err, rows) => {
if (err) {
throw err
}
console.log(rows)
})