PHP MySQL基础知识

数据库基本概念

  • 数据库:信息存储的仓库,包括一系列的关系措施
  • 表:一个数据库中可以有若干张表
  • 字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术中叫“字段”,栏目里面存的具体信息叫“字段值”
  • 记录:一条信息我们叫一条记录
  • 一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录

MySQL支持的数据类型

数值类型

整数类型 字节 范围(有符号) 范围(无符号)
tinyint 1 -128、127 0、255
smallint 2 -32768、32767 0、65535
mediumint 3 -8388608、8388607 0、1677215
int、integer -2147483648、2147483647 0、4294967295
bigint 8 -9223372036854775808、9223372036854775807 0/184466744073709551615
  • zerofill:配合int(数字)来用,表示显示的时候一个显示宽度

  • unsigned:可选,表示无符号,如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此项,它的取值范围是正常值的下限取0,上限取原值的2倍。如果一个列指定为zerofill,则mysql自动为该列添加unsigned属性

  • auto_increment:自增(默认从1开始),用于整数类型和带索引的字段,比如:配合主键使用

  • primary key:主键可以唯一标识某条记录的一个字段或者多个字段
    1、设置方法
    a、primary key(字段)
    b、primary key(字段1,字段2)
    c、也可以直接写在需要创建主键的字段后面
    d、如果忘了设置可以:alter table 表名 add primary key(字段名)
    2、删除
    alter table 表名 drop primary key;
    注意:如果字段具有auto_increment 属性必须先删除auto_increment 属性

  • 规定字段的值是否可以为nullnot null即不可以为null,该属性也可以用于其他类型的字段

  • default 值:设置默认值,该属性也可以用于其他类型的字段

  • 小数的表示
    1、浮点数
         单精度(float):单精度的浮点数精确到大约7位小数位(整数部分加上小数部分的位数)
         双精度(double):双精度的浮点数精确到大约15位小数位(整数部分加上小数部分的位数)
    2、定点数
         定点数(decimal):以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据;和浮点数一样可以在类型后面加(M,D)的方式来进行表示,M表示一共显示M位数字,D表示小数点后面的个数


日期类型

日期和时间类型 字节 最小值 最大值
date 4 1000-01-01 9999-12-31
datetime 8 1000-01-01 00:00:00 9999-12-31 23:59:59
timestamp 4 19700101080001 2038年的某个时刻
time 3 -838:59:59 838:59:59
year 1 1901 2155

字符串类型

字符串类型 描述
char(M) M为0~255之间的整数,表示可以存M个字符(中文英文一样)
varchar(M) M为0~65535之间的整数,表示可以存M个字符;若字符类型为utf8,每个字符占3个字节,所以最大长度不能超过21845-1个字符
tinytext 允许长度0~255个字符
text 允许长度0~65535个字符
mediumtext 允许长度0~16777215个字符
longtext 允许长度0~4294967295个字符
enum(‘a’, ‘b’, ‘c’) 只能存其中一个值
set(‘a’, ‘b’, ‘c’, ‘d’) 可以包含0~64个成员,可以存多个值

注意点:

char与varchar的区别

  • char类型的字符所占的空间是固定的,不管存了几个字符,所占的空间都是当初设定的字符空间;

  • varchar类型的字符所占的空间是可变的,根据存入的字符长度来确定实际占多少的空间;如varchar(255)则为255+1个字节,超过255则为255+2个字符,其中1或2为索引值

  • 在检索时,插入列删除尾部的空格,而varchar则保留这些空格


SQL使用入门

SQL分类

DDL(Data Definition Languages)语句

数据定义语句,通过这类语言可以对数据库进行创建、删除、更改

DML(Data Manipulation Language)语句

数据操作语句,用户添加、删除、更新和查询数据库记录并检查数据完整性

DDL(Data Control Language)语句

数据控制语句,通过此类语句可以对数据库的相关权限进行设置


DDL语句

对数据库内部的对象进行创建、删除、修改等操作的语言,DDL语句更多的是由数据库管理员(DBA)使用,开发人员一般很少使用

基本操作

  • mysql -u root -p:登录mysql,在PHPstudy中初始密码为 root

  • show databases;:查看数据库列表

  • exit; quit; \q;:退出数据库


创建数据库

  • create database 数据库名;:创建数据库
  • use 数据库名;:选择要操作的数据库
  • show tables;:查看数据库中所有的数据表

删除数据库

  • drop database 数据库名;:删除数据库

创建数据表

  • create table 表名(
        字段1名 字段1类型 列的约束条件,
        字段2名 字段2类型 列的约束条件,
         …
    )

  • 列的约束条件部分可以设置很多信息,比如,默认值设置:default null


  • desc 表名;:创建完表之后可以查看表的定义
  • show create table 表名\G:\G选项使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录,\G后面无需再加分号

删除数据表

  • drop table 表名;:删除数据表

