模板项目前后端总结——后端

Mysql 基本使用

use template_manage_db; //使用某个库
// 创建表
CREATE TABLE Menu(        
 menu_id int primary key not null auto_increment,    // 设置主键不为空自增
 menu_name varchar(100));
 CREATE TABLE TreeMenu (        
 ancestor_key int,    
 member_key int,   
 distance int,  
 is_leaf int,    
 id int primary key not null auto_increment);
 DROP TABLE treemenu;insert into menu(menu_name) values('菜单管理'); //删除表
 //更新某一行中某一个字段的值
 UPDATE menu SET menu_name = "系统参数" WHERE menu_id=1;
 // 插入一条数据
 insert into treemenu(ancestor_key, member_key, distance, is_leaf) values(2, 2, 0, 1);
 // 给数据库增加一个新字段 不为空
 alter table menu add COLUMN menu_path VARCHAR(20) NOT NULL;

在内连接时on和where的结果是相同的。而左外、右外与全连接由于它的特殊性,on和where造成的差别大小取决于表达式和表中的数据。在多表查询时,ON和where都表示筛选条件,on先执行,where后执行

  1. 多表查询语,如果不加条件直接进行查询就会出现笛卡尔乘积(A表中数据条数 * B表中数据条数)而且多表查询时,一定要找到两个表中相互关联的字段,并且作为条件使用
    select 字段1,字段2… from 表1,表2… [where 条件]
  2. 内连接查询(只显示符合条件的数据)
    select * from person inner join dept on person.did =dept.did;
    内连接查询与多表联合查询的效果是一样的
  3. 左外连接查询 (左边表中的数据优先全部显示)
    select * from person left join dept on person.did =dept.did;
  4. 右外连接查询 (右边表中的数据优先全部显示)
    select * from person right join dept on person.did =dept.did;
    on 后面是关联的关系 where 是查询的条件,on后面就是一个true
select * from menu m left join treemenu t on t.member_key = m.menu_id where t.distance != 0

外连接, 一样的结果
select * from t1 left join t2 where t1.id = t2.tid;
select * from t1 left join t2 on t1.id = t2.tid;
select * from t1 left join t2 on t1.id = t2.tid where t1.id = t2.tid;

select * from t1 left join t2 on t1.id = t2.tid;
也就是说 t1中有一条数据的id是1 t2中可能有5条数据的tid是1,
然后查出来的是五个数据嘛。
那如果t1的字段是o1, o2,t2的字段是o3,o4。
查出来的结果的字段是两个表的总值是o1,o2,o3,o4

node使用

1、node中的Mysql
在写 SQL 语句的时间尽量不要使用 SQL 拼装,因为很容易被 SQL注入,从而引发安全问题,如果数据和 SQL 语句需要分离,那么请使用 占位符 的方式。
query的第一个参数是一个sql,第二个参数可以是一个数组,第三个是一个回调方法(回调的第一个参数是错误执行错误的时候有值,第二个参数是成功时的返回值)第二个参数除了数组也可以是别的值,但是一定要与sql的位置一致
connection.query(“select * from users where id = ? and name = ?”, [1, ‘jmjc’], (err, result)=>{})
这种方式 mysql 模块内部会调用 escape 方法,过滤掉一些非法的操作
2、新增,多表插入:

insert into table (column1, column2)
    values (value1, value2),
        (value1, value2)

3、 想一次性 执行多条 insert 语句 到 mysql 数据库
不同的场景下有三种种方案
(1)传统做法(嵌套)

(2)mysql-queries可以同时执行多条SQL,且只有一个回调

var sqlclient = require('mysql-queries'),
  sqls = ['SELECT * FROM prod_unit WHERE NAME=? limit 1',
  'INSERT INTO prod_unit(name) values(?)',
  'INSERT INTO product(name, type_id, unit_id, price) VALUES(?, ?, ?, ?)'];
  
sqlclient.queries(sqls,
  [[data.unit_name],[data.unit_name],[data.name,data.type_id,data.unit_id,data.price]], 
  function(err, results){
	if(!!err) {
	  console.log(err);
	} else {
	//If not error, the "results" is the results of the SQLs as array.
	  console.log(results);
	}
  });

(3)开启事务
什么是事务?
事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是多个事件放在一起,一个成功另一个也要成功。

connection.beginTransaction(function(err) {
    connection.query(sql1, function(err, result) {
        if(err){
            //回滚事务
            connection.rollback(function() { if(err){ return next(err); } });
        }
        connection.query(sql2, function(err, result) {
            if(err){
                connection.rollback(function() { if(err){ return next(err); } });
            }
            //提交事务
            connection.commit(function(err) {
                if(err){
                    connection.rollback(function() { if(err){ return next(err); } });
                }
                //关闭连接
                connection.end();
            });
        });
    });
});

轮询

长轮询实现
koa实现

长连接(socket)实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值