liuhongyu 发表于 2018-12-18 06:04:52

PHP关系型数据库介绍

  PHP关系型数据库介绍
  

  Mysql数据库:永久性保存数据的仓库

  PHP的变量,在php的执行周期,临时性保存变量的概念!
  Mysql数据是关系型数据库:何谓关系型,利用关系,去描述实体信息,与实体之间的关系的数据库架构就是关系型数据!

  

  所谓关系:指的就是二维表
http://s1.运维网.com/wyfs02/M02/76/5C/wKiom1ZQisuiTc7uAABvpYKZsPU928.jpg
  行:记录,一行就是一条记录
  列:字段,一列就是一个字段
  

  sql:一门语言,结构化查询语言,操作关系型数据的语言
  nosql:not only sql,非关系型数据库。典型的是key/value型,键值对型
  

  操作mysql的基本流程:
      什么是数据库系统:mysql就是数据库系统!数据库系统最基本应该由:数据库(数据主体部分)+数据库管理系统(操作数据的工具)

      DBS (database system) = DB(database) + DBMS(database management system)
      http://s1.运维网.com/wyfs02/M01/76/5C/wKiom1ZQj0TgYhinAABFSEqgeZ0451.jpg
  

  mysql的操作,是基于C/S!
  

  SQL:大体分成典型:DML(数据管理语句,数据操作),DDL(数据定义语句,数据结构的控制语句,表操作和库操作)
  

  库操作,DDL (Data Definition Language 数据定义语言)
  

  创建:create (几乎所有的结构都是用该语法完成)
      create database 库名 [库选项]; //库选项只有字符集与校对集的概念

      如:create database ginvip;

      注意:每个库,会对应一个数据目录,存放在当前mysql的总数的数据库目录内

      数据库名的问题:

      大小写问题,取决于mysql服务器所在的操作系统(建议是,认为它区分大小写)

      特殊名称,关键字,特殊字符!默认是不能作为数据库名

      http://s5.运维网.com/wyfs02/M01/76/67/wKioL1ZSwFrx_iWnAAAykHb2BLY841.jpg
      但是可以使用反引号将名称包裹起来,告知服务器,此处是一个名字,而不是特殊操作

      http://s1.运维网.com/wyfs02/M02/76/68/wKiom1ZSwFyBIWmSAAAYzlZgRTo100.jpg
      中文也可以作为标识符(库名),同样也需要反引号!(多字节符,还需要注意字符集的问题)

     

  删除:drop
      drop database 数据库名;

  修改: alter
      alter database 数据库名;

      只能修改数据库选项

      EX : alter database t_t charset gbk;//修改t_t数据库的编码为gbk;

  

  查询:(看看有哪些库,库的基本结构) show

      show databases;    //查询当前已经存在的所有数据库

      show databases like;    //like关键字用于过滤多个数据库

      EX: show databases like '%_schema';    // %匹配任意字符的任意次数的组合

        show databases like 'x_y';    // _ 匹配符匹配任意字符的一次

        注意:如需要匹配,特定的通配符,则需要对通配符转义,使用反斜杠 \ 完成转义

        http://s4.运维网.com/wyfs02/M02/76/68/wKioL1ZSyxuQRxjkAAAYjYQAkYY561.jpg
      查看某个数据库的定义:

      show create database 数据库名;

      http://s1.运维网.com/wyfs02/M00/76/69/wKiom1ZSyzejbMMrAAA1HFPykss809.jpg
  

  在create 与 drop时,有两个额外的操作:
      create database if not exists 数据库名;    //如果不存在则创建

      drop database if exists 数据库名;   //如果存在则删除

     

  show warnings;    //查看警告
  

  表操作:
  

  表操作分为表本身,与表结构的操作!
  

  创建:create table

      create table 表名(

        字段的定义;

      )[表选项];

      其中表名,一定先要确定数据库!因此一个典型的表名是由两部分组成:所在库与表名
      EX : create table stu (id int,name varchar(255))engine=innodb charset=utf8;

      其中字段部分才是最终的数据的载体(与变量的概念是类似的,都是基本保存数据的)!因此,在定义字段时至少要字段名和字段类型!

      两种最基本的mysql数据类型(int , varchar) //varchar必须要指定最大长度(单位:字符数)

      表选项部分:常用的有字符集(校对集),表引擎。
  

  查看:show
  查看所有的表有哪些:show tables; //后面也可以加like关键字:show tables like 'stu';
  查看具体的建表语句:show create table 表名;
  在mysql的命令行客户端,如果数据过多不容易展示,可以使用\G作为结束符
  如:show create table 表名\G    //后面无需加分号
  

  查询表结构:desc 表名;
  

  修改:alter
  
  1:修改表选项:alter tabale table_name 新选项;
      EX : alter table stu engine=myisam charset=gbk;

  2:改表名:rename 原表名 to 新表名;
  EX : rename table stu to hero;
      注意:表名可以由 库名.表名 组成 (跨库修改表名)

  3:修改表结构(字段):
      增加字段:

      alter table 表名 add column 字段定义 [字段位置];

     EX : alter table stu add column age int; //增加一个age字段

            alter table stu add column height int after name; //在name的字段后面增加一个height字段

            alter table stu add column sn varchar(10) first; //在最前面增加一个sn字段

  

      删除字段:

      alter table 表名 drop column 字段名;

     EX : alter table stu drop column height; //删除height字段

  

      修改已有字段(修改字段定义)

      alter table 表名 modify column 字段名 新的定义;

     EX : alter table stu modify column sn int; //将sn字段改为int类型;

  

      字段改名:

      alter table 表名 change column 原字段名 新字段名 新字段定义;

      注意:不是纯粹的改名,而是需要在修改定义的同时改名

     EX : alter table stu change column sn stu_sn varchar(255) after age; //将sn字段名改为stu_sn,并将 stu_sn改为varchar类型,且将stu_sn放在age字段的下面

  

  删除:drop talbe
      drop table stu; //删除stu字段

      drop table stu if exists;

  

  数据操作:DML(Data Manipulation Language 数据操控语言)
  

      增加,创建,插入:insert

        insert into 表名(字段列表) values(与字段相对的值列表);

           EX :insert into stu(id,name) value (1,'ginvip');

                 insert into stu(id) values (2);

                 insert into stu(name) values ('-');

                 insert into stu(name,id) values ('php',4);

           上面四条语句都可以执行成功。不一定要一次插入所有字段,也不一定要按照原始字段插入。但是字段与值的数量一定要匹配。

           如果所有的值都按照字段的出现顺序插入的话,可以省略列表部分!

           注意:数值类型,不需要增加引号,而字符串类型都需要出现在引号内!(数值型也可以出现在引号内)

  

      查询,检索,选择:select

        select 字段列表 from 表名 ;

           select * from stu;    // * 表示所有字段

           select * from stu where 1;

           select * from stu where id>3;

           关于条件表达式,默认是没有,表示永远为真

           

      删除:delete

        delete from 表名 ;
           delete from stu;

           delete from stu where 1;

           delete from stu where id>3;

           注意:删除是不可逆的操作。要避免没有条件的删除

  

      修改,更新:update

        update from 表名 set 字段=新值,字段n=新值n where 条件;

           update from stu set name='PHP' where id=4;    //将字段id为4的name字段更新为'PHP';

  

  字符集:
  

      描述可见到的图形,在存储和传输时所使用的编码称之为字符集

      指的是:图形与编码之间的对应关系!
  

  数据的存储编码:
      数据最终要映射(保存)到字段的层面上,因此决定数据的编码,也是最终由字段来决定!

  确定数据的存储编码是由以下的方案完成的:

  1:先看字段的编码,如果存在则确定完毕
  2:如果字段没有设置编码,查看表的编码,如果有,则确定数据编码
  3:如果表没有设置编码,查看库的编码,如果有,则确定数据编码
  4:如果库也没有设置编码,则由服务器程序确定(mysql文件夹内的my.ini配置文件)。如图:
  http://s1.运维网.com/wyfs02/M02/76/6F/wKiom1ZTJDmxa6XRAACxm1tPUbc663.jpg

  

  客户端操作,查询的编码:
      在客户端与服务器端交互时,存在两个重要的编码:

      1:客户端发送数据的编码

      2:客户端接收到服务器数据编码

  可以通过 show variables like 'character_set_%'; 展示 character_set 开头变量,其中就有上面的两个值
  在命令行客户端下:只能是GBK编码!
  使用 set 变量名 = 变量值的形式更改变量值:

      set character_set_client = gbk;

      set character_set_results = gbk;

  set names gbk , 就是一个快捷操作,将上面两个配置同时更改成目标编码。
  set names gbk/utf8 取决于客户端所能接受的编码!

  http://s1.运维网.com/wyfs02/M01/76/6E/wKioL1ZTK-6gNAmdAAD-UFB8bhw002.jpg
  




页: [1]
查看完整版本: PHP关系型数据库介绍