2008年7月31日 星期四
PHP Day 8
EXPLAIN
id
select_type
table
type
possible_keys
key
key_len
ref
rows
Extra
关联优化器
$myisamchk --analyze pathtomysqldatabase/table
$myisamchk --analyze pathtomysqldatabase/*.MYI
$myisamchk --analyze pathtomysqldatabase/*/*.MYI
mysql>analyze table tablename1, tablename2, ...;
将列创建为索引
ALTER TABLE table ADD INDEX (column);
表的优化
mysql>OPTIMIZE TABLE tablename;
$myisamchk -r table
$myisamchk --sort-index --sort-records=1 pathtomysqldatabase/*/*.MYI
备份数据库
1. LOCK TABLES table lock_type [, table lock_type ...]
锁定类型 READE / WRITE,备份之前必须执行 FLUSH TABLES。
*******没明白*******
以文件方式备份
2. $mysqldump --opt --all-databases > backup-file.sql
再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。
*******还是没明白*******
3. $mysqlhotcopy database /path/for/backup
再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。
*******模模糊糊*******
恢复 MySQL 数据库
使用了方法 1,可将数据文件重新复制到安装 MySQL 的相同位置。
使用了方法 2,首先在导出文件中运行查询(???)从而将数据库重新构建至导出时的状态,接着将数据库更新至保存在二进制日志文件中的状态 —— $mysqlbinlog hostname-bin.[0-9]* | mysql
*******没明白*******
先 $mysql db_name < backup-file.sql 将转储文件读回到服务器,然后再更新。
设置主服务器和从服务器,略过
--eof--
p.s.这一章基本没怎么看懂 :sad:
p.s.2 貌似小站被墙了 :shock:
意外发现 WordPress 彩蛋,已经有人发现了 http://www.youtube.com/watch?v=gkF4WLSkz-U
id
select_type
table
type
possible_keys
key
key_len
ref
rows
Extra
关联优化器
$myisamchk --analyze pathtomysqldatabase/table
$myisamchk --analyze pathtomysqldatabase/*.MYI
$myisamchk --analyze pathtomysqldatabase/*/*.MYI
mysql>analyze table tablename1, tablename2, ...;
将列创建为索引
ALTER TABLE table ADD INDEX (column);
表的优化
mysql>OPTIMIZE TABLE tablename;
$myisamchk -r table
$myisamchk --sort-index --sort-records=1 pathtomysqldatabase/*/*.MYI
备份数据库
1. LOCK TABLES table lock_type [, table lock_type ...]
锁定类型 READE / WRITE,备份之前必须执行 FLUSH TABLES。
以文件方式备份
2. $mysqldump --opt --all-databases > backup-file.sql
再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。
3. $mysqlhotcopy database /path/for/backup
再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。
恢复 MySQL 数据库
使用了方法 1,可将数据文件重新复制到安装 MySQL 的相同位置。
使用了方法 2,首先在导出文件中运行查询(???)从而将数据库重新构建至导出时的状态,接着将数据库更新至保存在二进制日志文件中的状态 —— $mysqlbinlog hostname-bin.[0-9]* | mysql
先 $mysql db_name < backup-file.sql 将转储文件读回到服务器,然后再更新。
设置主服务器和从服务器,略过
--eof--
p.s.
意外发现 WordPress 彩蛋,已经有人发现了 http://www.youtube.com/watch?v=gkF4WLSkz-U
标签: 比特志
PHP Day 7
抽象类(abstract class): 不能被实例化.
抽象方法(abstract operation): 只提供了一个方法的声明, 但是不提供方法的具体实现.
包含抽象方法的任何类自身必须是抽象的.
使用 PEAR::DB 抽象类与数据库进行交互
安装: $sudo apt-get install php-pear
检查最新版本: $pear list-upgrades
升级 DB: $sudo pear upgrade DB
require_once('DB.php'); # set for using PEAR DB
$dsn = "mysqli://$user:$pass@$host/$db_name"; # set up DSN
$db = $DB::connect($dsn); # connect to database
与实例化 mysqli 类连接数据库相比其实都差不多.
Prepared 语句向 MySQL 发送需要执行的查询模板, 再单独发送数据.
$query = "insert into table values(?, ?, ...)";
$stmt = $db->prepare($query);
$stmt->bind_param("sssd", $value1, $value2, ...);
$stmt->execute();
$stmt->affected_rows;
除了 bind_param()[insert?] 还有 bind_result() [select?] 函数.
注意! 一定要细心! 下面使用上面的变量, 拼写要正确, 不要想当然 :mrgreen:
抽象方法(abstract operation): 只提供了一个方法的声明, 但是不提供方法的具体实现.
包含抽象方法的任何类自身必须是抽象的.
使用 PEAR::DB 抽象类与数据库进行交互
安装: $sudo apt-get install php-pear
检查最新版本: $pear list-upgrades
升级 DB: $sudo pear upgrade DB
require_once('DB.php'); # set for using PEAR DB
$dsn = "mysqli://$user:$pass@$host/$db_name"; # set up DSN
$db = $DB::connect($dsn); # connect to database
与实例化 mysqli 类连接数据库相比其实都差不多.
Prepared 语句向 MySQL 发送需要执行的查询模板, 再单独发送数据.
$query = "insert into table values(?, ?, ...)";
$stmt = $db->prepare($query);
$stmt->bind_param("sssd", $value1, $value2, ...);
$stmt->execute();
$stmt->affected_rows;
除了 bind_param()[insert?] 还有 bind_result() [select?] 函数.
注意! 一定要细心! 下面使用上面的变量, 拼写要正确, 不要想当然 :mrgreen:
标签: 比特志
2008年7月28日 星期一
PHP Day 6
设计 Web 数据库
列(Column), 又称域或属性.
行(row), 也称为记录.
表中的标志列称为键(key), 一个键可以由不止一列组成. 主键(primary key)和外键(foreign key). 考虑要建模的实际对象, 避免保存冗余数据(避免 3 种更新不规则: 修改, 插入, 删除). 使用原子列值, 每行的每个属性只储存一个数据. 确认所选择的键是唯一的, 要有意义, 事先考虑需要询问数据库的问题. 避免空属性的设计.
Web 数据库架构, 暂不讨论.
---------------------------------------------------------------
创建 Web 数据库(仅学习 MySQL 数据库)
登录 MySQL Monitor: $mysql -h hostname -u username -p
-h 希望连接的主机, 默认为本机(localhost)
-u 登录时的用户名(可以不是 root)
-p 提示需要密码
创建 root:
$mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');
删除匿名用户:
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
创建数据库: mysql> create database dbname;
(注意, 不能忘记分号!)
创建用户(最少权限原则):
GRANT privileges [columns]
ON item
TO user_name [IDENTIFIED BY 'password']
[REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options] ]
用户权限(PMWD3rd P164), 管理员权限(PMWD3rd P164), 特别权限(ALL, USAGE).
收回权限:
REVOKE privileges [columns]
ON item
FROM user_name
使用指定数据库:
mysql> use dbname;
或者
$mysql -D dbname -h hostname -u username -p
---------------------------------------------------------------
创建数据库表, 略过. :mrgreen:
---------------------------------------------------------------
插入数据(INSERT):
INSERT LOW_PRIORITY DELAYED IGNORE [INTO] table [(column1, ...)] VALUES (value1, ...);
注意: 会按顺序插入数据.
向指定列插入数据:
insert into tablename (column1, column2, ...) values ('value1', 'value2', ...);
或者
insert into tablename set column1='value1', column2='value2', ...;
将脚本插入数据库:
$mysql -h host -u username -p < name_insert.sql
---------------------------------------------------------------
获取数据(SELECT):
略过. :mrgreen:
---------------------------------------------------------------
更新数据库记录:
UPDATE
创建后修改表:
ALTER TABLE
删除:
DELETE
DROP
--eof--
列(Column), 又称域或属性.
行(row), 也称为记录.
表中的标志列称为键(key), 一个键可以由不止一列组成. 主键(primary key)和外键(foreign key). 考虑要建模的实际对象, 避免保存冗余数据(避免 3 种更新不规则: 修改, 插入, 删除). 使用原子列值, 每行的每个属性只储存一个数据. 确认所选择的键是唯一的, 要有意义, 事先考虑需要询问数据库的问题. 避免空属性的设计.
Web 数据库架构, 暂不讨论.
---------------------------------------------------------------
创建 Web 数据库(仅学习 MySQL 数据库)
登录 MySQL Monitor: $mysql -h hostname -u username -p
-h 希望连接的主机, 默认为本机(localhost)
-u 登录时的用户名(可以不是 root)
-p 提示需要密码
创建 root:
$mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');
删除匿名用户:
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
创建数据库: mysql> create database dbname;
(注意, 不能忘记分号!)
创建用户(最少权限原则):
GRANT privileges [columns]
ON item
TO user_name [IDENTIFIED BY 'password']
[REQUIRE ssl_options]
[WITH [GRANT OPTION | limit_options] ]
用户权限(PMWD3rd P164), 管理员权限(PMWD3rd P164), 特别权限(ALL, USAGE).
收回权限:
REVOKE privileges [columns]
ON item
FROM user_name
使用指定数据库:
mysql> use dbname;
或者
$mysql -D dbname -h hostname -u username -p
---------------------------------------------------------------
创建数据库表, 略过. :mrgreen:
---------------------------------------------------------------
插入数据(INSERT):
INSERT LOW_PRIORITY DELAYED IGNORE [INTO] table [(column1, ...)] VALUES (value1, ...);
注意: 会按顺序插入数据.
向指定列插入数据:
insert into tablename (column1, column2, ...) values ('value1', 'value2', ...);
或者
insert into tablename set column1='value1', column2='value2', ...;
将脚本插入数据库:
$mysql -h host -u username -p < name_insert.sql
---------------------------------------------------------------
获取数据(SELECT):
略过. :mrgreen:
---------------------------------------------------------------
更新数据库记录:
UPDATE
创建后修改表:
ALTER TABLE
删除:
DELETE
DROP
--eof--
标签: 比特志
Dict in Ubuntu
最近经常上英文网站,本来一直使用 Baidu 内嵌的 Dr.eye,后来发现不太方便于是安装了 dict.cn 的网页划词。但这两天 dict.cn 的服务器似乎有问题,老是查不到词汇(而且使用在线划词会把 firefox 搞死……)。于是乎上网查了一下,发现在 Linux 上可以用 terminal 查单词,除了没发音该有的都有。
实际上用的是 dict 开放协议。
最后使用 $dict word 就可以查单词了,退出按 Q 键。
参考:http://blog.cathayan.org/item/1715
p.s. 今早遇到件特不愉快的事
实际上用的是 dict 开放协议。
$sudo apt-get install dict #客户端 (在 /etc/dictd/dict.conf 注释掉服务器,让其只使用本地读字典)
$sudo apt-get install dictd #服务器端
$sudo apt-get dict-xdict dict-stardic dict-gcide #三个字典文件
最后使用 $dict word 就可以查单词了,退出按 Q 键。
参考:http://blog.cathayan.org/item/1715
p.s. 今早遇到件特不愉快的事
标签: 设技志
2008年7月26日 星期六
PHP Day 5
就着教程和 PHP Manual 磕磕绊绊把 PHP 的基础知识了解了一遍(只能算是了解)。
没想到在最后又被卡了一下——Object Iteration。我始终没明白 Iterator 的处理机制,也没理解 IteratorAggregate 和 Iterator 的区别。在 Google 上大概查了下,貌似都是 Manual 的拷贝,所以只能先把这块儿放下。
教程和 Manual 相比各有千秋吧,Manual 的实效性当然是最棒的,上面的例子也比教程的简单一些。不过 Manual 说到底还是有些干巴。另外语言也是一道不宽不窄的障碍,如果英语再好一些也许就可以放下教程,User Contributed Notes 更有人情味 :mrgreen:
接下来还是打算跟着教程走(PHP Manual 上不会有 MySQL 手册吧 :grin: ),学习有关数据库的知识。
就先这么计划了,也不知道这个速度快不快,我是觉得自己有点心急,嗯欲速则不达,心态平和。
update:迭代器好像是把 foreach 的实现方法一步一步展示出来,只是不知道迭代器的流程怎么这么怪。
没想到在最后又被卡了一下——Object Iteration。我始终没明白 Iterator 的处理机制,也没理解 IteratorAggregate 和 Iterator 的区别。在 Google 上大概查了下,貌似都是 Manual 的拷贝,所以只能先把这块儿放下。
教程和 Manual 相比各有千秋吧,Manual 的实效性当然是最棒的,上面的例子也比教程的简单一些。不过 Manual 说到底还是有些干巴。另外语言也是一道不宽不窄的障碍,如果英语再好一些也许就可以放下教程,User Contributed Notes 更有人情味 :mrgreen:
接下来还是打算跟着教程走(PHP Manual 上不会有 MySQL 手册吧 :grin: ),学习有关数据库的知识。
就先这么计划了,也不知道这个速度快不快,我是觉得自己有点心急,嗯欲速则不达,心态平和。
update:迭代器好像是把 foreach 的实现方法一步一步展示出来,只是不知道迭代器的流程怎么这么怪。
标签: 比特志
2008年7月25日 星期五
PHP Day 4
从下篇起不再使用首字下沉(first-letter 伪类应该不被 IE6 支持吧 :mrgreen: )。
$c = new myClass;
在以前的 PHP 版本中可以这样创建一个新类并将该类的实例复制给 $c?这样做的坏处是“假设对象是按引用传递对象的,尤其是在向函数传递对象时,这种行为可能会导致问题”,会导致什么问题?这句话貌似在逻辑上有问题,例子明明是按值传递对象的么。
select_object()->display();
“select_object()方法返回了一个具有display()方法的对象”——“属性可以与成员变量和特性这些词交替使用,操作也可以与方法交替使用”——我恨交替使用。
类的设计——看代码能明白,自己写又忘了 :sad:
标签: 比特志
2008年7月24日 星期四
PHP Day 3
我知道困难就在不远处,只是没想到来的这么快。
遇到的第一个难点是“递归函数”,所谓递归函数就是函数自己调用自己,概念很简单,但要理解却是另外一回事儿了。十分感谢 fcicq 的指导,同时也感谢他告诉我一个新的天地 :mrgreen:
第二个难点是刚刚碰到的,面向对象。这玩意儿比递归函数抽象多了,而且我之前也没有接触过面向功能、面向过程,也就无从知晓这个“面向对象”的好处。由面向对象又引出了很多新鲜概念(于我而言),到了“类”又卡壳半天,然后是如何访问属性。不明白为什么从类的外部直接访问类的属性不好,也就不明白什么是“封装”。
好吧,睡觉,明见 :!:
update:
嗯,重看一遍果然有所收获,虽然还是不太明白面向对象的好处,但感觉对数据的使用确实方便不少。
原来很简单就可以实现对属性和操作的调用,昨天晚上咋就没明白捏。
看来需要找一些基础理论来看看了 :grin:
标签: 比特志
2008年7月23日 星期三
PHP Day 2
虽然学习速度不是很快,但自己感觉还是有很大收获。PHP 的确不难学,当然到目前为止我只是学习了一些基本的函数,明天进入简单的函数编写单元。我想最大的问题是如何把这些函数记住,现在能想到的办法就是去查 manual。
另外,vim 是一个很不错的编辑器,如果加上自动闭合、每段可以折叠就更好了~

p.s.原来正则表达式在某些时候比字符串函数效率要低啊,看来对什么都不可迷信 :wink:
标签: 比特志
2008年7月19日 星期六
第一个实例
PHP Day 1
以前总想一步登天,结果发现死的比较难看。
Vim算马马虎虎上手了,20 分钟前才学会复制。对自己的记忆力表示强烈质疑,或者是条件反射训练不够?
书是 05 年出的,照着书动手抄了第一个实例——Bob's Auto Parts,结果被 fcicq 同学发现 XSS,我就无语了。从小学到大学还有很长的路要走啊。
标签: 比特志
订阅 帖子 [Atom]
