【1】基本操作

一、引言

生活中处处是数据,各种各样的数据,怎样存储且利用这些巨额数据?

你看,你工作中那么多的文件,那么长的表格,那么多的数据,你处理起来都快要疯了!

如何持久化存储数据?如何让读/写更便捷?如何让数据更有效?

所以才要来学习嘛!

数据库:存储数据的仓库,并且具有一定的规则,这样也好存好拿好取,方便。

他们都说关系型数据库与非关系型数据库,这首先是对其的一个分类,得先从关系型数据库(基于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.在编程语言中操作数据库

原文地址:https://www.cnblogs.com/direwolf22/p/11816980.html