mysql7 项目实际应用 事务

mysql 7

restrict 禁止 删除主表的时候看一下 子表是否引用这个值了

// 模型 ====点击文件 导出SQL

//导出表和视图 然后 运行导出的SQL为没空啊吗 就能新建表了

// 刷新一下就出来了

// 文件同步到数据库 选择默认模式 目标链接 localhost 对比 直接关联数据库 可以连接

// 事务

A账户减少 B账户增加 B账号失败了 ,那么要进行回滚

balance decimal(10,2)// 保留两位小数

select * from account;

update account set balance =balance -10 where id =1

update account set balance =balance +10 where id =2

// id=2的用户 因为balance 字段写错了 或者什么原因 没有加上 ,而id=1的钱已经扣了,所以需要回滚

张三扣钱 和李四加钱做成一个事务

需要两条update语句

记录最后的修改时间 转账时的上次查询的修改时间 和转的那一刻查询的修改时间是否相同

父亲转账 和母亲转账是保持 两个独立的

// 数据库开启自动提交

// 手动提交

SET autocommit=0; //update修改后 select查询 并不会更新了

BEGIN;// 开启后在当前连接可以看到修改 但是到另一个shell命令窗口则看不到数据的变化

update account set balance =balance -10 where id =1

ROLLBACK;// 回滚 不转了

update account set balance =balance +10 where id =2

// 要么提交 要么回滚 两种操作

COMMIT;

// 项目使用mysql

let mysql = require('mysql');

let connection = mysql.createConnection({

host:'localhost',

user:'root',

password:'root',

database:'cms'

})

// 连接数据库

connection.connect()

connection.query('SELECT * FROM account',function(error,results,fields){

console.log(error)

console.log(results)

console.log(fields)// 有哪些字段

})

// 换成下面的方式 用promise

let Promise = require('bluebird')

// 支持mysql的promise

cnpm i bluebird -S

let query = Promise.promisify(connection.query).bind(connection);

// 改变this

query('SELECT * FROM account').then((results)=>{

console.log(results)

})


 

// 真实项目中 我们会用连接池的方式

let mysql = require('mysql');

const pool = mysql.createConnection({

connectionLimit:10,// 最多10个连接

host:'localhost',

user:'root',

password:'root',

database:'cms'

})

应用服务器和mysql 服务器之间创建一个连接池

刚启动的时候创建3个 就放在那 用完就还回去

10个工作 剩下的90个排队等着

pool.query('SELECT 1+1 AS solution',(err,results,fields)=>{

console.log(results)

})

// mysql中使用事务 判断失败的事务

let mysql = require('mysql');

const connection = mysql.createConnection({

host:'localhost',

user:'root',

password:'root',

database:'cms'

})

connection.connect()

// 开启事务

connection.beginTransaction(function(err){

if(err)throw err;

connection.query('update account set balance =balance -10 where id =1',function(err){

if(err){

connection.rollback(err=>{throw err});

throw err;

} else {

connection.query('update account set balance =balance +10 where id =2',,function(err){

if(err){

connection.rollback(err=>{throw err});

throw err;

}else {

connection.commit(function(err){

console.log('事务提交成功')

})

}

})

}

})

});

// 死锁 双方都在等待对方结束

等待对方把数据释放

// 表级锁 库级锁 行级锁

发布了363 篇原创文章 · 获赞 32 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/gwdgwd123/article/details/104293469