数据库基本概念

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

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是在聚合前就对记录进行过滤,应该尽可能的对记录进行先过滤
  • 可以同时混合使用多个聚合函数



表连接

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

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

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

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


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

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


子查询

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

  • 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基础知识相关推荐

  1. MySQL工作中的实际用_总结工作中经常用到的mysql基础知识

    总结工作中经常用到的mysql基础知识 发布时间:2020-06-08 11:27:30 来源:51CTO 阅读:217 作者:三月 本文主要给大家介绍工作中经常用到的mysql基础知识,文章内容都是 ...

  2. mysql基础知识(二)

    这一篇是第二部分,要查看第一部分,请查看这个链接 mysql基础知识(一) DQL语言 1.1简单的单表查询 查询表的通用格式:select [distinct] [*] [列名1,列名] from ...

  3. mysql基础知识(一)

    mysql是主流的关系型数据库管理系统(RDBMS---relation database management system),操作是需要用SQL(Structured Query Language ...

  4. MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物

    MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...

  5. 【MySQL基础知识】查询、过滤数据关键字

    MySQL基础知识 一.检索数据 1. SELECT select是使用最广泛的检索数据的语句. 检索要查的表的所有列: select * from (表名称)... 检索要查的表的某一列或多列: s ...

  6. 快速学习mysql_快速学习MySQL基础知识

    这篇文章主要梳理了 SQL 的基础用法,会涉及到以下方面内容: SQL大小写的规范 数据库的类型以及适用场景 SELECT 的执行过程 WHERE 使用规范 MySQL 中常见函数 子查询分类 如何选 ...

  7. MySQL基础知识之增删改查

    MySQL基础知识之增删改查 MySQL基本语法: 1.创建库:create database 库名: 创建带编码格式的库:create database 库名 character set 编码格式: ...

  8. linux增删查改语句,mysql基础知识之增删查改使用介绍

    mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的 ...

  9. MySql基础知识【一】

    Mysql基础知识 1. MySql是什么 2. 数据库设计的三大范式 2.1. 第一范式 2.2. 第二范式 2.3. 第三范式 3. Binlog的三种模式 3.1 Statement模式(默认) ...

  10. 2.MySQL 基础知识

    文章目录 MySQL 基础知识 知识点一 : MySQL命令行常用命令 知识点二 : 持久化 相关概念 知识点三 : 数据库 相关概念 知识点四 : DB 和 DBMS 关系图示 知识点五 : MyS ...

最新文章

  1. JS的Document属性和方法
  2. Excel 计算时间差
  3. html中的js作用,javascript中的innerHTML属性有什么作用
  4. OpenCV textDetectionModel和textRecognitionModel API的端到端的实例(附完整代码)
  5. 【Java虚拟机】Java虚拟机深度讲解、VisualVM工具、JVM调优
  6. java中日期计算时间差,java中依据,两个日期,计算时间差
  7. CF1129D Isolation(分块+DP)
  8. java中常用的String方法
  9. java fx border_JavaFx UI控件与代码间的绑定方法
  10. 如何优雅地停止Java进程
  11. Axure教程-新手入门基础(小白强烈推荐!!!)
  12. JavaScript如何实现汉字按拼音首字母分组拼序
  13. 关于MSNSHELL加密MSN聊天记录问题
  14. 制作简单时钟logo
  15. Java面向对象编程——继承
  16. 限幅二极管基础知识详解
  17. 微信小程序小白知识点bindtap()和this.setData({})
  18. 学完计算机专业英语感受,学习计算机专业英语的心得体会
  19. 【IoT】 产品设计:如何做MRD和BRD?
  20. 智慧校园整体解决方案-最新全套文件

热门文章

  1. c++怎么输入带有空格的字符串_C 语言入门 11 fscanf() 函数对空格的处理
  2. oracle表分区设计_ORACLE 分区表的设计
  3. 从字符串数组中寻找数字的元素
  4. 怎样查看MySQL是否区分大小写
  5. AndroidM 内核空间到用户空间接口类型
  6. Visual Studio2010重新安装后,冲突问题
  7. C++_new创建的数组作为参数传递
  8. POJ 2185 Milking Grid (KMP,GCD)
  9. 解决Unable to locate theme engine in module_path: pixmap
  10. showcase basketball stadium