MySQL数据库知识复习

 

  1. 什么是数据库?

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

 

  1. 什么是数据库系统?

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

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

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

PHP链接数据库执行过程服务器

 

 

 

 

 

  1. 为何选择MySQLPHP进行合做

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

 

  1. 结构化查询语言

SQL:结构化查询语言ide

SQL能够分为4个部分:DMLDDLDQLDCL函数

DML:数据操做语言,用于操做数据库中的数据,例如insertupdatedelete网站

DDL:数据定义语言,用于定义和管理数据对象,createdropalter编码

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

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

 

  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=’用户名’

示例:

 

Dropdelete的区别

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 新表名

 

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

 

 

给数据表添加列

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

 

 

若是想要新添加的字段在全部字段的最开头,后面再添加一个first关键字便可

 

 

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

语法:alter table 表名

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

 

 

删除某列

Alter table 表名

Drop 列名

 

 

修改字段的数据类型

语法:alter table 表名

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

 

 

删除表

Drop table 表名

 

 

 

MySQL里面的数据类型

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

 

整数数据类型

整数数据类型大体又分为5类:TINYINT1),SMALLINT2),MEDIUMINT3),INT4),BIGINT8

 

浮点型数据类型:分为3种,float4),double8),decimal17

 

字符串数据类型:分为6种,charvarcharTINYTEXTTEXTMEDIUMTEXTLONGTEXT

charvarcharchar是定长,varchar是变长

char5abc  实际占用内存仍是5个字节

varchar5abc  根据数据的长度实际占用的长度会改变,这里由于abc只有3个字节,因此只占用3个字节

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

 

时间日期数据类型:分为5种,DATETIMEYEARDATETIMETIMESTAMP

时间戳:所谓时间戳,就是从197011000秒到如今的总秒数

 

 

数据的完整性

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

 

实体完整性

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

姓名

年龄

分数

性别

张三

18

100

李四

20

99

保证明体完整性:主键约束和惟一约束

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

例如:建立表时id做为主键示例:

 

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

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

 

 

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

 

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

 

证实:主键=非空加惟一

 

 

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

所谓域,就是指一列

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

 

非空约束:not null

 

 

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

Default

 

 

引用完整性

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

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

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

班级表:有3个班,分别是pg37pg39youxiban

 

学生表:

 

 

 

自定义完整性

就是由用户本身指定约束条件。

 

设置字段自动增长  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 表名

 

 

Deletetruncate区别:

  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

相关文章
相关标签/搜索