在真实的项目开发中,用户数据如果保存在内存中会有什么问题?
- 如果服务器突然挂了,内存中的数据就会销毁。
- 用户数据量可能很大,内存不能满足需求。
用户的数据应该持久化,永久的保存起来。
我们使用数据库来保存数据,数据库的本质是以文件的形式保存在硬盘上,所以关机开机之后数据仍然存在不会丢失。
使用数据库的好处
如果不使用数据库又想持久化数据怎么办?
我们可以自己创建一个文件保存数据。比如保存用户数据,姓名、年龄、身高
user.txt文件
姓名 年龄 身高 所在公司名称 公司地址 公司网站地址
老李 30 175 滴滴 北京西二旗 www.diid.com
老张 25 185 京东 北京亦庄 www.jd.com
老王 18 165 滴滴 北京西二旗 www.diid.com
这种方式保存数据,需要定义好保存格式,并且插入数据、删除数据非常麻烦,程序员需要做大量的工作,并且很容易出错,而且数据量如果非常大,内存也不够用。
并且观察上面的数据可以发现老李和老王很多信息是重复的,比如公司信息。这就会造成很多重复数据,占用硬盘空间,如果使用数据库存储数据,这些冗余信息只需要存储一份,并且以后如果公司信息发生变化,比如地址变化,在数据库中只需要改一份就可以了。
所以在企业开发中使用数据库存储数据。
使用数据库的好处:
- 可以高效的存储、查询、修改、删除数据
- 减少重复、冗余的数据
- 提高数据的安全性还有很多权限管理
MySQL
MySQL是一款开源的关系型数据库。
MAC下载地址
Mac系统上MySQL默认安装路径为
/usr/local/mysql/bin
配置环境变量
编辑vim .bash_profile
PATH=$PATH:/usr/local/mysql/bin
这里有一篇文章讲解如何设置root密码root密码忘记之后如何修改
配置数据库编码
Mac MySQL 默认情况下编码为 拉丁文 编码,不支持中文,需要更改为UTF-8编码来支持中文等国际化字符。
更换编码的步骤:修改配置文件my.cnf增加数据库编码配置,重新启动数据库服务即可。
步骤:
- 在 /etc 文件夹中增加配置文件 my.cnf 配置数据库编码,my.cnf 文件内容如下 ```cpp [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character-set-server=utf8
[client]
为了避免意外错误可以下载配置文件: [http://doc.canglaoshi.org/mysql_mac/my.cnf.zip](http://doc.canglaoshi.org/mysql_mac/my.cnf.zip)
2. 将下载的文件拷贝到/etc 目录下
```cpp
sudo cp ~/Downloads/my.cnf /etc
这个命令的作用是将下载文件夹中的 my.cnf 文件复制到 /etc 文件夹,其中:~/Downloads 代表下载文件夹。
由于安全原因,命令执行期间需要输入系统用户密码.
- 重启MySQL
- 检查配置是否成功
a) 登录
mysql -uroot -p
b) 执行SQL命令检查数据库编码:
show variables like 'char%';
显示结果
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.29-macos10.14-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
MySQL使用步骤
MySQL安装后会开启一个进程,默认端口号为3306,客户端以后发送的指令(SQL语句)都是通过3306端口到达服务器。
MySQL和TomCat是平行关系,都会在服务端占用不同端口。
每个数据库里面可以存放多张表,表可以理解类似于Excel表格的东西。