修改数据表

  • alter table 表名 modify [column] 字段名 新的字段类型 [first | after 字段名];:修改表的字段类型

  • alter table 表名 add[column] 字段名 字段类型 [first | after 字段名];:增加表的字段

  • alter table 表名 modify [column] 字段名;:删除表的字段

  • alter table 表名 change [column] 旧字段名 新的字段名 字段类型 [first | after 字段名];:修改表的字段名

  • 修改字段排列顺序;前面字段增加和修改语法(add、change、modify)中,都有一个可选项 first | after 字段名,这个选择可以用来修改字段在表中的位置,新增的字段默认是加载在表中最后位置,而change、modify默认都不会改变字段的位置

  • alter table 表名 rename [to] 新的表名;:更改表名


DML语句

DML是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除、和查询,是开发人员日常使用对频繁的操作

插入记录

  • insert into 表名(字段1, 字段2,… ) values(值1, 值2,… );:插入记录,也可以不用指定字段名,但是values后面的顺序应该和字段的排序一致

  • insert into 表名(字段1, 字段2,… ,字段n)
    values
    (值1, 值2,… ,字段n),
    (值1, 值2,… ,字段n),
    (值1, 值2,… ,字段n);
    :一次插入多条记录


更新记录

  • update 表名 set 字段1=值1, 字段2=值2,… ,字段n=值n [where 条件];

  • update 表1, 表2,… ,表n set 表1.字段1=表达式1,… ,表n.字段n=表达式n [where 条件];:更新多个表中数据;多表更新更多的用在根据一个表的字段来动态的更新另外一个表的字段


删除记录

  • delete from 表名 [where 条件];:删除单表中的数据
  • delete 表1,表2,…,表n from 表1, 表2,…,表n [where 条件];:删除多个表中的数据

查询记录

  • select 字段名 | * from 表名 where 条件;:查询记录

  • select distinct 字段名 from 表名;:查询不重复的记录;一般使用distinct筛选一个字段

  • =、<、>、>=、<=、!=:条件字段比较符号,多个条件之间可以使用or、and等

  • select * from 表名 order by 字段1 [desc | asc],字段2 [desc | asc],…;:排序和限制;如果排序字段的值一样,则值相同的字段按照第二个排序字段进行排序,依次类推。如果只有一个排序字段,则这些字段相同的记录都将无序排列。在语句的最后面加上limit 数字1,数字2来进行查询数量的限制;数字1表示从第几条记录开始取,数字2表示取几条


聚合

很多情况下,用户都需要进行一些汇总操作,这时就需要使用到SQL聚合操作

  • select [字段1, 字段2,…,字段n] function() from 表名 [where 条件] [group by 字段1,字段2,…,字段n [with rollup]] [having 条件];
  • function():聚合函数
  • sum(字段名):求和
  • count(* | 字段名):记录总数
  • max(字段名):最大值
  • min(字段名):最小值
  • group by:表示要进行分类聚合(上面的这些函数)的字段
  • with rollup:可选语法,表示是否对分类聚合后的结果进行再汇总
  • having:表示对分类后的结果再进行条件的过滤
  • 注意:having和where的区别在于,having是对聚合后的结果进行条件过滤,而where是在聚合前就对记录进行过滤,应该尽可能的对记录进行先过滤
  • 可以同时混合使用多个聚合函数

PHP MySQL基础知识_第1张图片

PHP MySQL基础知识_第2张图片
PHP MySQL基础知识_第3张图片


表连接

需求:显示(查询)多个表张的字段的时候即可使用表连接

1、内连接:仅选取两张表中相互匹配的记录

  • select 表.字段,… from 表1,表2,… where [表1.字段 = 表2.字段];

  • select 语句可以给字段起别名!直接写在需要查询显示的字段的后面就ok;表名也可以起别名,同上

PHP MySQL基础知识_第4张图片

PHP MySQL基础知识_第5张图片


2、外连接:不仅仅选取两张相互匹配的记录,并且会选出其他不匹配的记录

  • select * from 表1 left join 表2 on 表1.字段=表2.字段;:左连接,包含左边表中的所有记录(包含右边表中没有和它匹配的记录)
  • select * from 表1 right join 表2 on 表1.字段=表2.字段;:右连接,包含右边表中的所有记录(包含左边表中没有和它匹配的记录)
  • 左连接和右连接是可以相互转换的

PHP MySQL基础知识_第6张图片


子查询

需求:一个查询需要另一个查询的结果参与的时候

  • in、not in、exists、not exists:用于子查询的关键字

  • select * from 表1 where 表1字段 in (select 表2字段 from 表2);:在…里面;in后面的子语句必须只返回一个字段;若查询结果唯一(只有一条)可以使用 = 代替in

  • select 语句 where exists (select 语句);:后面那个子语句有没有查询出记录来,如果查询出记录来返回true,否则就是false,并且查询出来的记录的具体的值是NULL也是没有关系,也是返回true


记录联合

将两个表或者多个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示,这时就需要用到记录联合

  • union或者union all隔开即可实现:区别前者会将多个查询结果合并后并且进行去除重复后返回;后者则直接合并不去重复
  • 联合的条件:查询的列个数要相等

你可能感兴趣的:(PHP,后端,MySQL)