一,基于数据库的PHP项目
目前的动态网站都是基于数据库的,将网站内容使用数据库管理系统去管理用户,栏目,图片,文章,评论都存储在数据库中
比如
XSCMS库
users
clumn
pic
articles
commention
二,为什么使用MySQL?
Oracle,DB2,SQL Server,……
MySQL-----开源
表结构
中小型项目
三,MySQL架构
C/S结构
3306 MySQL的默认端口
MySQL DBMS
客户端
服务器端----数据库----数据表----(记录,字段)
四,PHP程序员主要学习哪些操作
·为你的项目设计表
·如何使用SQL语句增删改查
程序中用不到的都可以使用工具完成
五,MySQL的安装和启动
和PHP整合
Linux下的启动
service mysqld stop
service mysqld start
service mysqld restart
六,MySQL的目录结构
配置文件----my.ini
文件夹bin----命令
文件夹data-----存储数据库
在data文件夹下创建一个文件夹就是创建一个数据库
七,了解数据库的MySQL语句操作
DDL
定义和管理数据对象(库,表,视图,索引)
CREATE DROP ALTER
创建库
create database if not exists test
删除库
drop database if exists test
创建表
create table databaseName.tableName
删除表
drop table databaseName.tableName
DML
对数据操纵,和表中的数据记录有关
INSERT UPDATE DELETE
insert into users(colName,...) values(colValue,...);
插入表数据
insert into tableName([字段列表]) values(值列表1),(值列表2),(值列表3);
特点:
如果在表名后没有给出字段列表,则值列表要列出所有字段的值,必须按默认的顺序
所有需要写字段名的地方,都不要加单引号或双引号,但所有的值都要使用单引号或双引号(建议,MySQL可以自动转换)
再插入数据时,最好给出字段列表,则值要和字段列表对象即可,可以不按表中的字段的顺序
修改表数据
update 表名 set 字段=‘值’[,字段2=‘值‘,...][条件] 条件是确定要更改的记录,可以通过条件指定一条,也可以指定多条
update cats set id=id-1 where id >= 8;
delete from 表名 [条件]
注意:没有条件,会更改/删除整个表
delete from tableName;//删除表
truncate tableName;//删除表,效率更高
只要你想更新,删除,查找,只要写对条件就能准确找到要管理的一条或多条语句
DQL
SELECT
查询
select [all|distinct]{*|table.*|[table.]field1[as alias1][ 其他字段]}
from 表名
[where ]
[group by]
[order by]
[having]
[limit count]
使用select语句,目的就是可以按照你的想法将数据查出来,将结果返回给你
1,字段要列出要查询的字段
2,可以为每一个字段用as起一个别名,(关键字冲突,多表查询时)
3,DISTINCT针对整个查询列表取消相同的记录
4,在SQL语句中,使用表达式的列(算数运算符号,逻辑运算符号,条件)
5,where 可以在select,update,delete中
逻辑运算符(多个条件组合)
&& || !
AND OR not
比较运算符
=(<=>) 和程序中不一样 ,<=> 可以比较空值,而=不可以比较空值,如name=null,这个将查不出来,而name<=>null 则可以查出来
!=(<>)
<
>
>=
<=
is NULL
is not null
SQL中所用: between…and 连续的取值区间
not between and
like 模糊查询 _和%两个通配符 _ 任意一个字符 % 0个或多个字符
not like
in 单个检索 select * from products where id in(5,10,20,25,30);
regexp rlike 模糊查询 正则表达式
6,多表查询(连接查询)
7,嵌套查询
select … where(select ……)
8,order by 字段[desc|sac] 排序
desc 倒序
多个字段查询必排序
9,limit num
限制查询数量
limit num1,num2//从num1取,取num2个
10,group by ziduanNanme
count() sum() avg() max() min()
11,Having 给出分组的条件
每一个组的条件,having avg(price) > 50;
having 要在group by 后使用
DCL
数据控制,管理权限和数据更改
GRANT,REVOKE,COMMIT,ROLLBACK
use tes1;//转到一个数据库中
desc tableName; //查看表结构
MySQL示弱类型,创建时使用字符串操纵,进入数据库时会自动转换成相对应的类型
\s 看数据库状态
show databases 看所有库
show tables 看所有表
show variables 配置文件的变量
desc tableName 看表结构
帮助的使用
?contents
1,执行SQL语句,连接数据库服务器
mysql -h localhost -u root -ppassword //-p是不可少的,不是密码的部分
show variables;查询所有的变量
show variables like ‘part‘;
show databases;//查看库
create database test; 创建库
drop database test;//删除库
2 创建数据库
3 选择默认数据库
use databaseName
创建数据表
1,什么是数据表
记录+字段
2,创建数据表的SQL
DDL语句
CAREATE TABLE [IF NOT EXISTS]tableName(
字段名1 列类型[属性][索引]
字段名2 列类型[属性][索引]
...
字段名n 列类型[属性][索引]
)[表类型][表字符集];
中括号中的都是可选类型
3,数据值和类型
·数值型
整型
1字节 TINYINT
2字节 SMALLINT
3字节 MEDIUMINT
4字节 INT
8字节 BIGINT
浮点型
4字节 float(M,D) M 总共占据的位数 D 保留的小数位位数
8字节 double(M,D)
M+2字节 定点数decimal(M,D)
·字符串
声音,图像,图片等二进制数据
char(M) 255字符 固定长度
vchar(M) 255字符 可变长度
char固定长度,处理速度块,缺点会浪费空间,char在连接时会去掉末尾的空格
vchar 值变化大
text 文本数据(文章) 2e16-1字节
MEDIUMTEXT 2E24-1
LONGTEXT
注意:varchar的文本不支持换行,而text类型支持换行
blob 保存二进制,照片,压缩数据
MEDIUMBLOB
LONGBLOB
enum 枚举类型 1-2字节 ----65535个成员
一次只能用enum中的一个值
例:存储enum(‘男’,‘女’)
set 集合类型 1,2,3,4,8字节-----64个成员
一次可以使用集合中的多个值
·日期型
DATE
YYYY-MM-DD
TIME
hh:mm:ss
DATETIME
YYYY-MM-DD hh:mm:ss
TIMESTAMP
YYYYMMDDhhmmss
YEAR
YYYY
时间的存储形式如上所示
存储的时间一定要注意格式
创建表时最好不要使用这些中的时间格式(PHP时间戳 1970-1-1 0:0:0)
用整数保存时间 (PHP中的time())
·NULLphpMyAdmin
4,数据字段属性
·unsigned 设置无符号的类型,可以使空间增加一倍
只能用在数值型字段
·zerofill 只能用在数值型字段,在数值数据前加入前导,该字段会自动加上无符号
·AUTO_INCREMENT
只能是整数,数据每增加一条就值自动增加1
字段值不允许重复
此字段留空,null,0,都会使此字段自动增加1
如果自己手动增长,要>=最大值
·NULL 和 NOT NULL
默认是空,时间戳除外
将来将这个表转为PHP程序的数据时,整数列有NULL 能转为0吗?字符串中有NULL 能转成0吗--------------------不一定
建议:在创建表时每一个字段都不要插入null
·default
缺省值
例:创建一个用户表
create table users(
id int unsigned not nullauto_increment primary key,
name varchar(30) not null default ‘‘,
height double(10,2) not null default 0.00,
age int not null default 0,
sex char(4) not null default ‘男‘
);
5,创建索引
通常是为了查询,确保数据的唯一性
1,主键索引
主要是确定一条特定记录的位置,
最好为每一张表定义一个主键
一个表只能只能指定一个主键
主键的值不能为空
可以有多个候选索引
primary key 指定主键
2,唯一索引
都可以防止创建重复的值
每一个表都可以有多个唯一索引
unique
作用,为了防止数据的重复1111111111111111111
3,常规索引
最重要的技术
提升数据库的性能
索引优化要优先考虑常规索引
1111111111111111111
22222222222
3333333333333
............
999999999999999999
共几百万条数据
缺点:占用磁盘空间
可以提高查找速度,但会减慢数据列上的插入,删除,修改
不要试图为每一列创建索引
技巧: Alter table tableName add columnName 类型 属性
分表,创建索引的为一个表,不创建索引的为一个表
需要条件搜索的,需要条件分组的,需要条件排序的,这样的列可以使用常规索引,但不要太多,要适可而止
可以单独使用,也可以在创建表时创建,索引是一个独立的对象
create index indexname on tableName(字段);
drop index indexname on tableName
index key 是同义词
单列多列都可以
4,全文索引
fulltext类型索引,MyISAM表类型上使用,只有在varchar char text文本字符串上使用,也可以在多个数据列上使用
把某个数据表中的某个数据列中出现的所有单词生成一个清单
6,表类型及存储位置
MySQL与大多数数据库不同,MySQL有一个存储引擎的概念
MySQL可以针对不同的数据引擎需求可以选择最优的存储引擎
引擎 数据表类型(查询 show engines)
我们只学12个中的MyISAM和InnoDB两个
create table () type InnoDB;
create table () engine InnoDB;
MyISAM是默认的
根据不同的需求选择不同的存储引擎
注意:在一个MySQL库中可以(创建表时)指定不同的表类型
MyISAM
成熟稳定,易于管理,
OPTIMIZE TABLE 表名
强调快速读取操作
有一些功能不支持
InnoDB
恢复回滚
支持外键
空间占用量比MyISAM大得多
支持MyISAM不支持的功能
不支持全文索引
功能 MyISAM InnoDB
事务处理 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
表空间 相对小 相对大,最大2倍
全文索引 支持 不支持
7,默认字符集
对于汉字:
GBK 2个字节
UTF-8 3个字节
MySQL服务器,数据库,数据表,字段都可以指定字符集,相对于其他的数据库显得灵活
show character set//查看数据库支持的字符集
数据库中的UTF-8是没有中间的-的,即数据库的UTF-8是utf8
MySQL的字符集包括
字符集,是用来定义MySQL存储的方式
校对规则:对规则定义了比较字符串的方式
1个字符集可以对应多个校对规则
8,修改表
没有改不了的地方
Alter table tableName add columnName 类型 属性//添加字段到表末尾
Alter table tableName add columnName 类型 属性 after 已存在的列名//加大已存在列之后
Alter table tableName add columnName 类型 属性 first//加到第一列
alter table tableName modify sex char(3);//修改列的属性 modify 修改类型
alter table tableName change oldname newname varchar(30);//可以改变字段名,modify不能更改字段名
alter table tableName rename as newtableName;//更改表名
alter table tableName drop columnName
drop table
函数
字符串函数
1 concat(s1,...,sn);
连接
2 insert(des,start,len,insert);
将des的start位置开始,len个字符串长度替换为insert
3 lower(str) upper(str)
将字符串转换为小写或大写
4 Left(str,x) right(str,x)
返回字符串的左边或右边的x个字符,若x为空,则什么也不返回
原文地址:http://blog.csdn.net/havedream_one/article/details/45641063