数据库的基本概念
数据:
描述事物的符号记录称为数据(Data)
包括数字,文字,图形,图像,声音,档案记录等
以"记录"形式按统一的格式进行存储
表:
将不同的记录组织在一起,就形成了"表"
是用来存储具体数据的
数据库:
数据库就是表的集合,是存储数据的仓库
以一定的组织方式存储的相互有关的数据
当今主流数据库介绍
SQL_Server(微软公司)
面向Windows操作系统
简单,易用
Oracle(甲骨文公司产品)
面向所有主流平台
安全,完善,操作复杂
DB2(IBM公司产品)
面向所有主流平台
大型,安全,完善
MySQL(甲骨文公司收购)
免费,开源,体积小
关系数据库
关系数据库系统是基于关系模型的数据库系统,它的基本概念来自于关系模型
关系模型建立在关系代数的理论基础上,数据结构使用简单易懂的二维数据表,可以用简单“实体-关系”(E-R)图来直接表示
E-R图中包含了实体(数据对象),关系和属性三个要素
也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”,如银行客户,银行账户等
属性:
实体所具有的某一特性,一个实体可以有多个属性。例如“银行客户”实体集中的每个实体均具有姓名,地址,电话等属性
联系:
实体集之间的对应关系成为联系,也称为关系。例如,银行客户和银行账户之间存在“储蓄”的关系
所有实体及实体之间联系的集合构成一个关系数据库
关系数据库理解
关系数据库的存储结构是二维表格,反映事物及其联系的数据是以表格形式保存的
在每个二维表中,每一行称为一条记录,用来描述一个对象的信息;每一列称为一个字段,用来描述对象的一个属性
非关系数据库介绍
非关系数据库也被称作NoSQL(Not Only SQL),存储数据不以关系模型为依据,不需要固定的表格式
非关系型数据库作为关系数据库的一个补充,在日益快速发展的网站时代,发挥着高效率与高性能
非关系型数据库的优点:
数据库高并发读写的需求
对海量数据高效率存储与访问
数据库的高扩展性与高可用性的需求
非关系型数据库存储方式
键-值方式(key-value),以键为依据存储,删,改数据
列存储(Column-oriented),将相关的数据存储在列族中
文档的方式,数据库由一系列数据项组成,每个数据项都有名称与对应的值
图形方式,实体为顶点,关系为边,数据保存为一个图形
非关系数据库产品
Memcached是一个开源的,高性能的,具有分布式内存对象的缓存系统,以key-value方式存储数据
缓存数据以减轻数据库压力并能加快访问速度
加速动态web应用
缓存的内容保存在内存中
Redis也是一个以key-value方式存储数据的,数据也是保存在内存中,但会定期将数据写入磁盘中
相对于Mencached有以下特点:
支持内存缓存
支持持久化
数据类型更多
支持群集,分布式
支持队列
Redis应用举例:
数据库前端缓存
session共享
当需要缓存除了key/value之外的更多数据类型时
当缓存的数据需要长久保存时
MySQL数据库介绍
MySQL是一款深受欢迎的开源关系型数据库
Oracle旗下的产品
遵守了GPL协议,可以免费试用与修改
特点:
性能卓越,服务稳定
开源,无版权限制,成本低
多线程,多用户
基于C/S(客户端/服务器)架构
安全可靠
数据库的基本操作命令
查看数据库列表信息
[root@localhost ~]# mysql -uroot -p ##进入数据库
Enter password:
...
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
查看数据库中的数据表信息
mysql> use mysql; ##使用数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables; ##查看库中的表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db
显示数据表的结构(字段)
mysql> desc user; ##显示数据表的结构
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(10) | NO | PRI |
二分查找
以一个数据为参考,比它小的放左边,比它大的放右边
SQL语句概述
SQL语言
是Structured Query Language的缩写,即结构化查询语言
是关系型数据库的标准语言
用于维护管理数据库,如数据查询,数据更新,访问控制,对象管理等功能
SQL分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
DCL:数据控制语言
DDL语句操作
DDL语句用于创建数据库对象,如库,表,索引等
使用DDL语句新建库,表
mysql> create database test; ##创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use test; ##使用数据库
Database changed
mysql> create table info( ##创建表
-> ID int(3) not null,
-> 姓名 varchar(5) not null,
-> 住址 varchar(10) not null,
-> 分数 decimal default 0,
-> primary key (ID));
mysql> desc info; ##查看表结构
+--------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| ID | int(3) | NO | PRI | NULL | |
| 姓名 | varchar(5) | NO | | NULL | |
| 住址 | varchar(10) | NO | | NULL | |
| 分数 | decimal(10,0) | YES | | 0 | |
+--------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
DML语句操作
向数据表中插入新的数据记录
mysql> insert into info values (1,'周几轮','南京',80); ##表中插入数据
Query OK, 1 row affected (0.00 sec)
mysql> insert into info values (2,'王峰','南京',0);
Query OK, 1 row affected (0.00 sec)
mysql> insert into info values (3,'娜英','北京',default);
Query OK, 1 row affected (0.01 sec)
修改,更新数据库表中的数据记录
mysql> update info set 住址='上海' where ID=1; ##修改表中数据
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
在数据表中删除指定的数据记录
mysql> delete from info where ID=2; ##删除表中指定数据记录
Query OK, 1 row affected (0.00 sec)
mysql> select * from info; ##查看表内容(DQL语句)
+----+-----------+--------+--------+
| ID | 姓名 | 住址 | 分数 |
+----+-----------+--------+--------+
| 1 | 周几轮 | 上海 | 80 |
| 3 | 娜英 | 北京 | 0 |
+----+-----------+--------+--------+
2 rows in set (0.00 sec)
mysql> drop table info; ##删除表
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; ##查看表
Empty set (0.00 sec)
mysql> drop database test; ##删除库
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ##查看库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
DQL语句操作
DQL是数据查询语句,只有一条:select
用于从数据表中查找符合条件的数据记录
查询时可不指定条件
mysql> select * from info; ##查看表内容
+----+-----------+--------+--------+
| ID | 姓名 | 住址 | 分数 |
+----+-----------+--------+--------+
| 1 | 周几轮 | 上海 | 80 |
| 3 | 娜英 | 北京 | 0 |
+----+-----------+--------+--------+
2 rows in set (0.00 sec)
查询时指定条件
mysql> select 住址 from info where 住址='北京'; ##查看指定条件
+--------+
| 住址 |
+--------+
| 北京 |
+--------+
1 row in set (0.00 sec)
DCL语言操作
##设置用户权限(用户不存在时,则新建用户)
mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
##查看用户的权限
mysql> show grants for 'root'@'%';
+-------------------------------------------+
| Grants for root@% |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)
##撤销用户的权限
mysql> revoke all on *.* from 'root'@'%';
Query OK, 0 rows affected (0.00 sec)