PHP —-MySQL 数据库

dafenqi
2023-08-07 / 0 评论 / 14 阅读 / 正在检测是否收录...

PHP —-MySQL 数据库

MySQL数据库操作

1.创建数据库.

在MySQL中应用 create database 语句创建数据库.格式如下:

create database db_name;

db_name 为数据库名,必须为合法名称.规定如下:

a.不能与其他数据库重名.

b.名字可以是任意的字母,阿拉伯数字,下划线或者"$"组成.可以使用以上任意的字符开头,但不能是使用单独的数字,哪样会造成与数字混淆.

c.名字最长可由64个字符组成(包括表,列和索引),而别名最多可长达256个字符.

d.不能使用MySQL关键字作为数据库名称和表名.

ps: 执行过程:在创建数据库时,首先连接MySQL服务器,用户名是root,密码也是root,然后编写"create database db_name;" sql语句,数据库创建成功.

2.选择数据库.

use 语句用于选择一个数据库,使其成为当前默认数据库.格式如下:

use db_name;

3.删除数据库.

删除数据库使用 drop database 语句.格式如下:

drop database db_name
ps.对于删除数据库的操作应该谨慎使用.一旦删除数据库中的所有结构和数据都将会被删除,没有恢复的可能,除非数据库中有备份.

MySQL 数据库表

上面将完数据库的操作,下面讲一下数据库中,对表的操作.MySQL 数据库表的操作包括 创建,查看,修改,重命名和删除.

1.创建表.

创建表使用 create table 语句.格式如下:

create [temporary] table [if not exists] 数据表名 [(create_definition,...)][table_options][select_statement]

a. temporary ,如果使用该关键字,表示创建一个临时表.

b. if not exists ,该关键字用于避免创建表时,表存在时 MySQL报告的错误.

c. create_definition,这是表的列表属性部分.MySQL要求在创建表时,表至少要包含一列.

create_deifnition 格式如下:

col_name type [not null] [default default_value] [auto_increment] [primary key] [reference_definition]
col_name:字段名.
type:字段类型.
not null|null:指出该列是否允许空值.
not null 表示不允许空值.
default default_value:表示默认值.
auto_increament:表示默认值.
primary key:表示是否为主键,一个表中只能有一个primary key.如果没有primary key ,而某些应用要求primary key,服务器将返回第一个没有null 列的unique 键作为primary key.

d. table_option, 表的一些特性参数.

e. select_statement,select语句描述部分,用它可以快速地创建表.

2.查看表.

对于创建成功的表,使用 show columns 语句或 describe 语句查看指定数据表的表结构.格式如下:

show columns 语句:

show [full] columns from 数据表名 [from 数据库名];
              或者
show [full] columns from 数据表名.数据库名;

describe 语句,describe 可以简写成DESC.

describe 数据表名;
     或者
describe 数据表名 列名;

3.修改表.

修改表结构使用 alter table 语句.其中,修改表结构的操作又包括:增加或者删除字段,修改字段名称或者字段类型,设置/取消主键或者外键,设置/取消索引以及修改表的注释等.格式如下:

alter [ignore] TABLE 数据表名 alter_spec[,alter_spec]....

如果指定参数 ignore,当出现重复行时,则只执行一行,其他重复行将被删除.

其中alter_spec 子句定义要修改的内容,格式如下:

alter_specification:
      add [column] create_definition [FIRST | AFTER column_name],//添加新字段
      add index [index_name] (index_col_name,....),//添加索引名称
      add primary key (index_col_name,...),//添加主键名称
      add unique [index_name] (index_col_name,...),//添加唯一的索引
      alter [column] col_name {SET DEFAULT literal | DROP DEFAULT},//修改字段名称
      change [column] old_col_name create_definition //修改字段类型
      modify [column] create_definition,//修改字句定义的字段
      drop [column] col_name ,//删除字段名称
      drop primary key,//删除主键名称
      drop indEX index_name, //删除索引名称
      rename [AS] new_tbl_name,//更改表名
      table_options

