-
设计web数据库
-
关系数据库的概念和术语
-
关系数据库由关系组成
- 列
- 行
- 值
-
键
- 主键
- 外键
- 模式
-
关系
- 一对一
- 一对多
- 多对多
-
web数据库的设计
- 考虑要建模的实际对象
-
避免保存沉余数据
- 避免空间浪费
- 导致数据更新不一致
-
避免3种更新不规则情况
- 修改不规则
- 插入不规则
- 删除不规则
-
其他
- 使用原子列值
- 选择有意义的键
- 希望数据库回答什么问题
- 避免多个空属性的设计
-
表格类型的总结
- 描述现实世界对象的简单表
- 描述两个现实世界对象的多对多关系的关联表
- web数据库的架构
-
创建web数据库
- 创建一个数据库
- 设置用户权限
-
权限系统的介绍
- 最少权限原则
-
权限命令
- grant授予mysql用户权限
- revoke取消mysql用户权限
-
权限级别
-
权限类型和级别
- 一般用户的权限
- select
- insert应用表列
- update应用表列
- delete应用表
- index应用表
- alter应用表
- create应用数据库和表
- drop应用数据库和表
- 管理员的权限
- file
- 其他命令,自己百度
- 几个特定的权限
- all
- usage
-
创建数据库表
-
理解其他关键字意思
- NOT NULL
- auto_increment
- primary key
- unsigned
-
理解列的类型
- int
- float
- char
- varchar
- date
-
创建索引
- create ...index...语句创建索引
-
理解mysql的标识符
- datebase
- table
- column
- index
- alias
-
选择mysql中的列类型
-
数字
-
整数型int
- tinyint[(M)]范围-127..128或0-255
- smallint[(m)]范围-32768...32767或0-65535
- mediumint[(m)]范围-8388608...8388607或0-16777215
- int[(M)]范围0-2的32次方-1
- bigint[(M)]范围0-2的64次方-1
-
浮点型float
- float(精度)
- float[(M,D)]
-
日期时间
- date
- time
- datetime
- timestamp
- year
-
字符串
-
普通字符串
- char
- varchar
-
text和blob类型
- text
- tinyblob
- tinytext
- blob或text
- mediumblob或mediumtext
- longblob或longtext
- blob
-
两种特殊类型
- set
- enum枚举
-
使用mysql命令
- 概述
- 登录mysql -h 主机名 -u 用户名 -p
- 创建用户:grant命令
- 收回权限:revoke命令
- 选择数据库表use
-
用show和describe来查看数据库
- 查看数据库
- 查看表
-
使用MySQL数据库
-
SQL是什么
- 数据定义语言DDL
- 数据操作语言DML
-
在数据库中插入数据
-
insert into 表名 [(可选列)] values (值1,值2...)
- low_priority
- delayed
- ignore
-
在数据库中取出数据
- select 字段 from 表名 条件等
-
获取特定条件的数据WHERE
- 等于=
- 大于>
- 小于<
- 大于等于>=
- 不等于!=
- IS NOT NULL
- IS NULL
- BETWEET
- IN
- NOT IN
-
LIKE
- %百分号
- _下划线
- NOT LIKE
- REGEXP
- AND
- OR
-
从多个表中获取数据-关联表
- 两个表关联
- 多个表关联
- 查找不匹配行(左关联)
- 使用表的别名aliases
-
关联的总结
- 笛卡尔乘积(完全关联)
- 交叉关联
- 内部关联
- 等价关联
- 左关联from Aleft joinB on...
- 以特定顺序获取数据
-
分组与合计数据
- avg(字段名)
-
count(项目)
- 如果指定一行
- 如果在列前加distinct
- 如果指定count(*)
- min(列)
- max(列)
- std(列)
- stddev(列)
- sun(列)
- 使用上面方法搭配group by 字段名
- having avg(字段名) > 50
- 选择要返回的行limit 2,3
- 表的连接
-
使用子查询
- 基本的子查询
-
子查询和操作符
-
操作符
- any
- in
- some
- all
- exists
- 关联子查询
- 行子查询
- 使用子查询作为临时表
- 更新数据库中的行记录值
-
创建后修改表结构
- add
- add index
- add ... primary key
- alter {default 值/或drop default}
- change
- modify
- drop
- drop primary key
- drop index
- 还有好多参见page198页
- 删除数据库中的行记录
- 删除表
- 删数据库
-
用PHP从网页访问MYSQL
- web数据库架构的工作原理
-
通过web查询数据库的基本步骤
-
先检查并过滤来自用户的数据
- trim()
- addslashes()
- get_magic_quotes_gpc()
- stripslashes()
- htmlspecialchars(带html标签的字符)
- 然后建立一个数据库连接
- 开始执行查询数据库语句select
- 获取查询结果
- 将结果显示给用户
-
建立数据库连接
- 面向对象方法
- 面向过程方法
-
mysql同时连接数据库数量限制
- mysql的max_connections参数
- apache的maxclients参数
-
选择使用数据库
- mysql命令选择
- 面向对象选择
- 面向过程选择
-
从数据库取回数据
-
选择要使用的数据库
- 面向过程选择
- 面向对象选择
- mysql命令选择
-
查询数据库
- 面向对象查询
- 面向过程查询
-
检索查询结果
-
面向对象检索
- 检索有几个结果
- 返回结果以行显示的关联数组内容
- 返回结果以行显示的列举数字数组内容$row[0][1]....
-
面向过程检索
- 检索有几个结果
- 返回结果以行显示的关联数组内容
- 返回结果以行显示的列举数字数组内容$row[0]...
- 将一行结果取回到一个对象中,比较像mysqli_fetch_row
-
与数据库断开连接
-
面向对象
- 释放结果集free()
- 关闭数据库连接close()
-
面向过程
- 释放结果集free()
- 关闭数据库连接close()
-
在数据库中插入新信息
- 先mysqli对象连接数据库
- 然后$db->query(插入语句)
-
查询与更改插入删除的个别不同
-
insert,update,delect更改影响的结果行
- 面向对象
- 影响的结果行数
- 面向过程
- 影响的结果行数
-
查询select的结果行
- 面向对象
- 影响的结果行数
- 面向过程
- 影响的结果行数
-
使用prepared语句
-
面向对象
- 先定义查询语句$query
- 再用$db->prepare($query)定义查询模版
- $stmt->bind_param(类型,参数1,参数2....)
- $stmt->execute()运行查询返回一个结果集合
- $stmt->affected_rows
-
绑定结果$stmt->bind_result()
- $stmt->fetch()
- 面向过程
- 使用php与数据库交互的其他接口
-
使用常规的数据接口PEAR MDB2
- 连接参数方法名都不一样
- 连接数据库
-
MySQL高级管理
-
深入理解权限系统
-
保存权限信息的6个表
- user
- host
- db
- tables_priv
- columns_priv
- procs_priv
-
这些表包含两个字段
- 范围字段
- 权限字段
-
访问控制:如何使用grant表
- 连接验证
- 请求验证
-
更新权限:修改什么时候生效
- flush privileges
- mysqladmin flush-privileges
- mysqladmin reload
-
提高数据库的安全性
- 从操作系统角度来保护mysql
- 密码
- 用户权限
- web问题
-
获取关于数据库的更多信息
-
使用show获取信息
- show tables
- show databases
- show tables from books
- show columns from books.orders
- show grants for 用户名
- 更多语法查看page224
- 使用describe获取关于列的信息
- explain理解查询操作的工作过程
- 使用索引提高查询速度
-
优化数据库
- 权限最少原则
-
表的优化optimize table 表名
- optimize table 表名
- myisamchk -r table
- 使用索引
- 使用默认值
-
备份和恢复
-
备份数据库
- lock tables table lock_type
- mysql_dump命令备份
- mysqlhotcopy脚本
-
恢复数据库
- 坏了一个表可以修复
- 具体可以自己百度,书中介绍马虎
- 实现复制
-
MySQL高级编程
- load data infile语句
-
储存引擎
- MyISAM默认类型
- InnoDB类型
- MEMORY类型
- MERGE类型
- ARCHIVE类型
- CSV类型
-
事务
-
理解事务的定义
-
ACID原则
- 原子性
- 一致性
- 孤立性
- 持续性
-
通过innodb使用事务
- set autocommit=0
- start transaction
- commit
- rollback
-
外键
- references 表名(字段名)
- 用alter table 表名 add foreign key(id) references 表名(id)
-
储存过程
-
基本示例
- 先delimiter//转换分隔符
-
再创建过程名(出入 参数 类型)
- 创建的是过程的话
- 创建函数function的话
- 开始在begin和end之间写sql语句
- 以//结束不要忘了结束
- 重新delimiter ; 定义分隔符为分号
- 局部变量
- 游标和控制结构