August 1, 2008 – 10:59 am
LOAD DATA INFILE
LOAD DATA INFILE “filename.txt” INTO TABLE tablename;
字段包括在单引号内,用 tab 键进行间隔,每行由 \n 换行,特殊字符用 \ 转义。
存储引擎
MyISAM(MySQL 默认)
ISAM
MEMORY
MERGE
BDB
InnoDB
用 ALTER TABLE 语句转换,比如:
alter table tablename type=innodb;
事务安全性的四个需求(ACID 原则):Atomicity, Consistency, Isolation, Durability。
MySQL 默认为 autocommit 模式。
mysql>set autocommit=0; #关闭 autocommit
在自动提交打开前提下开始事务:
mysql>start transaction;
完成后手动提交:
mysql>commit;
回滚:
mysql>rollback;
InnoDB 支持强制使用 foreign key。
创建存储过程 create procedure
设置分隔符 delimiter …
调用过程 call procedurename(@t);
查看该变量 select @t;
创建函数 create function
局部变量 declare variablename
游标(cursor)
控制结构
声明句柄
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,可将数据文件重新复制到安装 [...]
抽象类(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 [...]
设计 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’ = [...]
就着教程和 PHP Manual 磕磕绊绊把 PHP 的基础知识了解了一遍(只能算是了解)。
没想到在最后又被卡了一下——Object Iteration。我始终没明白 Iterator 的处理机制,也没理解 IteratorAggregate 和 Iterator 的区别。在 Google 上大概查了下,貌似都是 Manual 的拷贝,所以只能先把这块儿放下。
教程和 Manual 相比各有千秋吧,Manual 的实效性当然是最棒的,上面的例子也比教程的简单一些。不过 Manual 说到底还是有些干巴。另外语言也是一道不宽不窄的障碍,如果英语再好一些也许就可以放下教程,User Contributed Notes 更有人情味
接下来还是打算跟着教程走(PHP Manual 上不会有 MySQL 手册吧 ),学习有关数据库的知识。
就先这么计划了,也不知道这个速度快不快,我是觉得自己有点心急,嗯欲速则不达,心态平和。
update:迭代器好像是把 foreach 的实现方法一步一步展示出来,只是不知道迭代器的流程怎么这么怪。
从下篇起不再使用首字下沉(first-letter 伪类应该不被 IE6 支持吧 )。
$c = new myClass;
在以前的 PHP 版本中可以这样创建一个新类并将该类的实例复制给 $c?这样做的坏处是“假设对象是按引用传递对象的,尤其是在向函数传递对象时,这种行为可能会导致问题”,会导致什么问题?这句话貌似在逻辑上有问题,例子明明是按值传递对象的么。
select_object()->display();
“select_object()方法返回了一个具有display()方法的对象”——“属性可以与成员变量和特性这些词交替使用,操作也可以与方法交替使用”——我恨交替使用。
类的设计——看代码能明白,自己写又忘了
我知道困难就在不远处,只是没想到来的这么快。
遇到的第一个难点是“递归函数”,所谓递归函数就是函数自己调用自己,概念很简单,但要理解却是另外一回事儿了。十分感谢 fcicq 的指导,同时也感谢他告诉我一个新的天地
第二个难点是刚刚碰到的,面向对象。这玩意儿比递归函数抽象多了,而且我之前也没有接触过面向功能、面向过程,也就无从知晓这个“面向对象”的好处。由面向对象又引出了很多新鲜概念(于我而言),到了“类”又卡壳半天,然后是如何访问属性。不明白为什么从类的外部直接访问类的属性不好,也就不明白什么是“封装”。
好吧,睡觉,明见
update:
嗯,重看一遍果然有所收获,虽然还是不太明白面向对象的好处,但感觉对数据的使用确实方便不少。
原来很简单就可以实现对属性和操作的调用,昨天晚上咋就没明白捏。
看来需要找一些基础理论来看看了