alter table 语句允许制定多个动作,其动作使用逗号分隔,每个动作表示对表的一个修改.通过alter 修改表列的前提是必须将表中的数据全部删除.

4. 重命名表.

重命名表使用rename table 语句.格式如下:

rename table 数据表名1 to 数据表名2;//rename table 语句可以同时对多个数据表进行重命名,多个表之间以逗号分隔.

5. 删除表

删除数据表使用语句 drop table .格式如下:

drop table 数据表名;
    或者
drop table if exists 数据表名; //防止删除不存在的表,导致的报错.

删除数据表,将同样导致没有备份的数据无法恢复.

ps:在执行create table,alter table和drop table中的任何操作时,首先必须选择数据库,否则将无法对数据表进行操作.

MySQL 数据表中的数据

下面总结数据表中的数据.如何更好的操作和使用这些数据才是使用MySQL数据库的根本.

1.添加(插入)数据.

创建完数据库和数据表后,要向表中添加数据.添加数据主要有三种语法方式:

a.列出所有新添加数据的所有的值.

insert into table_name values(value1,value2,.....);//语句缺点 当列过多的时候,不易明确知道匹配值.

b.给出要赋值的列,然后再给出值.

insert into table_name (column_name1,column_name2,...) values ( value1,value2,....);//缺点同上

c.用col_name =value 的形式给出列和值.

insert into table_name set column_name1 = value1 ,column_name2 = value2 , ....;//弥补以上缺点,但导致语句过长.

批量添加数据begin

数据的批量添加使用 load data 和MySQLimport 语句实现.

load data 通过大量读取本地文件系统上的文件,可以将大量数据添加到数据库中.格式如下:

load data local infile "filename.txt" into table table_name;

MySQLimport语句实现程序直接从文件读取批量数据.它相当于load data 语句的一个接口.格式如下:

%MySQLimport -local table_name filename.txt;

MySQLimport可以自动生成一个load data 语句,该语句把filename.txt 文件中的数据装入table_name 表.MySQLimport 将文件名中第一个圆点前的的字符作为新的表名,并且将文件中的数据导入到新表中.如 文件名 com.youfilename.txt. 那么将会将数据导入到表com 中.

2.修改数据.

修改数据使用update语句.格式如下:

update table_name set column_name1=new_Value1,column_name2 =new_value2,... where condition;

condition 为条件语句,如user_name='张三'. 必须保证condition条件的准确性,否则将会导致破坏表中的数据.

3.删除数据.

删除数据使用 delete 语句.格式如下:

delete from table_name where condition;
ps
a.删除某条数据时,一般选择该数据的id 作为条件,以避免产生不必要的错误.
b.当到删除整个表的数据,因效率问题,不推荐使用delete操作.可以使用truncate 语句,它可以很快的删除表中的所有内容.

4.查询数据.

从数据库表中查询数据用与操作以及显示,是对数据进行操作比较重要的一环.下面将会作详细的解释.

首先,对MySql数据库表进行数据查询用到select 语句.格式如下:

select selection_list //要查询的内容,选择查询的列.
from table_list  //从何表中查询,从何处选择行.
where primaryz_constraint //查询时,需要满足的条件.
group by grouping_columns //如何对查询结果进行分组.
order by  sorting_columns //如何对结果进行排序
having secondary_constraint //查询时满足的第二条件.
limit count //限定输出的结果.

a. select_list 表示要查询的内容.如果要查询表中所有的列,可以用" * "表示.如果查询多列,可以直接输入列名,并使用" , "分隔.

b. table_list 从指定的表中查询.既可以从一个表中查询;也可以从多个表中查询,多表查询使用 " ," 分隔,并且在where 字句中使用连接运算符号来确定表与表之间的关系.当使用多表查询的使用,如果表中有相同的字段,为了告诉服务器要显示的那个表中的字段信息,需要在字段前加上表名.格式如下:

