SQL——4大語句
增 INSERT
INSERT INTO <表> (字段, ...) VALUES(值, ...);
INSERT INTO user_table (username, password) VALUES('lisi', '111111');
刪 DELETE
DELETE FROM <表> WHERE 條件;
DELETE FROM user_table WHERE ID=2;
改 UPDATE
UPDATE <表> SET 字段=新值,字段=新值,... WHERE 條件;
UPDATE user_table SET password='654321', username='blue2' WHERE ID=1;
查 SELECT
SELECT 字段列表 FROM <表> WHERE 條件 ORDER BY 字段 LIMIT 30,30;複製代碼
npm i mysql
npm i co-mysql
複製代碼
const http = require('http');
const mysql = require('mysql');
const co = require('co-mysql');
const url = require('url');
/*
* 一、建立鏈接池
* 二、mysql操做語句異步化
*/
let conn = mysql.createPool({host: 'localhost', user: 'xxx', password: '', database: 'xxx'});
let db = co(conn);
http.reateServer((req,res)=>{
let {pathname,query} = url.parse(req,true);
let username = query.username;
let password = query.password;
// 能夠配合http使用,根據req傳遞的參數進行操做
// 查詢操做,若data.lenth>0,則查詢到相關結果
let data = await db.query(`SELECT ID FROM user_table WHERE username='${username}'`);
// 刪除操做
await db.query(`DELETE FROM user_tabel WHERE username='${username}'`);
// 修改操做
await db.query(`UPDATE user_tabel SET password='123' WHERE username='${username}'`);
// 增長操做
await db.query(`INSERT INTO user_tabel SET (username,password) VALUES (`${username}`,`${password}`));
}).listen(8080);複製代碼
#### MongoDB mysql
- 一個數據庫對應多個集合 sql
- 一個集合對應多個文檔對象 mongodb
- 在mongo中不管是db仍是集合,你都無需去建立他 數據庫
- 直接就當他已經存在,直接Use來使用 npm
- use db名稱; bash
- 接着會被切換到該db中 服務器
- `db.要建立的集合名稱.save({})`;這樣集合就被建立了 異步
- 1:啓動服務器 - `mongod --dbpath "D:/mongodb/db"` // 目錄必定要存在本身建立隨便名稱‘函數
- 儘可能設置在非系統盤 `C盤生成目錄是須要權限的` ui
- 若是看到`waiting for connections on port 27017`說明服務已經啓動
- 客戶端鏈接服務器**另開一個命令行**
- `mongo` 默認鏈接的是test數據庫
- 查詢有哪些數據庫
- 查詢數據庫:`show dbs;`
- 切換數據庫: `use 數據庫名;`
- 查詢當前db下有哪些集合
- `show collections;`
- `db.集合名.find();` //查詢出來的是文檔對象 document
- `db.users.find();`
- `db.集合名.save(對象)` //mongo默認會給咱們加入_id做爲該文檔對象的惟一標識
- `db.users.save({contry:'中國',name:'小明',score:77});`
- `db.集合名.remove(條件對象);`//條件匹配就會被刪除
- `db.users.remove({name:'小明'});` - 若是給定一個空對像,會匹配所有
``` 練習:
查詢姓名爲小明的學生
db.users.find({name:'小明'});;
查詢英語成績大於90分的同窗
db.users.find({score:{$gt:90}}); //查找成績大於90分$gt //$lt小於
查詢數學成績不等於88的同窗 db.users.find({score:{$ne:88}});
查詢總分大於200分的全部同窗 db.users.find({score:{$gt:200}});
```
- `db.users.find().skip(3).limit(3);`
- db.集合名稱.find().跳到3.顯示3條 + limit 0,3
- `db.users.find().sort({key:排序方式});`
- `db.users.find().sort({'score':1});` //正數表明升序,負數表明降序
- `db.users.find({name:{$regex:'小'}});` // 其實是正則 `db.users.find({name:/小/});`
- `db.users.find({name:{$regex:'明'}});`
- 須要求當前集合的記錄數:
- `db.users.find().count();`
- 求最大值
-求整個集合的總成績 + db.集合名.聚合({ 組的劃分規則{_id:'1',顯示內容:{$sum:'$score'}} })
- 求全部人的平均分
- `db.users.aggregate({$group:{_id:'1',sumscore:{$avg:'$score' } }});`
- 求按國家分組,求全部國家的總分
- `db.users.aggregate({$group:{_id:'$contry',sumScore:{$sum:'$score'}}});`
- 添加基礎數據:
db.users.save({contry:'中國',name:'小明',score:77});
db.users.save({contry:'中國',name:'小紅',score:88});
db.users.save({contry:'中國',name:'小張',score:99});
db.users.save({contry:'美國',name:'jack',score:45});
db.users.save({contry:'美國',name:'rose',score:67});
db.users.save({contry:'美國',name:'mick',score:89});
```js
db.orders.insert([
{ "_id" : 1, "item" : "almonds", "price" : 12, "quantity" : 2 },
{ "_id" : 2, "item" : "pecans", "price" : 20, "quantity" : 1 },
{ "_id" : 3 }
]);
db.inventory.insert([
{ "_id" : 1, "sku" : "almonds", description: "product 1", "instock" : 120 },
{ "_id" : 2, "sku" : "bread", description: "product 2", "instock" : 80 },
{ "_id" : 3, "sku" : "cashews", description: "product 3", "instock" : 60 },
{ "_id" : 4, "sku" : "pecans", description: "product 4", "instock" : 70 },
{ "_id" : 5, "sku": null, description: "Incomplete" },
{ "_id" : 6 }
]);
db.orders.aggregate([
{
$lookup: { // 聚合的管道加入一次查找操做
from: "inventory", // 從哪一個集合產生關聯
localField: "item", // orders(自身產生)關聯字段
foreignField: "sku", // inventory(其餘集合) 須要關聯的字段
orders.item === inventory.item
as: "inventory_docs" // inventory數據別名
}
}
]);
db.orders.aggregate([
{
$lookup: { // 聚合的管道加入一次查找操做
from: "inventory", // 從哪一個集合產生關聯
localField: "item", // orders(自身產生)關聯字段
foreignField: "sku", // inventory(其餘集合) 須要關聯的字段
orders.item === inventory.item
as: "inventory_docs" // inventory數據別名
}
},
{
$lookup: {
from: "xxxx",
localField: "item",
foreignField: "item2",
orders.item === inventory.item2
as: "xxxx"
}
]);
```
npm i mongodb複製代碼
// 引入Mongodb客戶端
const MongoClient = require('mongodb').MongoClient;
// 鏈接MongoDB數據庫地址
const url = 'mongodb://localhost:27017';
// 數據庫名臣
let dbName = 'student';
var obj = {};
// 客戶端鏈接服務器
MongoClient.connect(url,function(err,client){
if(err) throw err; //鏈接異常
// 獲取db對象,再獲取集合對象
const col = client.db(dbName).collection('class');
// 插入數據
col.insert([
{a:1,b:2},
{a:2,b:2,c:3},
}],function(err,result){
if(err) throw err; //插入異常
col.find().toArray(function(err,docs){
if(err) throw err; //查詢異常
console.log(docs);
client.close(); //關閉鏈接 (放回mongodb鏈接池)
}
}
});
複製代碼
每次進行CRUD操做,都須要從新鏈接,在這裏封裝鏈接
function _connection(callback){
MongoClient.connect(url,function(err,client){
if(err) throw err; // 鏈接異常
callback(client); // 獲取db對象,再次獲取集合對象(操做對象)
}
}複製代碼
插入數據
obj.insert = function (cname,arrData,fn){
_connection(function client){
const col = client.db(dbName).collection(cname);
col.insert(arrData,function(err,result){
// 將數據和錯誤,交給外部處理
fn(err,result);
client.close();
});
});
}複製代碼
obj.inert('student',[{name: 'jack',age: 11}],function(err,result){
if(err) throw err;
// result相關操做
});複製代碼
更新數據
obj.update = function(cname,filter,update,fn){
_connection(function(client) {
const col = client.db(dbName).collection(cname);
col.update(filter,{$set:update},function(err,result){
fn(err,result);
client.close();
});
});
}複製代碼
obj.update('student',{name:'jack'},{age: 12},function(err,result){
if(err) throw err;
// result相關操做
});複製代碼
刪除數據
obj.delete = function(cname,filter,fn){
_connection(function(client){
const col = client.db(dbName).collection(cname);
col.deleteMany(filter,function(err,result){
fn(err,result);
client.close();
});
});
}複製代碼
obj.delete('student',{name: 'jack'},function(err,result){
if(err) throw err; // 操做異常
//進行結果操做
})複製代碼
const https = require('https');
const fs = require('fs');
// 讀取簽名與證書
const options = {
key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};
//建立https服務
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);複製代碼