-
一切皆有不可能!
2008-09-30
不可能会想到汽车以1公里每小时的速度行驶在宽阔的八达岭高速上。
不可能想到到京郊的家民兄弟,开口闭口只谈钱。一个人一个心眼。太毒啦。。。
从北京到康西要四个小时,不可能?没有不可能。
在康西草原一切皆有不可能。
-
关于MySQL事务处理学习记
2008-09-19
关于MySQL事务处理学习记
START TRANSACTION, COMMIT和ROLLBACK语法
START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}START TRANSACTION或BEGIN语句可以开始一项新的事务。COMMIT可以提交当前事务,是变更成为永久变更。ROLLBACK可以 回滚当前事务,取消其变更。SET AUTOCOMMIT语句可以禁用或启用默认的autocommit模式,用于当前连接。
自选的WORK关键词被支持,用于COMMIT和RELEASE,与CHAIN和RELEASE子句。CHAIN和RELEASE可以被用于对事务完成进行附加控制。Completion_type系统变量的值决定了默认完成的性质。
AND CHAIN子句会在当前事务结束时,立刻启动一个新事务,并且新事务与刚结束的事务有相同的隔离等级。RELEASE子句在终止了当前事务后,会让服务器断开与当前客户端的连接。包含NO关键词可以抑制CHAIN或RELEASE完成。如果completion_type系统变量被设置为一定的值,使连锁或释放完成可以默认进行,此时NO关键词有用。
默认情况下,MySQL采用autocommit模式运行。这意味着,当您执行一个用于更新(修改)表的语句之后,MySQL立刻把更新存储到磁盘中。
如果您正在使用一个事务安全型的存储引擎(如InnoDB, BDB或NDB簇),则您可以使用以下语句禁用autocommit模式:
SET AUTOCOMMIT=0;
通过把AUTOCOMMIT变量设置为零,禁用autocommit模式之后,您必须使用COMMIT把变更存储到磁盘中,或着如果您想要忽略从事务开始进行以来做出的变更,使用ROLLBACK。如果您想要对于一个单一系列的语句禁用autocommit模式,则您可以使用START TRANSACTION语句:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
使用START TRANSACTION,autocommit仍然被禁用,直到您使用COMMIT或ROLLBACK结束事务为止。然后autocommit模式恢复到原来的状态。BEGIN和BEGIN WORK被作为START TRANSACTION的别名受到支持,用于对事务进行初始化。START TRANSACTION是标准的SQL语法,并且是启动一个ad-hoc事务的推荐方法。BEGIN语句与BEGIN关键词的使用不同。BEGIN关键词可以启动一个BEGIN...END复合语句。后者不会开始一项事务。
您也可以按照如下方法开始一项事务:
START TRANSACTION WITH CONSISTENT SNAPSHOT;
WITH CONSISTENT SNAPSHOT子句用于启动一个一致的读取,用于具有此类功能的存储引擎。目前,该子句只适用于InnoDB。该子句的效果与发布一个START TRANSACTION,后面跟一个来自任何InnoDB表的SELECT的效果一样。请参见15.2.10.4节,“一致的非锁定读”。
开始一项事务会造成一个隐含的UNLOCK TABLES被执行。
为了获得最好的结果,事务应只使用由单一事务存储引擎管理的表执行。否则,会出现以下问题:
如果您使用的表来自多个事务安全型存储引擎(例如InnoDB和BDB),并且事务隔离等级不是SERIALIZABLE,则有可能当一个事务提交时,其它正在进行中的、使用同样的表的事务将只会发生由第一个事务产生的变更。也就是,用混合引擎不能保证事务的原子性,并会造成不一致。(如果混合引擎事务不经常有,则您可以根据需要使用SET TRANSACTION ISOLATION LEVEL把隔离等级设置到SERIALIZABLE。)
如果您在事务中使用非事务安全型表,则对这些表的任何变更被立刻存储,不论autocommit模式的状态如何。
如果您在更新了事务中一个事务表之后,发布一个ROLLBACK语句,则会出现一个ER_WARNING_NOT_COMPLETE_ROLLBACK警告。对事务安全型表的变更被 回滚,但是对非事务安全型表没有变更。
每个事务被存储在一个组块中的二进制日志中,在COMMIT之上。被回滚的事务不被计入日志。(例外情况:对非事务表的更改不会被 回滚。如果一个被回滚的事务包括对非事务表的更改,则整个事务使用一个在末端的ROLLBACK语句计入日志,以确保对这些表的更改进行复制。)
您可以使用SET TRANSACTION ISOLATION LEVEL更改事务的隔离等级。
回滚可以慢速运行。在用户没有明确要求时,也可以进行回滚(例如,当错误发生时)。因此,在明确地和隐含的(ROLLBACK SQL命令)回滚时,SHOW PROCESSLIST会在Stage列中显示Rolling back,用于连接。
-
放过屁的请举手!
2008-09-18
-
php,服务器端用数据库存储session实例!
2008-09-12
费话不说,代码说话!
配置文件config.php
<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'success';?>
数据库及数据表session.sql
CREATE DATABASE success;
USE success;
DROP TABLE IF EXISTS `sess`;
CREATE TABLE `sess` (
`sess_id` varchar(255) character set latin1 collate latin1_bin NOT NULL default '',
`sess_expires` int(10) unsigned NOT NULL default '0',
`sess_data` text,
PRIMARY KEY (`sess_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;SESSION处理类,以及在最面的实例
<?php
/**
* @Date 2008/09/12
*
* @Author genghonghao@gmail.com
*
* @About SESSION 处理类
*
*/
include_once 'config.php';
define('BB_DBHOST', $dbhost);
define('BB_DBUSER', $dbuser);
define('BB_DBPASS', $dbpass);
define('BB_DBNAME', $dbname);
define('BANKBONE_SESS_NAME', 'backbone');
class Database {
private $connect;
public function __construct() {
$this->connect = mysql_connect(BB_DBHOST, BB_DBUSER, BB_DBPASS);
mysql_select_db(BB_DBNAME, $this->connect);
}
public function query($sql) {
$query = mysql_query($sql) or die("Invalid query: " . mysql_error());
return $query;
}
public function get_result($sql) {
$query = $this->query($sql);
$result = mysql_fetch_assoc($query);
return $result;
}
public function get_num_rows($sql) {
$result = $this->query($sql);
$num_rows = mysql_num_rows($result);
return $num_rows;
}
public function affected_rows() {
return mysql_affected_rows();
}
public function close() {
@mysql_close($this->connect);
}
}
class BackboneSession extends Database{
public $lifetime;
function open($save_path, $sess_name) {
$this->lifetime = empty($this->lifetime) ? get_cfg_var("session.gc_maxlifetime") : $this->lifetime;
parent::__construct();
return true;
}
function close() {
$max_life_time = empty($this->lifetime) ? ini_get('session.gc_maxlifetime') : $this->lifetime;
$this->gc($max_life_time);
return parent::close();
}
function read($sess_id) {
$res = "SELECT sess_data AS d FROM sess WHERE sess_id = '$sess_id' AND sess_expires > ".time();
$result = parent::get_result($res);
$result = $this->result;
if($result['d']) {
return $result['d'];
}
return "";
}
function write($sess_id,$sess_data) {
$new_exp = time() + $this->lifetime;
if(parent::get_num_rows("SELECT * FROM sess WHERE sess_id = '$sess_id'")) {
$sql = "UPDATE sess SET sess_expires = '$new_exp', sess_data = '$sess_data' WHERE sess_id = '$sess_id'";
parent::query($sql);
if(parent::affected_rows())
return true;
}
else {
$sql = "INSERT INTO sess ( sess_id, sess_expires, sess_data) VALUES( '$sess_id', '$new_exp', '$sess_data')";
parent::query($sql);
if(parent::affected_rows())
return true;
}
return false;
}
function destroy($sess_id) {
parent::query("DELETE FROM sess WHERE sess_id = '$sess_id'");
if(parent::affected_rows())
return true;
return false;
}
function gc($sess_max_life_time) {
$sql = "DELETE FROM sess WHERE sess_expires < ".time();
parent::query($sql);
return parent::affected_rows();
}
}
$session = new BackboneSession();
$session->lifetime = 3600;
session_set_save_handler(array(&$session,"open"),
array(&$session,"close"),
array(&$session,"read"),
array(&$session,"write"),
array(&$session,"destroy"),
array(&$session,"gc"));
if (ini_get('session.auto_start') == true && session_name() != BANKBONE_SESS_NAME) {
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
session_name(BANKBONE_SESS_NAME);
}
session_unset();
@session_destroy();
}
ini_set('session.use_cookies', true);
ini_set('session.use_only_cookies', false);
ini_set('session.use_trans_sid', false);
ini_set('session.cookie_lifetime', 0);
@session_name(BANKBONE_SESS_NAME);
session_start();
if (!isset($_SESSION[' backbone_token '])) {
$_SESSION[' backbone_token '] = md5(uniqid(rand(), true));
}
// 注销一个会话
if($_GET['action'] == 'logout') {
$_SESSION = array();
if(isset($_COOKIE[session_name()])) {
setcookie(session_name(), time()-1000);
}
session_destroy();
}
// 生成一个会话
if($_GET['action'] == 'login') {
$_SESSION['username'] = "xuewu";
$_SESSION['userid'] = 1;
$_SESSION['valid'] = 1;
var_dump($_SESSION);
echo session_name()."|".session_id();
}
?>
-
下雨天尿尿,天尿我也尿!
2008-09-10
1,天灰蒙蒙滴,公组织俺们去兴城。
2,俺们躲在海水里一边游泳一边撒尿。
3,海天相接的地方越看越宽广。
4,建松是个追梦人,没有放弃梦想。就会轻意成功。
5,日子过的松紧无度。百无聊赖。
6,挣钱吧。
-
无命题。
2008-08-27
9,巴西,和美国你更喜欢谁。朕喜欢奔腾的美国。
3,龌龊的事情我们都有染指的可能,但深度却完全不同。
5,后天要去辽宁了,不知道第一次见到大少海会是个什么样子。
6,队列是被叫作QUEUE的家伙,阿佟的意思是里边放四个进程。
1,BODY是知识,HEADER是头脑和路子。那么HEADER比BODY重要。
0,又想看《天龙八部》了,一个晚上打十个电话或许不是个死命令。
-
短暂!
2008-08-25
1,博客写了二年半了,看上时间还是很短暂。
2,买了一本《西藏秘密1》和一本《时间管理》
-
难念的经!!!
2008-08-24
天龙八部主题曲
周华建
笑你我枉花光心计
爱竞逐镜花那美丽
怕幸运会转眼远逝
为贪嗔喜恶怒着迷
责你我太贪功恋势
怪大地众生太美丽
悔旧日太执信约誓
为悲欢哀怨妒着迷
啊~啊~舍不得璀灿俗世
啊~啊~躲不开痴恋的欣慰
啊~啊~找不到色相代替
啊~啊~参一生参不透这条难题
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬
笑你我枉花光心计
爱竞逐镜花那美丽
怕幸运会转眼远逝
为贪嗔喜恶怒着迷
责你我太贪功恋势
怪大地众生太美丽
悔旧日太执信约誓
为悲欢哀怨妒着迷
啊~啊~舍不得璀灿俗世
啊~啊~躲不开痴恋的欣慰
啊~啊~找不到色相代替
啊~啊~参一生参不透这条难题
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬
吞风吻雨葬落日未曾彷徨
欺山赶海践雪径也未绝望
拈花把酒偏折煞世人情狂
凭这两眼与百臂或千手不能防
天阔阔雪漫漫共谁同航
这沙滚滚水皱皱笑着浪荡
贪欢一刻偏教那女儿情长埋葬 -
伟大的埃蒙斯!
2008-08-21
1,埃蒙斯的每一次失败都显的那么不可思议,但他仍旧保持了微笑。
2,埃蒙斯是以一个心态相当好的超人。我们应该记住他。
3,中国举重队也有一个超人,他叫张国政。他最耀眼的时刻是在2004年的雅典。他永远都不曾放弃过梦想。
4,梦--不是重复而是创新。梦不应该缩小而应该放大。梦,是坚持出来的。
5,...................
-
赞!
2008-08-20
1,很久没有写博客了,朕要和你大战一场。
2, 感谢刘翔,激发我独立思考的勇气。
3,鸟巢输给了水立方。
4,韩小胖越来越粗鲁了,也越来越傻了。
5,亿邮是个很棒的公司,我已经为她工作快两年了。
6,在地铁上消耗时间比他妈工作还累。
7,palm650越强大就越不稳定。
8,如果google android 系统的手机上市说,老子的PALM650将要下岗。
9,随着年龄的增长,朕也变的越来越保守了。
10,经验的增长总是伴随着激情的消失。
11,如果有了孩子,我的生活会变的多无聊。
12,公司再处理电脑了,搬到家里一台,当服务器用。
13,明天要弄六张电影票,谢天谢地,谢谢韩小胖。