table_name.columns_name; //表名.字段名.
使用 " = "符号将表连接起来,叫做等同连接.比如.tb_student.name = tb_gradeOne.name ;如果不使用等号连接,那么产生的结果将是两个表的笛卡尔积,叫做全连接.

c.where 条件语句用于通过相应条件获取对应信息.格式为 columns_name 比较运算符 value.

d. group by 实现对查询得到的数据进行划分并加以分组,从而实现分组查询.在查询时,所查询的列必须包含在分组的列中,目的是使查询到的数据没有矛盾.在与avg() 或则sum()函数一起使用时,group by 语句能够发挥最大的作用.

e.使用distinct 在结果中去除重复行.

f.order by.使用order by 可以对结果进行升序和降序(DESC),在默认情况下,order by 按照升序输出结果.如果要降序可以使用DESC 来实现.当对含有null值的列进行排序时,升序,null值排在最前,降序,null 排在最后.

g.like 模糊查询. like 属于较常用的运算符,通过它可以实现模糊查询,他有两种通配符,即"%"和下划线"_"."%"可以实现匹配一个或多个字符,而"_"只匹配一个字符.
h. 使用concat 联合多列.使用concat 函数可以联合多个字段,从而构成一个总的字符串.例如把书名与价格合并,并使用as 为字段起一个别名.

select id ,concat(bookname,":",price) as bookInfo form tb_mkbook;
i.使用limit 限定结果函数.使用limit字句可以对结果的记录条数进行限定,从而控制它输出的行数. 例如:limit 3 --表示显示3条数据.limit 5,10---表示从编号为5的记录开始,往下读10条数据用于显示.

j.函数表达式.常用的统计函数有:

avg(columns_name);//获取指定列的平均值.

count(columns_name);//统计出制定列的非空记录的条数. 加distinct限定关键字,则统计不同值的条数,相同值的被认为为一条记录.count(*),则统计包含空记录的数目.

max(columns_name) 或者 min(columns_name);//获取指定字段的最大/最小值.

std(columns_name) 或者 stdtev(columns_name);//指定字段的标准背离值.

sum(columns_name);//指定字段所有记录的值的和.

ps.常见的数据类型有 数字类型,字符串类型,时间和日期类型.详细情况,请参考php相关知料与文档.

MySQL 数据库的操作步骤

以上对mysql数据库结构层次总结如下,下面介绍对数据库的操作步骤.

1.连接到mysql服务器.

使用mysql_connect()函数创建与MySQL服务器连接.方法格式如下:

<?php
    $conn = mysql_connect('hostname' , 'username' , ' password ') or die( "数据库服务器连接失败".mysql_error());
                //hostname: mysql服务器的主机名或者ip.如果省略端口号,则默认为3306;
                //username:登陆mysql数据库服务器的名称
                //password: mysql服务器的用户密码.
         //改函数的返回值表示对这个数据库的连接,如果成功,则返回一个资源.
   if($conn){
      //服务器连接成功
       }
?>

从上可以知道,可以指定非本机的机器名作为数据库服务器,这样就为数据库的异地存储和数据库的的安全隔离提供了保障.外界用户往往通过www服务器的直接访问权限,如果数据库直接放在www服务器上,就会给MySQL数据库带来安全隐患;如果为数据库系统安装防火墙,那么php可以直接通过局域网访问数据库,而局域网的计算机对外部不可见,这样保证了s数据库不受外来攻击.

为了方便查询数据库连接错误,可以加上die()函数进行屏蔽的错误处理机制.mysql_error()用于提取错误文本信息,如果没有出错则返回空字符;如果出错,连兰奇上将会显示错误信息.

ps.对于用户而言,建议在mysql_connect()前面添加@符号,用于屏蔽错误信息,这样做是为了让用户看到一堆莫名其妙的错误信息.但是对于开发者而言,在调试的过程中,不使用@能让我们快速定位错误信息.

2.选择MySQL数据库.

使用mysql_select_db()函数选择MySQL数据库服务器上的数据库,并与数据库创建连接.格式如下:

