PHP笔记之MySQL(1)
目录
mysql数据库的系统级操作及基本语法规定
启动/停止mysql数据库服务:
命令行模式(需要管理员身份):
启动:net start mysql
停止:net stop mysql
服务模式:控制面板〉管理工具〉服务〉mysql >启动/停止
登录/退出mysql系统
登录:mysql -h服务器地址 -u登录名 【-P端口号】 -p
或登录:mysql --host=服务器地址 --user=用户名 --port=端口 --password
前两个语法,可以使用的前提都是:设定好了环境变量;
退出:quit; 或 exit;——是指已经登录(进入)了mysql之后。
注意:登录数据库系统后,需要使用“set names 编码名;”来设定当前连接数据库的“环境编码名”,即当前跟数据库打交道的“客户端”本身的编码。通常来说:
cmd客户端中是固定的gbk编码,
而php网页中,是该网页文件的编码(现在主流都是utf8)。
数据库的备份和恢复:
备份:就是将一个数据库,完整地“转换为”一个可以随时“携带和传送”的文件。
语法:
mysqldump -h服务器地址 -u登录名 -p 数据库名 > 文件名
恢复: 就是将一个备份的数据库文件,完整地还原为一个可以使用的数据库。
语法:
mysql -h服务器地址 -u登录名 -p 数据库名 < 文件名
注意:
1,这两个命令,都是在“没有登录mysql”的时候使用。
2,其中mysqldump命令还要求为管理员身份。
3,通常,恢复,就是指恢复原来数据库中的所有表数据信息及其他信息,而数据库名可以是原来的名字或新的名字。
基础语法规定
注释:
有如下3中注释:
1, 单行注释: #注释内容
2, 单行注释: -- 注释内容(注意:--后面有一个空格)
3, 多行注释: /* 注释内容*/
语句行:
默认情况下,以一个英文分号作为一条语句的结束!
而且,常规的操作中,都是“一次执行一条语句”;
但:
mysql中,可以人为设定语句结束符,做法如下:
delimiter 新的结束符
此行之后 ,就可以使用新的结束符了:
大小写问题
1,mysql语言内部本身不区分大小写;
2,但,mysql的某些命令执行会生成文件(夹),此时他们就可能会区分大小写:
2.1:在文件(夹)名称 区分大小 写的系统中,这些名字也会区分大小写,比如unix,linux系统;
2.2:在文件(夹)名称不区分大小写的系统中,他们同样不区分大小写,比如window系统。
命名问题
可以自己命名的名字,称为标识符,包括:数据库名, 表名,字段名,视图名,函数名,过程名,变量名,用户名,,等等。
可以命名标识符的字符比常规的语言多,但特别建议只用:字母数字和下划线,并不用数字开头。
非常规字符或系统关键字虽然可以作为标识符使用,但最好要包在反引号(数字1左边那个反撇 ` )中,并且不推荐。
对数据库名,表名,和视图名,在window系统中不区分大小写,而其他系统中区分,建议全使用小写,并采用下划线分割法。
对其他自己命名的标识符(字段名,函数名,过程名),不区分大小写,但也建议全使用小写,并采用下划线分割法
数据库定义语句
创建数据库:
形式:
create database 数据库名 【charset 字符编码名称】 【collate 排序规则】;
说明:
1,字符编码名称是用于设定当前数据库中存储的字符内容以什么编码来存储。
2,collate排序规则用于设定其中的字符内容的“大小关系”(先后顺序):
对于英文,基本没有任何问题,比如:
“abc” “abd”: 后者大;
“d”; “abc”: 前者大;
.....
所有的对于英文字符的比较,本质上都是“单个字符”的比较。
但,对于中文,就成问题了,比如:
“中国”, “印度”: 谁大?
“中”, “美”: 谁大?
排序规则,就是用于设定类似这种字符的大小关系或先后顺序的一种规定!
实际我们的代码中(应用级别),只是一个名字:排序规则名
而且,通常每种字符编码(字符集),都有一个默认的排序规则,所以,通常都不写的。
显示mysql中的所有可用的字符编码(供共39种):
显示mysql中的所有可用排序规则(共约200种):
实际应用中,我们使用某个字符集(字符编码),然后可用的与之对应的排序规则其实可选项很少,通常只有2个。当然,我们一般也都不使用它。
举例:
删除数据库:
形式
drop database 【if exists 】 数据库名;
说明:
1,if exists 是用于一种“安全运行”的考虑。如果数据库不存在,也不会报错。否则会报错。
修改数据库(字符编码):
基本上,就是修改数据库的“属性”而已:只有2个:
修改编码;
修改排序规则;
alter database 数据库名 charset 新的编码名 collate 新的排序规则名
显示所有数据库:
show databases;
显示一个数据库的创建语句:
形式:
show create database 数据库名;
“进入”(选择)某个数据库:
use 数据库名;
字段类型(数据类型)
总览:
mysql中,数据类型主要分3大类:数字型,字符型,时间型;
数据类型,在mysql中,主要用于创建一个表的时候,设定字段的类型。
比如:create table 表名 (id int, f1 float, f2 double, f3 time, f4 text)
整数类型
主要有:
int, tinyint, smallint, mediumint,bigint
整数类型所占空间(字节):
int:占4个字节,即32位;
tinyint:占1个字节,即8位; 最多能存储256个数字,默认范围是-128~127
bigint:占8个字节,即64位;
(笔记:2的16次方为:65536
2的32次方为:4 294 967 296
2的64次方为:18446744073709551616 )
整数类型字段的设定形式:
类型名【(M)】【unsigned】 【zerofill】
说明:
1,M表示设定该整数的“显示长度”,即select输出的时候,123可能显示为000123(假设M为6)
2,unsigned用于设定该整数为“无符号数”,其实就是没有负数。
3,zerofill用于设定是否填充“0”到一个数字的左边,此时,需与设定的长度M配合使用。
4,如果设置了zerofill,则自动也就表示同时具备了unsigned修饰
举例:
小数类型
有3种:float, double,decimal。
float:单精度浮点型,使用4个字节存储数据,其精度大约只有6-7个有效数字数位;
double:双精度浮点型,使用8个字节存储数据,其精度大约只有15个有效数字数位;
decimal:定点小数类型,整数部分最长可以有65位,小数部分最长可以有30位。一般设置格式为:decimal(总位数,小数部分位数)
然后输出观察:
其中f1字段的值,其精度损失明显。
php操作mysql数据库基本函数复习
通常,php网页中完成有关数据库的操作,首先,需要如下代码:
$link = mysql_connect(“数据库服务器地址”,”用户名”,”密码”); //连接数据库系统
mysql_query(“set names 网页文件编码名”); //设定“连接编码”;
//也可以这样做:mysql_set_charset(“网页文件编码名”);
mysql_query(“use 数据库名”); //选定要使用的数据库
//也可以这样做:mysql_select_db(“数据库名”);
然后,才开始正式执行要完成的数据库操作任务(语句):
$result = mysql_query(“select / delete /update / insert / desc / show tables /drop .......”);
其他个别补充:
mysql_error():获取mysql执行失败时的错误信息。它通常应用与如下场合:
$result = mysql_query(“select / delete / update / insert / create / dropt ....所有sql语句”);
if( $result === false){
echo “语句执行失败,请参考提示信息:” . mysql_error();
}
else{
//这里是成功的情况,那就后续处理。。。
}
对于mysql_query()这个函数,可以执行“几乎任何sql语句”,在应用中,通常需要区分为2情况:
情况1:执行没有数据返回的语句,比如:insert, update, delete, create table, create database ,drop ...
这种语句,使用mysql_query()函数,执行的结果只有true和false返回:
返回true:表示执行成功;
返回false:表示执行失败;
情况2:执行有数据返回的语句:select, show tables, show databases, desc 表名(显示表结构);
此时,使用mysql_query()函数,返回的结果分为:
如果失败:返回的是false;
如果成功:返回的是“结果集”——“数据集”——就是一行一行数据,就是有字段的一个“表结构”。它需要我们进一步去“取出”数据,才能使用其中的数据,其基本模式为:
$result = mysql_query(“select ... “); //执行有返回数据的语句
while ( $rec = mysql_fetch_array( $result ) ){
//mysql_fetch_array()会取出该结果集中的“一行数据”,并取得该行数据后赋值给$rec;
//此$rec就是一个数组,其下标就是字段名;
//在此while循环中,mysql_fetch_array()会一次次(一行行)取出结果集中的所有数据;
然后,在这里就可以处理该数组$rec了:
}
示例如下:
“fetch函数”的3种形式的辨析:
假设mysql_query(“select id, age, name ”)执行的结果集为$result,其该表中的数据类似这样:
$result = mysql_query(“select id, age, name ”);
mysql_fetch_assoc($result):得到的数组类似这样:
array(“id” => 1, “name” => “user1”, “age”=>18);
mysql_fetch_row($result):得到的数组类似这样:
array(0=> 1, 1=> “user1”, 2=>18);
mysql_fetch_array($result):得到的数组类似这样:
array(“id” => 1, “name” => “user1”, “age”=>18, 0=> 1, 1=> “user1”, 2=>18);
扩展php中操作mysql数据的几个函数:
$n1 = mysql_num_rows(结果集); //获得该结果集的数据行数;
$n2 = mysql_num_fields(结果集); //获得该结果集的数据列数;
$name = mysql_field_name(结果集, $i ); //获得结果集的第i个字段的名字!i从0开始算起
(注意上面的例子,多个$sql1被覆盖,只执行最后一个:)