什么是数据库?
数据库(Database)就是一个存储数据的仓库,这个仓库按照特定的格式对数据进行存储。我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失,所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。
我们常说 XX 数据库,其实实质上是 XX 数据库管理系统(DBMS)
数据库的发展史
萌芽阶段:文件系统
使用磁盘文件来存储数据。(早期计算机使用的磁盘是软盘,如今常用的磁盘是硬盘)
初级阶段:第一代数据库
出现了网状模型、层次模型的数据库
中级阶段:第二代数据库
关系型数据库和结构化查询语言
高级阶段:新一代数据库
“关系-对象”型数据库
数据库分类
目前数据库主要分为传统的关系型数据库(SQL)和非关系型数据库(NoSQL),当然还有近几年新出现的NewSQL新型数据库、分布式数据库等等。
常见的关系型数据库有MySQL、 Microsoft SQL Server、Oracle、PostgreSQL、DB2、Microsoft Access 等。
常见的非关系型数据库有 Neo4j、MongoDB、Redis、Memcached、MemcacheDB 和 HBase 等。
关系型数据库: (SQL)
MySQL、Oracle、Sql Server, DB2,SQLlite
通过表和表之间,行和列之间的关系进行数据的储存, 学员信息表,考勤表......
关系型数据库相关常用术语
关系 :关系就是二维表,其中:表中的行、列次序并不重要
列:一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
优点
二维表结构直观,易理解
使用SQL语句操作非常方便,可用于比较复杂的查询,有明显的层次结构
非关系型数据库: (NoSQL) Not Only
Redis,MongDB
非关系型数据库,对象储存,通过对象的自身的属性来决定
DBMS(数据库管理系统)
数据库的管理软件,科学有效的管理我们的数据。维护和获取数据;
MySQL,数据库管理系统
NoSQL大致可以分为四种:
分类 | 数据模型 | 优势 | 举例 |
键值数据库(key-value) | 哈希表 | 查询快、易部署、高并发 | Redis、Memcached |
列存储数据库 | 列式数据存储 | 查询快,数据压缩率高,不需要额外建立索引 | HBase |
文档型数据库 | 键值对扩展 | 将数据以文档的形式储存,数据结构不定 | MongoDB |
图数据库 | 节点和关系组成的图 | 利用图结构的相关算法 | Neo4j、JanusGraph |
总结:
关系型数据库和非关系型数据库的区别:
数据存储方式:非关系型数据库的存储方式是KEY-VALUE的形式、文档等形式,而关系型数据库只支持单一的存储方式。
查询效率:关系型数据库存储于磁盘,非关系型数据库存储于缓存,效率比关系型数据库更高。
事务:关系型数据库支持事务处理,可进行事务回滚。
成本:非关系型数据库基本是开源的,不需要像oracle花费大量的成本购买
SQL
结构化查询语言(Structured Query Language)简称SQL,1974年由Boyce和Chamberlin提出,是一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理 关系型数据库。为什么强调标准语言?我们知道关系型数据的主要三大实现者分别是,Mysql,MS SQLServer,Oracle。
它们实现数据存储的底层引擎或许不同,但提供出来管理数据的编程语言必须遵循 SQL 规范,但可以定制添加属于自己的额外语法,这些额外的、SQL 之外的语法又被称作它们各自的『SQL方言』。
所以如果你拿着 SqlServer 的方言跑到 Mysql 里去执行,那很大程度上是会报错的。因为sqlserver和mysql虽然都遵循着sql规范,但是它们又添加了属于自己的语法。所以语法是有区别的
SQL语法
一个数据库通常包含一个或多个表。每个表都有一个名字,表包含带有数据的记录(行)。表中的行也叫记录,列也叫字段或属性
sql对大小不敏感,SELECT与select是相同的
每条sql语句使用分号结尾
这里我们选择mysql来练习sql语法。可以使用phpstudy自带的sql控制台来练习
MySQL
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司
开源、免费
使用标准的sql语句查询
MySQL5.0版本以上新增了 information_schema 数据库
如何搭建网站
搭建网站的条件:操作系统,web服务器(中间件)、服务端脚本语言、数据库。所以我们可以用如下的架构去搭建web服务
LAMP:linux + apache + mysql + php
WAMP:windows + apache + mysql + php
这里使用phpstudy开启web服务器
MySQL注释
MySQL数据库注释大概有以下几种:
#
--(杠杠空格) (注入中经常用到的)
/* ..... */
/*! .... */ 内联查询
MySQL元数据库information_schema
mysql5.0版本之后产生了一个虚拟数据库information_schema,在这个数据库中有三个很重要的表:
information_schema: 该数据表存储了mysql数据库中的所有数据库的库名
information_schema.tables: 该数据库存储了mysql数据库中的所有数据库的表名
information_schema.columns: 该数据库存储了mysql数据库中的所有列的列名
默认库介绍
5.7版本及以上自带库为4个:information_schema、mysql、performance_schema、sys
5.7版本以下自带的库为4个:information_schema、mysql、performance_schema、test
test库:这个是安装时候创建的一个测试数据库,和它的名字一样,是一个完全的空数据库,没有任何表,可以删除。
sys库:Sys库所有的数据源来自:performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况
命令行方式进入mysql
进入MySQL的bin目录下,并打开cmd
执行如下命令,然后按回车,输入密码
mysql.exe -u root -p
增
新建数据库
create database 数据库名;
新建表
使用 create table 表名(字段1 字段类型,字段2 字段类型,字段3 字段类型,…); 来创建一张表。
create table student(id int, name char(20), age int);
给表增加字段
使用 "alter table 表名 add 字段名 数据类型; " 为已存在的表添加一个新字段。
alter table student add score float //新增score字段,类型为小数类型
表中插入数据
insert into 表明(字段1,字段2,...)values(值,值,...)
insert into xzc.student(id,name,age,score) values (1,"wgy",19,99)
insert into xzc.student(id,name,age,score) values (2,"xzc",25,98)
insert into xzc.student(id,name,age,score) values (3,"xya",1,90)
insert into xzc.student(id,name,age,score) values (4,"xja",1,90)
int:整数;char:字符串常数和变量可以包含一系列的字符;float:小数
系统是根据变量的类型为其分配不同容量的内存空间。
删
drop database 数据库名
查
select version(); //查看mysql版本信息
show databases //查询所有数据库
use 数据库名字 //进入数据库
show tables //查询当前所在数据库的所有表
查询表中的所有数据
select*from xzc.student
查询表中的id为1的数据
select*from xzc.student where id=2
查询表中的数据只显示前两行
select*from xzc.student limit 2