mysql_select_db(string 数据库名 [,resource link_identifier]);
        //string 数据库名:要选择的MySQL数据库名称
        //resource link_identifier: MySQL服务器的连接标识.
//例子,同上一步.
<?php
if($conn){
  $selected = sql_select_db("db_webBookStore",$conn);
  if($selected){
    //数据库连接成功;
  }
}
?>

3.执行sql语句.

使用mysql_query()函数执行sql语句.sql语句操作在前面已经讲过,此处不在阐述.主要介绍mysql_query()函数的用法,格式如下:

$result = mysql_query(string sql [,resource link_identifier]);
    //如果sql语句为查询语句,成功则返回结果集合,否则返回false
    //如果sql语句为插入,删除或更新,成功则返回true,否则返回false.
//ps.改函数也可以用于选择数据库,和设置数据库编码格式.
//如:mysql_query('user db_database13',$conn);
//    mysql_query(' set names utf8');

提高: mysql_unbuffered_query() ,顾名思义改函数为不缓存结果查询.它仅向服务器发送一条sql查询语句,但不获取和缓存结果的行.它不像mysql_query哪样自动获取并缓存结果集.优点在于,当处理很大的结果集时,会节省客观的内存;另一方面,可以在获取第一行数据后立即对结果集进行操作,而不用等到整个SQL语句都执行完毕.

mysql_fetch_array()函数,用于将结果集合返回到数组中.格式为:

$array = mysql_fetch_array(resource result [,int result_type]);
    //resource result:资源类型的参数,要传入的是由mysql_query()返回的资源数据指针.
    //int result_type:可选项,要传入的整型参数,可以是:mysql_assoc(关联索引),mysql_num(数字索引),mysql_both(同时包含前两者).默认为mysql_both.
  //注意,本函数返回的字段名区分大小写.
mysql_fetch_row()函数,从结果集中获取一行来作为枚举数组.格式为:

$array = mysql_fetch_row(resource result);
    //根据所获取的行数据,生成数组.如果没有更多的行,则返回false.
    //数组偏移量下标从0开始.
    //本函数返回的字段名区分大小写.
本函数只能使用数字索引,而mysql_fetch_array()两者都可使用.如:数字索引:$array[0],关联索引:$array[type];

mysql_num_rows()函数,用于获取查询结果集中的记录数.格式为:

int  mysql_num_rows(resource result);
//返回结果集中行的数目.此命令只对select语句有效.要获取其他sql语句的操作所影响的数据集行数目,需要使用mysql_affected_rows()

4.数据执行完后,需要关闭结果集,以释放资源.语法如下:

mysql_free_result(resource result);

如果在网页中要频繁的对数据库进行访问,可以通过创建与服务器数据库持续连接来提高效率.这样就避免了,每次连接服务器请求多带来的长时间请求和较大的资源开销.持续连接数据库使用mysql_pconnect()函数来替换mysql_connect()函数.创建的持续连接,在程序结束前将不会调用mysql_close()来关闭数据库请求.当再次调用mysql_pconnect()去连接数据库的时,服务器将返回已经创建的持续连接的ID号,而不去重新创建数据库连接.

5.关闭MySQL服务器.

每次使用mysql_connect()和mysql_query(),都会消耗系统资源.在少量用户访问web网站时候问题还不大,但当大量用户连接超过一定的数量,就会造成系统性能的下降,甚至死机.为了避免这种情况,在完成数据库操作后,应调用改函数来关闭与MySQL服务器的连接,以节省系统的资源.格式如下:

mysql_close($conn);
ps.php中与数据库的连接是非持久连接,系统会自动回收,一般不用设置关闭.但如果一次性返回的结果集比较大,或者网站访问量比较多,则最好使用改函数手动释放.

提高:

数据库乱码问题,使用mysql_query()函数设置数据库编码. 编码格式建议使用utf-8 .如果使用gbk2312,如果用户没有安装中文编码(如一些美洲,欧洲用户的机器查看中文网站),则在输出时将会导致乱码.utf-8 的使用返回更广,可移植性更高,也更被国际化支持.

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消