連接流程代碼如下:
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的南康網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
var mysql ?= require('mysql'); ?//調(diào)用MySQL模塊//創(chuàng)建一個(gè)connectionvar connection = mysql.createConnection({ ? ?
host ? ? : '127.0.0.1', ? ? ? //主機(jī)
user ? ? : 'root', ? ? ? ? ? ?//MySQL認(rèn)證用戶名
password:'12345',
port: ? '3306',
database: 'node'});//創(chuàng)建一個(gè)connectionconnection.connect(function(err){
if(err){ ? ? ?
console.log('[query] - :'+err); ? ? ? ?return;
}
console.log('[connection connect] ?succeed!');
});
//執(zhí)行SQL語(yǔ)句connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) {
console.log('[query] - :'+err); ? ? ? ?return;
}
console.log('The solution is: ', rows[0].solution);
});
//關(guān)閉connectionconnection.end(function(err){
if(err){ ? ? ?
return;
}
console.log('[connection end] succeed!');
});12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
關(guān)于Connection Optionos
要想創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接,先就要認(rèn)識(shí)清楚Options
host:主機(jī)地址 (默認(rèn):localhost)
user:用戶名
password:密碼
port:端口號(hào) (默認(rèn):3306)
database:數(shù)據(jù)庫(kù)名
charset:連接字符集(默認(rèn):’UTF8_GENERAL_CI’,注意字符集的字母都要大寫)
localAddress:此IP用于TCP連接(可選)
socketPath:連接到unix域路徑,當(dāng)使用 host 和 port 時(shí)會(huì)被忽略
timezone:時(shí)區(qū)(默認(rèn):’local’)
connectTimeout:連接超時(shí)(默認(rèn):不限制;單位:毫秒)
stringifyObjects:是否序列化對(duì)象(默認(rèn):’false’ ;與安全相關(guān))
typeCast:是否將列值轉(zhuǎn)化為本地JavaScript類型值 (默認(rèn):true)
queryFormat:自定義query語(yǔ)句格式化方法?
supportBigNumbers:數(shù)據(jù)庫(kù)支持bigint或decimal類型列時(shí),需要設(shè)此option為true (默認(rèn):false)
bigNumberStrings:supportBigNumbers和bigNumberStrings啟用 強(qiáng)制bigint或decimal列以JavaScript字符串類型返回(默認(rèn):false)
dateStrings:強(qiáng)制timestamp,datetime,data類型以字符串類型返回,而不是JavaScript Date類型(默認(rèn):false)
debug:開啟調(diào)試(默認(rèn):false)
multipleStatements:是否許一個(gè)query中有多個(gè)MySQL語(yǔ)句 (默認(rèn):false)
flags:用于修改連接標(biāo)志,更多詳情:
ssl:使用ssl參數(shù)(與crypto.createCredenitals參數(shù)格式一至)或一個(gè)包含ssl配置文件名稱的字符串,目前只捆綁Amazon RDS的配置文件
其它:
可以使用URL形式的加接字符串,不多介紹了,不太喜歡那種格式,覺(jué)得可讀性差,也易出錯(cuò),想了解的可以去主頁(yè)上看。
MYSQL CURD操作
增加
var mysql = require('mysql');var DATABASE = "seckill";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var addVip = 'insert into seckill(name,number) values(?,?)';var param = ['100元秒殺家教機(jī)',100];
connection.query(addVip, param, function(error, result){
if(error)
{
console.log(error.message);
}else{
console.log('insert id: '+result.insertId);
}
});
connection.end();12345678910111213141516171819202122232425
刪除
var mysql = require('mysql');var DATABASE = "node";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var addVip = 'delete from seckill where seckill_id = 1005';
connection.query(addVip, function(error, result){
if(error)
{
console.log(error.message);
}else{
console.log('affectedRows: '+result.affectedRows);
}
});
connection.end();123456789101112131415161718192021222324
查找
var mysql = require("mysql");var DATABASE = "node";var TABLE="seckill"var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
});
connection.connect();
connection.query('use '+DATABASE);
connection.query('select * from '+TABLE, function(error, results, fields){
if (error) { ? ? ? ?throw error;
} ? ?if (results) { ? ? ? ?for(var i = 0; i results.length; i++)
{
console.log('%s\t%s',results[i].name,results[i].end_time);
}
}
});
connection.end();12345678910111213141516171819202122232425
修改
var mysql = require('mysql');var DATABASE = "seckill";var connection = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'12345',
port:'3306',
database: DATABASE
});
connection.connect();var userSql = "update seckill set number = number-1 where seckill_id = ?";var param = [1000, 2];
connection.query(userSql, param, function (error, result) {
if(error)
{
console.log(error.message);
}else{
console.log('affectedRows: '+result.affectedRows);
}
});
connection.end();123456789101112131415161718192021
結(jié)束連接其實(shí)有兩種方法end(),destory();
end()?
end()方法在queries都結(jié)束后執(zhí)行,end()方法接收一個(gè)回調(diào)函數(shù),queries執(zhí)行出錯(cuò),仍然后結(jié)束連接,錯(cuò)誤會(huì)返回給回調(diào)函數(shù)err參數(shù),可以在回調(diào)函數(shù)中處理!
destory()?
比較暴力,沒(méi)有回調(diào)函數(shù),即刻執(zhí)行,不管queries是否完成!
使用連接池
在數(shù)據(jù)庫(kù)中執(zhí)行如下代碼創(chuàng)建一個(gè)存儲(chǔ)過(guò)程
DROP PROCEDURE IF EXISTS `P_SeckillInfo`;DELIMITER ;;CREATE DEFINER=`root`@`localhost` PROCEDURE `P_SeckillInfo`(IN ExtName VARCHAR(120),IN ExtNumber INT(11),OUT ExtReturnVal INT)
TOP: BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION ? ?BEGIN
ROLLBACK;
SET ExtReturnVal = 0; ?-- Failed
END;
START TRANSACTION;
INSERT INTO seckill(name, number) VALUES(ExtName,ExtNumber);
SET ExtReturnVal = 1;
SELECT ExtReturnVal;
COMMIT;END;;
DELIMITER ;12345678910111213141516171819202122232425262728293031323334
調(diào)用示例:
var mysql = require("mysql");var pool = mysql.createPool({
host: '127.0.0.1', ? ?
user: 'root',
password:'12345',
port:'3306',
database:'node'});//監(jiān)聽(tīng)connection事件pool.on('connection', function(connection) {
connection.query('select * from seckill', function(error, results, fields){
?if (error) { ? ? ? ? ? ?throw error;
?} ? ? ? ?if (results) { ? ? ? ? ? ?for(var i = 0; i results.length; i++)
? ? ?{
? ? ? ? ?console.log('%s\t%s',results[i].name,results[i].end_time);
? ? ?}
?}
});
});//連接池可以直接使用,也可以共享一個(gè)連接或管理多個(gè)連接(引用官方示例)//直接使用pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
});//共享連接function myQuery(sql){
pool.getConnection(function(err, connection) {
?connection.query(sql, function(err, result) { ?
? ? ?console.log(result); ? ? ? ? ? ?//釋放連接
? ? ?connection.release();
?}); ? ? ? ?//Error: Connection already released,應(yīng)該每次到連接池中再次獲取
?// connection.query( 'SELECT * FROM seckill;', function(err, result) {
?// ?console.log(result);
?// ?connection.release();
?// });
});
}
myQuery('SELECT * FROM seckill;');
myQuery('SELECT * FROM seckill;');123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
1.連接池的創(chuàng)建,使用createPool方法,options和createConntion一致;?
2.其它連接池配置選項(xiàng)
waitForConnections
當(dāng)連接池沒(méi)有連接或超出最大限制時(shí),設(shè)置為true且會(huì)把連接放入隊(duì)列,設(shè)置為false會(huì)返回error
connectionLimit?
連接數(shù)限制,默認(rèn):10
queueLimit?
最大連接請(qǐng)求隊(duì)列限制,設(shè)置為0表示不限制,默認(rèn):0
斷開重連
示例代碼:
var mysql = require('mysql');var db_config = {
host: '127.0.0.1', ? ?
user: 'root',
password:'12345',
port:'3306',
database:'node'};var connection;function handleDisconnect() {
connection = mysql.createConnection(db_config); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
connection.connect(function(err) { ? ? ? ? ? ?
?if(err) { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?console.log('進(jìn)行斷線重連:' + new Date());
? ? ?setTimeout(handleDisconnect, 2000); ? //2秒重連一次
? ? ?return;
?} ? ? ? ?
?console.log('連接成功');
}); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
connection.on('error', function(err) {
?console.log('db error', err); ? ? ? ?if(err.code === 'PROTOCOL_CONNECTION_LOST') {
? ? ?handleDisconnect(); ? ? ? ? ? ? ? ? ? ? ? ?
?} else { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ?throw err; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?}
});
}
handleDisconnect();12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
首先關(guān)閉mysql服務(wù),然后執(zhí)行程序,會(huì)一直打印斷線重連,當(dāng)再次開啟mysql服務(wù)后,打印連接成功。
防止SQL注入
可以使用pool.escape()和connect.escape(),示例代碼:
var mysql = require('mysql');var pool = mysql.createPool({
host: '127.0.0.1', ? ?
user: 'root',
password:'12345',
port:'3306',
database:'node'});function myQuery(sql){
pool.getConnection(function(err,connection){
?connection.query(sql,function(err,result){
? ? ?//console.log(err);
? ? ?console.log(result);
? ? ?connection.release();
?}); ? ? ? ?// connection.query('SELECT * FROM userinfo WHERE id = ' + pool.escape('5 OR ID = 6') ,function(err,result){
?// //console.log(err);
?// console.log(result);
?// connection.release();
?// });
});
}
myQuery('SELECT * FROM seckill WHERE seckill_id = ' + '1006 OR seckill_id = 1007');
myQuery('SELECT * FROM seckill WHERE seckill_id = ' + pool.escape('1006 OR seckill_id = 1007'));123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
結(jié)果可以看出,第1個(gè)query拼接條件可以被執(zhí)行,而通過(guò)escape方法轉(zhuǎn)義后的忽略了后面的拼接的部分!
遇到的問(wèn)題
編碼導(dǎo)致的問(wèn)題?
1366 (HY000): Incorrect string value: ‘\xC3\xEB\xC9\xB1’ for column ‘ExtName’ at row 1?
字符編碼沒(méi)有統(tǒng)一的問(wèn)題,查看數(shù)據(jù)庫(kù)的編碼方式命令為:?
mysql show variables like ‘character%’;?
從以上信息可知數(shù)據(jù)庫(kù)的編碼為latin1,需要修改為gbk或者是utf8;
使用如下語(yǔ)句:
sprintf(sqlstring,"source /home/lijian/copydata.sql");
if(mysql_query(mysql,sqlstring))
{
fprintf(logfile,"error %s:%s\n",sqlstring,mysql_error(mysql));
return 1;
}
首先得看一下你的電腦里是否裝有Mysql.如果有的話可以直接在DOS命令行里輸入查看有關(guān)信息
具體方法
加載Mysql mysqld -install
啟動(dòng)Mysql net start mysql
登陸Mysql mysql -u 主機(jī)名 -r 用戶名 -p 密碼
不建議使用此方法.因?yàn)榧词鼓愕顷懮先ズ蟛榭从嘘P(guān)數(shù)據(jù)庫(kù)信息可視化不強(qiáng).不易操作.
當(dāng)然如果你MYSQL客戶端工具,就更加簡(jiǎn)單了.建議使用NAVICAT如果沒(méi)有可以下一個(gè).使用非常方便..打開客戶端工具.在連接管理處,輸入你的主機(jī)名.用戶名.密碼即可以連接成功
如果還不明白還以再問(wèn)我.
當(dāng)前標(biāo)題:mysql后臺(tái)怎么用 mysql使用
標(biāo)題URL:http://m.newbst.com/article18/docpodp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、外貿(mào)建站、搜索引擎優(yōu)化、云服務(wù)器、靜態(tài)網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
網(wǎng)頁(yè)設(shè)計(jì)公司知識(shí)