MySQL数据库知识复习

  1. 什么是数据库?

所谓数据库,就是存储数据的仓库。数据有多种形式:文字,图片,电影

  1. 什么是数据库系统?

管理数据库的软件就被称为数据库系统。数据库系统一般分为两个部分:数据库(DB),数据库管理系统(DBMS)

  1. 数据库在Web程序开发中重要地位

动态网站基本上都是要对数据进行操作。例如新闻网站:当我们浏览新闻的时候,网页的内容会经常发生变化,框架是不会变的。这就是一个典型的动态网页。动态网页的数据就是存储在数据库里面。

PHP连接数据库执行过程

  1. 为什么选择MySQL和PHP进行合作

理由很简单,全都免费,中小企业的福音

  1. 结构化查询语言

SQL:结构化查询语言

SQL可以分为4个部分:DML,DDL,DQL,DCL

DML:数据操作语言,用于操作数据库中的数据,例如insert,update,delete

DDL:数据定义语言,用于定义和管理数据对象,create,drop,alter

DQL:数据查询语言,用于查询数据的,select

DCL:数据控制语言,主要用于权限上面的修改,GRANT,commit,rollback

  1. 数据库相关操作

既然要操作数据库,那么首先需要连接数据库

语法:mysql  -h 服务器主机地址 –u 用户名 –p 用户密码

-h:指定所要连接的数据库服务器的位置,可以是IP地址,也可以是服务器域名

-u:数据库服务器所使用的用户名

-p:连接数据库服务器所使用的密码

  1. 查看当前数据库系统里面的所有数据库

Show  databases

  1. 创建新用户并授权

Mysql里面默认的用户是root,我们可以通过grant语句来创建新用户并且授权

语法:

Grant  权限  on 数据库.数据表  to  用户名@登录主机  identified  by “密码”

示例:创建一个叫做xiejie的用户,权限是可以操作所有的数据库的所有表,密码是123

all 代表所有权限

*.* 代表所有数据库的所有数据库表

查看mysql数据库里面的所有用户

语法:

Select  distinct  concat(‘user:’ ’’,user,’’’@’’’,host,’’’;’)as query from mysql.user

查看具体某一个用户的权限

语法:

Show grants for ‘用户名’@’主机名’;

删除用户

方法一:

语法:drop user ‘用户名’@’主机名’

如下:

方法二:

语法:

Delete from mysql.user where host=’主机名’ and user=’用户名’

示例:

Drop和delete的区别

Drop就是完全删除,包括权限表里面对应的权限信息和其他相关信息

Delete只是将该用户删除,并没有删除权限表相关的数据。后期如果重新建立一个同名的用户的话,权限就会继承之前的权限

  1. 数据库相关操作

创建数据库

语法:create  database 数据库名;

查看字符集

语法:show  variables like ‘char%’;

校对规则:所谓校对规则,就是排序的方式,比较的规则。简单来讲就是按照什么样的规则进行排序

查看mysql里面的校对规则:

Show collation;

Mysql中校对规则部分截图

_ci:对大小写不敏感

_cs:对大小写敏感

_bin:基于二进制编码进行比较

所以我们创建数据库的时候可以指定字符集和校对规则

语法:

Create database 数据库名 character set 字符集 collate 校对规则

如果要使用数据库,需要先指定哪一个数据库

Use 数据库名

删除数据库

语法:drop database 数据库名

修改已经创建好了的数据库的字符集和校对规则

语法:

Alter  database 数据库名

[character set  字符集 collate 校对规则];

查看当前使用的数据库

Select database()

查看数据库

方法有2种:

显示所有的数据库

Show databases

显示数据库创建语句

Show create database 数据库名

我们可以在后面添加一个\G,使其格式化输出,方便我们查看

数据表相关

建立数据表

语法:

Create  table  表名(字段名1  数据类型,字段名2  数据类型,字段名2  数据类型…);

创建数据表的时候也可以指定表的字符集和校对规则

查看数据表:3种方法

方法1:

Describe 表名

有一个简写:desc就是Describe的简写

查看所有数据表

Show tables

查看建表语句

