所谓数据库,就是存储数据的仓库。数据有多种形式:文字,图片,电影mysql
管理数据库的软件就被称为数据库系统。数据库系统通常分为两个部分:数据库(DB),数据库管理系统(DBMS)sql
动态网站基本上都是要对数据进行操做。例如新闻网站:当咱们浏览新闻的时候,网页的内容会常常发生变化,框架是不会变的。这就是一个典型的动态网页。动态网页的数据就是存储在数据库里面。数据库
PHP链接数据库执行过程服务器
理由很简单,全都免费,中小企业的福音框架
SQL:结构化查询语言ide
SQL能够分为4个部分:DML,DDL,DQL,DCL函数
DML:数据操做语言,用于操做数据库中的数据,例如insert,update,delete网站
DDL:数据定义语言,用于定义和管理数据对象,create,drop,alter编码
DQL:数据查询语言,用于查询数据的,selectspa
DCL:数据控制语言,主要用于权限上面的修改,GRANT,commit,rollback
既然要操做数据库,那么首先须要链接数据库
语法:mysql -h 服务器主机地址 –u 用户名 –p 用户密码
-h:指定所要链接的数据库服务器的位置,能够是IP地址,也能够是服务器域名
-u:数据库服务器所使用的用户名
-p:链接数据库服务器所使用的密码
Show databases
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只是将该用户删除,并无删除权限表相关的数据。后期若是从新创建一个同名的用户的话,权限就会继承以前的权限
建立数据库
语法: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区别:
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
联表查询
所谓联表查询,就是将多个表横向链接起来,进行查询。相比子查询,要更加容易理解。
所谓外键,就是指一个字段去引用另一张表的主键字段
外键约束:所谓外键约束,就是由于系统并不知道两张表之间的关系,因此咱们添加外键约束来让系统知道两张表是存在引用关系
删除外键
语法:alter table 表名(表名是有外键的那一张表)
Drop foreign key 外键名
表与表之间的关系:一对一,一对多,多对多
一对一:人与身份证之间的关系
一对多:好比学生和班级之间的关系就是一对多,一个学生只可能属于一个班级,可是一个班级能够对应多个学生
多对多:例如菜市场,一个商家能够对应多个买主,一个买主也能够去多个商家买菜
联表查询能够分为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