一、引言
生活中处处是数据,各种各样的数据,怎样存储且利用这些巨额数据?
你看,你工作中那么多的文件,那么长的表格,那么多的数据,你处理起来都快要疯了!
如何持久化存储数据?如何让读/写更便捷?如何让数据更有效?
所以才要来学习嘛!
数据库:存储数据的仓库,并且具有一定的规则,这样也好存好拿好取,方便。
他们都说关系型数据库与非关系型数据库,这首先是对其的一个分类,得先从关系型数据库(基于E-R模型)学起!(E表示实体,R表示关系)
(1)文档型数据库与服务型数据库又是对其另一个分类。所以文档型与服务型有什么区别?
首先,介绍了一下sqlite:(转自:https://www.cnblogs.com/bwbfight/p/9306293.html)
SQLite是目前最流行的开源嵌入式数据库。
SQLite的主要特征:
1. 管理简单,甚至可以认为无需管理。
2. 操作方便,SQLite生成的数据库文件可以在各个平台无缝移植。
3. 可以非常方便的以多种形式嵌入到其他应用程序中,如静态库、动态库等。
4. 易于维护。
SQLite的主要优势在于灵巧、快速和可靠性高。
由于SQLite在运行时占用的资源较少,而且无需任何管理开销,因此对于PDA、智能手机等移动设备来说,SQLite的优势毋庸置疑。
SQLite的一些劣势:
1. C/S应用: 如果你有多个客户端需要同时访问数据库中的数据,特别是他们之间的数据操作是需要通过网络传输来完成的。在这种情况下,不应该选择SQLite。
由于SQLite的数据管理机制更多的依赖于OS的文件系统,因此在这种操作下其效率较低。
2. 数据量较大: 受限于操作系统的文件系统,在处理大数据量时,其效率较低。对于超大数据量的存储,甚至不能提供支持。
所以,在一些嵌入式应用、单机使用且数据量不大、方便移植且频繁读写文件的情况sqlite比较合适。多用户应用、大面积读写数据情况下就不合适喽。
其次,是服务型数据库:例如Mysql。数据存储在一个物理文件中,但是需要使用终端以tcp/ip协议连接,进行数据库的读写操作。它为你提供了这种服务而已!
(2)三范式
经过研究和对问题的总结,对于设计数据库提出了一些规范,这些规范被称之为范式。
第一范式:列不可拆分。
公安局管理系统:姓名=姓(1列)+名(1列)
学生管理系统:姓名=姓名(共1列)
你可以把“年月日”统一放在一列中存储,当然也可以“年”“月”“日”分开存储。根据具体应用的不同,有不同的处理方式。但一旦作为一个列,它就不能继续拆分了!
第二范式:唯一标识。
每一行都是一个object。至少能做出区分,它是不同于其他实体的。谁都不想和谁一样,是吧?
第三范式:引用主键。
(3)关系及存储
就像映射一样,有以下几种关系:
1对1:一个对象A对应一个对象B,1个对像B对应一个对象A。一一对应。A和B的关系存到A中也行,存到B中也行。
1对多:一个班级对应着多个学生,一个学生对应一个班级。这种关系要存在多的那一方(单个学生)中。
多对多:一个对象N对应多个对象M,一个对象M对应多个对象N。即:一个兴趣班有多个学生,一个学生报了多个兴趣班。关系要存在另一张新建的关系表中。
二、准备工作
Mysql是什么?下载Mysql。
Navicat是什么?下载Navicat。
sql是什么?
三、简单操作
1.使用终端操作数据库
登录数据库服务器:
mysql -uroot -p密码
查询数据库服务器中所有的数据库:
show databases;
语句以分号结尾。
如何选中某一个数据库进行操作:
use 库名;
退出数据库服务器:
exit;
如何在数据库服务器中创建自己的数据库?
create database test(库名);
mysql> use test; Database changed
如何查看某个数据库中所有的数据表?
mysql> show tables; Empty set (0.00 sec)
如何创建一个数据表?
mysql> create table pet( -> name VARCHAR(20), -> owner VARCHAR(20), -> species VARCHAR(20), -> sex CHAR(1), -> birth DATE, -> death DATE);
查看数据表是否创建成功:
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | pet | +----------------+ 1 row in set (0.00 sec)
查看表结构:
mysql> desc pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 6 rows in set (0.03 sec)
查看数据表中的记录:
mysql> select * from pet; Empty set (0.00 sec)
如何向数据表中添加数据记录?
mysql> INSERT INTO pet -> VALUES('Puffball','Diane','hamster','f','2000-09-22',NULL);
查询:
mysql> SELECT * FROM pet; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Puffball | Diane | hamster | f | 2000-09-22 | NULL | +----------+-------+---------+------+------------+-------+ 1 row in set (0.00 sec)
mysql> INSERT INTO pet -> VALUES('WangCai','ZhouXingChi','DOG','M','1999-09-21',NULL); Query OK, 1 row affected (0.08 sec) mysql> SELECT * FROM pet; +----------+-------------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------------+---------+------+------------+-------+ | Puffball | Diane | hamster | f | 2000-09-22 | NULL | | WangCai | ZhouXingChi | DOG | M | 1999-09-21 | NULL | +----------+-------------+---------+------+------------+-------+ 2 rows in set (0.00 sec)
上面会看到数据类型有字符型的,还有DATE类型的,那么在mysql中常用的数据类型还有哪些?
百度告诉你:MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。(哇塞,像字典、列表、元组这些它都没有耶!
详情可见:https://www.runoob.com/mysql/mysql-data-types.html
mysql> create table testType( -> number TINYINT);
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | pet | | testtype | +----------------+
mysql> desc testType; +--------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+------------+------+-----+---------+-------+ | number | tinyint(4) | YES | | NULL | | +--------+------------+------+-----+---------+-------+
mysql> INSERT INTO testType VALUES(127);
mysql> select * from testType; +--------+ | number | +--------+ | 127 | +--------+
mysql> INSERT INTO testType VALUES(128); ERROR 1264 (22003): Out of range value for column 'number' at row 1
总之,日期按照格式选择,数值、字符串按大小选择。
继续向表pet中添加一些数据之后:
mysql> select * from pet; +----------+-------------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------------+---------+------+------------+------------+ | Puffball | Diane | hamster | f | 2000-09-22 | NULL | | WangCai | ZhouXingChi | DOG | M | 1999-09-21 | NULL | | DNN | Huimin | Cat | f | 2018-07-07 | NULL | | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1909-08-27 | NULL | | Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1989-09-01 | NULL | | Whistler | Gwen | bird | NULL | 1996-04-21 | NULL | | Slim | Benny | snake | m | 2006-04-21 | NULL | | Puffball | Diane | hamster | f | 2009-10-12 | NULL | +----------+-------------+---------+------+------------+------------+
如何删除表中数据:
mysql> delete from pet where name='Fluffy';
如何修改表中数据:
mysql> update pet set name='Cuihua' where owner='ZhouXingChi';
总结:数据记录常见操作?
增加:INSERT
删除:DELETE
修改:UPDATE
查询:SELECT
2.使用可视化工具操作数据库
3.在编程语言中操作数据库