Show create table 表名\G

加了\G的情况

数据表相关操作

修改表名

Alter table 原表名 rename 新表名

方法2:rename table 旧表名 to 新表名

给数据表添加列

语法:alter table 表名 add 新列名 数据类型

如果想要新添加的字段在所有字段的最开头,后面再添加一个first关键字即可

修改某一个字段位于另外一个字段后面

语法:alter table 表名

Modify 字段名1 数据类型 after 字段名2

删除某列

Alter table 表名

Drop 列名

修改字段的数据类型

语法:alter table 表名

Change  原字段名  新字段名  新数据类型

删除表

Drop table 表名

MySQL里面的数据类型

MySQL里面的数据类型大致可以分为5类:整数数据类型,浮点型数据类型,字符串数据类型,日期时间数据类型,二进制数据类型

整数数据类型

整数数据类型大致又分为5类:TINYINT(1),SMALLINT(2),MEDIUMINT(3),INT(4),BIGINT(8)

浮点型数据类型:分为3种,float(4),double(8),decimal(17)

字符串数据类型:分为6种,char,varchar,TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

char和varchar:char是定长,varchar是变长

char(5)abc  实际占用内存还是5个字节

varchar(5)abc  根据数据的长度实际占用的长度会改变,这里因为abc只有3个字节,所以只占用3个字节

这两个不存在谁好谁坏,char是省时间,varchar省空间

时间日期数据类型:分为5种,DATE,TIME,YEAR,DATETIME,TIMESTAMP

时间戳:所谓时间戳,就是从1970年1月1日0时0分0秒到现在的总秒数

数据的完整性

要实现数据的完整性,方法有4种:实体完整性,域完整性,引用完整性,自定义完整

实体完整性

所谓实体,就是一条完整的数据,换句话说,就是一行信息


姓名


年龄


分数


性别


张三


18


100



李四


20


99


保证实体完整性:主键约束和唯一约束

在创建表的时候,在字段后面添加primary key关键字

例如:创建表时id作为主键示例:

主键事实上就等于非空+唯一

指定某个字段为主键的方法二:

唯一约束:unique指定某一字段的值必须是唯一的

设置了唯一约束以后,字段的值就必须是唯一值

证明:主键=非空加唯一

域完整性:数据类型,非空约束,默认约束,检查约束(mysql不支持检查约束)

所谓域,就是指一列

数据类型:我们在创建表的时候指定数据类型,一定程度就是实现了域完整性(列完整性)例如age列是填写年龄的,我们将其数据类型指定为int后该列的数据类型就只能是int型,从而保证了域完整性

非空约束:not null

默认约束:给某一个字段默认值

Default

引用完整性

引用完整性是通过外键约束来实现

一个表的某一个字段是引用的另外一张表的主键,该字段就被称之为外键

示例:有两张表:班级班,一个是学生表

班级表:有3个班,分别是pg37,pg39和youxiban

学生表:

自定义完整性

就是由用户自己指定约束条件。

设置字段自动增加  auto_increment

设置了自动增长后字段可以自动增长

注意:设置自动增长时,该字段需要是主键或者设置了非空约束

存储引擎

所谓存储引擎,实际上就是指存储表的类型是什么

查看mysql里面的存储引擎

Show engines;

MyISAM:之前mysql主打的是MyISAM存储引擎

InnoDB:现在mysql主打的是InnoDB

使用DML语句更改数据

DML语句无外乎就是3个,增加,删除,修改

添加语句

Insert  into  表名(要添加信息的字段名) values (对应字段的值)

如果是给所有字段添加数据

Insert  into  表名 values (对应字段的值)

Insert into 表名

Set 字段名1=值1,字段名2=值2…

更新数据

Update 表名

Set 字段名1=值1,字段名2=值2…

需要注意的是:更新数据一定要和where进行配合使用

删除数据

方法有2种:

通过delete关键字来删除数据

语法:delete from 表名

Where  条件表达式

注意点:删除某条数据以后,再重新添加新的数据,新的数据的主键部分的编号不做改变

删除数据,后面的数据的主键编号也不会改变

删除全部数据

