1.安装
(1).mysql模块安装
npm i mysql -D
(2).co-msql模块安装(该模块不是一个独立的模块,而是mysql的封装,他可以把普通接连封装成一个可以做异步调用的连接)
npm i co-mysql -D
2.基础语句
增 INSERT
INSERT INTO <TABLE> (XX,XX) VALUES (VAL,VAL); INSERT INIT user_table (username,password) VALUES ('comedy','000000');
删 DELETE
DELETE FROM <TABLE> WHERE 条件; DELETE FROM user_table WHERE ID=2;
改 UPDATE
UPDATE <TABLE> SET 字段=新值,字段=新值,。。。 WHERE 条件; UPDATE user_table SET password='000000' , username='comedy' WHERE ID=2;
查 SELECT
SELECT 字段列表 FROM <TABLE> WHERE 条件 ORDER BY 字段 LIMIT 30,30;
3.关于索引
(1).索引是什么?
比如说:“我们去图书馆找书,是直接快?还是现查目录快?索引就是充当数据目录的角色”。但方法都是有利有弊,索引在方便你查询的时候,也要牺牲磁盘的空间为代价。
(2).索引分类
普通索引:这是最基本的索引,它没有任何限制。
唯一索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它是一种特殊的唯一索引,不允许有空值。
组合索引:列值的组合必须唯一。
索引 ——提高查询性能、降低其他操作性能、更省空间。
全文索引——适合文本搜索。
4.贴代码
(1).版本1
regist_login.html
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"></script> <script> $(document).ready(()=>{ $(".reg").click(async ()=>{ let data=await $.ajax({ method:'get', url:'http://localhost:8520/reg', data:{ username:$(".username").val(), password:$(".password").val() } }); alert(data); }); $(".login").click(async ()=>{ let data=await $.ajax({ method:'get', url:'http://localhost:8520/login', data:{ username:$(".username").val(), password:$(".password").val() } }); }); }); </script> </head> <body> <input type="text" class="username" /> <input type="password" class="password" /> <button class="reg">注册</button> <button class="login">登录</button> </body> </html>
node_sql.js
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const http=require('http'); const mysql=require('mysql'); const url=require('url'); const fs=require('fs'); // 1.连接到服务器 let db=mysql.createConnection({ host:'localhost', port:3306, user:'root', password:'', database:'node_sql' }) if(db){console.log('sql success');} // 2.配合http http.createServer( (req,res)=>{ const {pathname,query}=url.parse(req.url,true); let{username,password}=query; if(pathname=='/reg'){ //用户想注册 if(!username || !password){ res.write('用户名和密码不能为空'); res.end(); }else if(username.length>32){ res.write('用户名最大32个字'); res.end(); }else{ db.query(`SELECT ID FROM user WHERE username='${username}'`,(err,data)=>{ if(err){ res.write('数据库有错'); res.end(); }else if(data.length>0){ res.write('用户名已被注册'); res.end(); }else{ db.query(`INSERT INTO user (username,password,nickname) VALUES ('${username}','${password}','placeholder')`,(err,data)=>{ if(err){ res.write('数据库有错'); res.end(); }else{ res.write('注册成功'); res.end(); } }) } }) } }else if(pathname=='/login'){ //用户登录 if(!username || !password){ res.write('用户名和密码不能为空'); res.end(); }else{ db.query(`SELECT ID FROM user WHERE username='${username}'`,(err,data)=>{ if(err){ res.write('数据库有错'); res.end(); }else if(data.length<=0){ res.write('用户名不存在'); res.end(); }else{ db.query(`SELECT password FROM user where username='${username}'`,(err,data)=>{ if(err){ res.write('数据库有错'); res.end(); }else { if(data[0].password!=password){ res.write('密码错误'); res.end(); }else{ res.write('登录成功'); res.end(); } } }) } }) } }else{ fs.readFile(`www${pathname}`,(err,buffer)=>{ console.log(err,buffer); if(err){ res.writeHeader(404); res.write('NOT FOUND'); }else{ res.write(buffer); } res.end(); }) } }).listen(8520,()=>{ console.log("node_sql action"); });
(2).版本2——co-mysql
node_co_sql.js
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const http=require('http'); const mysql=require('mysql'); const co=require('co-mysql'); const url=require('url'); const fs=require('fs'); //1.连接到服务器:连接池 let conn=mysql.createPool({ connectionLimit:10, //最大连接数,默认为10,不要太多,太多会加重数据库负担 host:'localhost', port:3306, user:'root', password:'', database:'node_sql' }) let db=co(conn); //co-mysql // 2.配合http http.createServer(async (req,res)=>{ const {pathname,query}=url.parse(req.url,true); let{username,password}=query; if(pathname=='/reg'){ //用户想注册 if(!username || !password){ res.write('用户名和密码不能为空'); res.end(); }else if(username.length>32){ res.write('用户名最大32个字'); res.end(); }else{ try { let data = await db.query(`SELECT ID FROM user WHERE username='${username}'`); if(data.length>0){ res.write('用户名已被注册'); res.end(); }else{ await db.query(`INSERT INTO user (username,password,nickname) VALUES ('${username}','${password}','placeholder')`); res.write('注册成功'); } } catch (error) { res.write('数据库出错'); } res.end(); } }else if(pathname=='/login'){ //用户登录 if(!username || !password){ res.write('用户名和密码不能为空'); res.end(); }else{ try{ let data = await db.query(`SELECT ID FROM user WHERE username='${username}'`); if(data.length<=0){ res.write('用户名不存在'); }else{ let pwd = await db.query(`SELECT password FROM user WHERE username='${username}'`); if(pwd[0].password!=password){ res.write('密码错误'); }else{ res.write('登陆成功'); } } }catch(error){ res.write('数据库出错'); } res.end(); } }else{ fs.readFile(`www${pathname}`,(err,buffer)=>{ console.log(err,buffer); if(err){ res.writeHeader(404); res.write('NOT FOUND'); }else{ res.write(buffer); } res.end(); }) } }).listen(8520,()=>{ console.log("node_co_sql action"); });