SQL指的是使用SQL语言来对数据库中数据进行操作的数据库系统,通常所指的是关系型数据库系统,如我们常见的:
NoSQL指的是不用用SQL语言对数据库操作数据的系统,NoSQL的含义是“No Only SQL”——不仅仅有SQL的意思,但是这类系统大多数并不是使用SQL语言来操作数据库的,并且这类系统通常都是非关系型数据库,如:
近几年,NoSQL大行其道,并且有一种说法,NoSQL最终将会替代SQL数据库,成为数据存储的主力。不过,从目前来说两者的使用情况,SQL类系统还是处于绝对的霸主地位。
这两种数据库都有自身的特点,我们使用它们用于不同的场景
姓名 | 性别 | 生日 | 注册时间 |
---|---|---|---|
张三 | 男 | 1980-1-28 | 2018-12-12 |
李四 | 男 | 1991-2-3 | 2018-11-21 |
王二 | 男 | 1998-3-6 | 2018-05-08 |
值得注意的是,现在很多关系型数据库都支持一种列属性——JSON,在JSON列中可以存储非结构化的数据,这就是关系型数据库也有了一些非关系型数据库的特点,可以存储非关系型数据。但是,这也仅限使用JSON类型的这种列,从整体上来看,关系型数据库存储还是这种结构化的
支持事务的原子性A,一致性C,隔离性I,持久性D特性
支持使用SQL语言对存储在其中的数据进行操作
数据之间存在一定关系,需要关联查询数据的场景
什么是数据库数据之间的关系呢?
举个例子:订单和订单商品之间存在什么样的关系——一个订单可以包含多个商品,而某一个订单中的商品只能属于某个订单。
再举个例子:一个博客只能属于一个博主,一个博主可以有多个博客,这就是博主的博客和博主的关系
需要事务支持的业务场景
比如在金融类、电商类的数据库中,我们谁也不希望自己账号中的钱某明奇妙的减少,因此一定要使用关系型数据库
需要使用SQL语言灵活操作数据的场景
{"姓名":"张三","性别":"男","出生日期":"1980-01-28","注册时间":"2018-12-12"}
{"姓名":"李四","性别":"男"}
{"姓名":"王二","性别":"男","电话":"13800000001"}
我们可以看到张三、李四、王二这几个人可以具有不同的属性,这相对于关系型数据库系统来说,要灵活的多,不用一开始就把数据结构固定下来。但是,也又一些问题,就是每一行都要列数据之外还要包括我们的列名,所以如果不考虑压缩的情况下,从数据空间占用来说,存储相同的数据非关系型数据库占用更多的空间。
我们可以使用数据库排行榜来看下
前三名是Oracle、MySQL、SQL Server,从评分来看,要比PostgreSQL高出2倍,前四名都是关系型数据库,而MongoDB属于第五位的,也是排名最高的非关系型数据库,这也反映出了关系型和非关系型数据库的使用情况。同时,在前三名中只有MySQL是开源的,让我们免费来使用,所以在项目中不考虑软件成本的话,可以考虑Oracle或SQL Server,否则MySQL绝对是最佳的选择
名称 | 系统 | 版本 | 内存大小 |
---|---|---|---|
MySQL | Linux | Red-Hat(64-bit) | 512M |
位置 | 文件大小 | 分配 |
---|---|---|
自定义 | 20G | 动态分配(不会立即分配20G) |
网络 | 存储 | 分配 |
---|---|---|
桥接网卡(可使用内网ip连虚拟机) | 选择iso文件位置 | 动态分配(不会立即分配20G) |
选择语言 | 编解 | 创建root密码 | 点击Reboot重启 | 登录 |
---|---|---|---|---|
英语 | 将灰色icon点亮(选择默认就可以) | 创建 | 重启耗时约1分钟 | 使用root账号密码 |
网络
上一步网络没有配置好,由于有其它的解决方法来替代,如docker或本机安装windows版,因此就没有再使用virtualbox
我们不能使用root账号来启动服务,因此需要给MySQL服务创建一个账号
adduser mysql
在mysql目录下建立目录
mkdir data sql_log undo
data | sql_log | undo |
---|---|---|
存放数据 | sql执行日志 | undo文件 |
该变创建目录的属主,让mysql用户拥有写权限
chown mysql:mysql -R data/ sql_log/ undo/
为了使用方便,需要在系统变量中添加
export PATH=$PATH:/user/local/mysql/bin
这样就可以在系统的任何目录执行MySQL的命令了,还需要对系统参数进行应用
source /etc/profile
在MySQL5.7之后,初始化需要使用mysqld命令了
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
需要将mysql目录下的support-files目录mysql.server 复制到/etc/init.d/目录下并命名为mysqld
cd support-files;
cp mysql.server /etc/init.d/mysql
接下来,可以使用脚本启动服务了
/etc/init.d/mysqld start
Starting MySQL... SUCCESS!
可以使用ps查看MySQL服务是否存在
ps -ef | grep mysql
在sql_log目录下的mysql-error.log文件中查看初始化的用户名密码
cd sql_log;
grep password mysql-error.log
2019-02-20T05:57:46 5 [Note] [MY-010454] A temporary password is generated for root@localhost: &oz2ZhelBvi
mysql -uroot -p
Enter password:
修改初始的密码
alter user user() identified by '123456';
Query OK, 0 rows affected(0.11 sec)
退出
exit
重新登陆就要使用新的密码了