Delete from 表名

Truncate 表名

Delete和truncate区别:

  1. Truncate是直接销毁表,然后重新建立一个一模一样的表,delete则是一条一条的进行删除,如果是要删除全表的话,truncate的效率要比delete要高
  2. 虽然truncate效率比delete高,但是没有delete灵活,因为delete可以指定具体删除某一条数据
  3. Truncate一般是被认为DDL语句,delete是被分为DML语句
  4. Truncate删除所有数据后再重新添加数据,自动增长的字段重新从1开始增长,但是delete的话从删除前的最大值+1开始

Truncate的情况:

Delete的情况

表的复制

方法一:

Create table 新表名 like 旧表名

注意:该方法只会复制表的结构,内容是不会被拷贝过去的

语法2:

Create table 新表名 as

(select * from 旧表名)

注意:该方法虽然可以复制内容,但是表结构不能得到完全的复制,自动增长和主键会丢失

语法3:

Create table 新表名 like 旧表名;

Insert into 新表名 select * from 旧表名;

DQL语句

DQL语句其实就是查询语句,就只有一个select

Select  * from 表名

Select 字段名1,字段名2… from 表名

按条件查询

用where关键字对信息进行过滤


=


等于


>


大于


!=


不等于


<


小于


>=


大于等于


<>


也是表示不等于


<=


小于等于

例如:查询年龄大于20岁的人的姓名

In:判断一个字段的值是否在一个集合里面

可以和not关键进行配合,表示不在某一个集合

Between..and:表示是一个范围

例如:要找18-20之间的人

可以和not配合,表示不再某一个范围

空值查询

Is null 代表空值查询

查询非空

Distinct:排除重复值

示例:找出学生有哪些年龄

注意:distinct只能放在查询字段的最前面,不能放在后面,放在后面会报错

模糊查询

模糊查询使用like关键字配合%和_

查询名字里面含有z字母的人

下划线代表的意思就是一个_就匹配一个字符

需要注意空格也要匹配一个字符,所以也需要一个_

如果要查询的内容里面也包含了%或者下划线,那么需要对其进行转义\

And

两个条件都必须满足

Or:满足一个条件就可以

聚合函数和分组

聚合函数如下表


函数名


作用


函数名


作用


Count()


返回某列的行数


Max()


最大值


Sum()


返回某列的和


Min()


最小值


Avg()


返回某列的平均值

主要注意一个平均数的计算

如果是使用系统提供的avg()函数,则有null值得字段不会被计算进去,根据实际业务需求,如果想要将null计算到平均数里面,则需要自己定义。

排序

排序的关键字是order by

升序 ASC  降序DESC

升序的关键字ASC是可以省略的

降序desc

分组:使用的关键字为group by

如下:

还有一个和group by关键字一起配合的使用的是having

Having:用于过滤

Where:用于过滤

Where是在分组前进行过滤,having是在分组后进行过滤

先用where进行id过滤,然后进行分组,最后再过滤出分组后的成绩

限制查询结果

Limit:可以指定返回多少行数据

语法:limit  a,b

A:代表开始的小标

B:代表总共显示多少条

例如:1-100   5-15   limit  4,11

为表取别名

关键字as

联表查询

  1. 什么是联表查询?

所谓联表查询,就是将多个表横向连接起来,进行查询。相比子查询,要更加容易理解。

  1. 外键

所谓外键,就是指一个字段去引用另外一张表的主键字段

外键约束:所谓外键约束,就是因为系统并不知道两张表之间的关系,所以我们添加外键约束来让系统知道两张表是存在引用关系

删除外键

语法:alter  table  表名(表名是有外键的那一张表)

Drop foreign key 外键名

  1. 表与表之间的关系

表与表之间的关系:一对一,一对多,多对多

一对一:人与身份证之间的关系

一对多:比如学生和班级之间的关系就是一对多,一个学生只可能属于一个班级,但是一个班级可以对应多个学生

多对多:例如菜市场,一个商家可以对应多个买主,一个买主也可以去多个商家买菜

  1. 联表查询

联表查询可以分为3类:内连接,外链接,以及自连接

内连接:inner  join

在mysql里面,如果直接执行inner join但是不给条件的话,会得出笛卡尔乘积。

这里有两张表

学生表 班级表

接下来我们来执行不给条件的内连接,会得到笛卡尔乘积

在mysql里面,如果内连接不给条件,那么可以得到笛卡尔乘积,这是mysql的特殊处理机制。在其他数据库管理系统里面要得到笛卡尔乘积,使用的关键字为cross join。

在mysql里面,使用cross join也能够正常的得到笛卡尔乘积

语法:(内连接中的inner关键字可以省略)

Select  字段 from 表1 join 表2 on 表1.字段=表2.字段

除了on以外,还有where关键字是可以用的

虽然两个关键字都能够得出相同的效果,但是on的效率要高于where

On:在内联之前就进行过滤

Where:产生了笛卡尔乘积以后进行过滤

外连接:

外连接分为3种:左外连接,右外连接,全外连接(mysql不支持全外连接)

使用union可以模拟出全外连接

左外连接:显示左表的全部数据

如下:修改学生表的数据如下,添加niuer同学,班级编号为4,但是在班级表里面没有编号为4的班级

接下来进行左外连接,把左边表的数据全部显示出来

右外连接示例

首先给班级表添加新的数据,如下:

接下来进行右外连接,所谓右外连接,就是将右表的数据全部显示出来,不管左表有没有,如果左表没有,显示为null

关于左表和右表的判断,非常简单,join左边的就是左表,join右边的就是右表

全外连接:在标准的sql,全外连接的关键字为full join

左表右表的数据都显示出来,虽然mysql不支持全外连接,但是可以使用union模拟全外连接

自连接:所谓自连接,就是自己连接自己,自连接的表来源源于同一张表,自连接其实就是内联或者外联的一种特殊情况

例如:有如下职员表

EmpID:员工编号  empName:员工姓名  leaderID:领导编号

查询员工的姓名和所属领导的姓名

复合条件连接查询

所谓复合条件连接查询,就是指在连接查询的基础添加一些过滤条件,如排序,limit

时间: 2024-08-25 08:06:25

MySQL数据库知识复习的相关文章

Mysql数据库知识总结(看资料总结出来的)

毕业到现在算起来做了3年多服务端开发了,毕业之后很少有时间想在学校一样可以抽出一些空余的时间对知识进行一个总结,到现在也是时候对一些关键的知识一个总结,今天趁着时间比较多,先来对用了3年多的开源关系型数据库mysql进行一下总结,整理了一下知识点可以分为以下几点进行: 一.基础知识 二.SQL优化与索引 三.数据库规范建议 四.数据库设计 五.数据库架构 一.基础知识 知识点主要包括:数据类型 常用函数 字符集 事务隔离级别 锁机制 (1).数据类型 数值类型 -- TINYINT.SMALLI

mysql 数据库知识

order by 字段    将查到的list集合按指定字段升序排序 order by 字段 DESC   将查到的list集合按指定字段降序排序 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组. 关键词 DISTINCT 用于返回唯一不同的值. SELECT DISTINCT 列名称 FROM 表名称 select id, distinct name from A; --会提示错误,因为distinct必须放在开头

MySQL数据库知识汇总(二)

原文地址:https://blog.51cto.com/13185351/2419095

MySQL数据库知识汇总(三)

原文地址:https://blog.51cto.com/13185351/2419100

MySQL数据库知识汇总(五)

原文地址:https://blog.51cto.com/13185351/2419104

MySQL数据库知识汇总(一)

原文地址:https://blog.51cto.com/13185351/2419089

MySQL数据库知识汇总(四)

原文地址:https://blog.51cto.com/13185351/2419102

MySQL数据库知识汇总(六)

原文地址:https://blog.51cto.com/13185351/2419105

2016最新高薪必备老男孩MySQL数据库DBA核心视频

2016最新高薪必备老男孩MySQL数据库DBA核心视频-第一到第十六部完整 涵盖10-30K能力高级运维人员必会的MySQL数据库知识的全部! http://edu.51cto.com/course/course_id-5533.html