MySQL是最流行的关系型数据库管理系统,那么问题来了:什么是关系型数据库呢?还有其他类型数据库嘛?
一、数据库类型
关系型数据库:数据结构是表,由二维表及其之间的联系组成的数据组织(MySQL、SQLServer)
优点:
(1)易于维护:都是使用表结构,格式统一;
(2)使用方便:SQL语言通用,可用于复杂查询;
(3)复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询
缺点:
(1)读写性能比较差,尤其是海量数据的高效率读写;
(2)固定的结构,灵活差;
(3)高并发读写需求,关系型数据库对硬盘I/O是很大的瓶颈
非关系型数据库:严格上不是一种数据库,而是一种数据结构化存储方法的集合,也可以是文档或键值对等(Redis、MongoDB)
优点:
(1)格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式
(2)速度快:可以使用硬盘或随机存储器作为载体,关系型只能使用硬盘
(3)高扩展性
(4)成本低:数据库部署简单,基本都是开源的
缺点:
(1)不提供SQL支持,学习和使用成本较高
(2)无事务处理
(3)数据结构相对复杂,复杂查询性能
二、 mysql环境配置
老生常谈,工欲善其事必先利其器!相对于windows系列的下一步下一步的安装,我们着重看下Ubuntu环境下的MySQL安装与配置踩过的坑吧。
1.卸载mysql
为什么要先卸载呢?你能找到这篇文章,可能此刻的你已经在焦虑安装MySQL为什么老不成功呢,那么先按下面卸载掉它;如果你是第一次安装MySQL的话,请忽略这一步的操作。
# 先更新下Ubuntu的软件
sudo apt-get update
# 删除 mysql-server
sudo apt-get remove mysql-server
# 删除和mysql相关的服务
sudo apt-get autoremove mysql-server
# 删除 mysql-common
sudo apt-get remove mmysql-common
# 清除残留数据
dpkg -l | grep ^rc | awk \'{print $2}\' | sudo xargs dpkg -P
2.安装mysql
# 坑就在这里,记得之前安装的时候是会让输入用户名和密码的,但不知道怎滴就没了
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
# 查看MySQL服务是否安装成功
sudo netstat -tap | grep mysql
3.修改mysql配置文件
sudo vi /etc/mysql/mysql.conf.d
\'
# 将 bind-address=127.0.0.1 修改为 bind-address=0.0.0.0
# 也可以改成你指定终端的IP地址
bind-address=0.0.0.0
\'
# 启动MySQL服务
sudo /etc/init.d/mysql restart
# 重启MySQL服务
sudo /etc/init.d/mysql restart
4.命令行操作数据库
$ sudo mysql -u root -p
Enter password:
# 直接就按Enter键就行了,因为在安装mysql-server的时候没有设置用户名和密码;虽然也可以操作数据库但是操作起来非常的不方便。
# 如果在数据库连接工具中连接该数据库就会报错:ERROR 1698 (28000): Access denied for user \'root\'@\'localhost\'
mysql> USE mysql;
mysql> SELECT user, plugin FROM mysql.user;
# 查询结果
+------------------+-----------------------+
| user | plugin |
+------------------+-----------------------+
| root | mauth_socket |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
| root | mysql_native_password |
+------------------+-----------------------+
5 rows in set (0.00 sec)
# 结果发现root的plugin=\'auth_socket\'并不是本地密码,因此需要修改它
# 修改root账户的密码和plugin的本地密码验证方式
mysql> UPDATE mysql.user SET authentication_string=PASSWORD(\'123\'), plugin=\'mysql_native_password\' WHERE user=\'root\';
# 刷新
mysql> FLUSH PRIVILEGES;
# 退出
mysql> exit;
# 用再次登录的时候就输入用户名密码就可以登录成功了
5.命令行操作数据库
mysql> SET GLOBAL validate_password_policy=0;
mysql> SET GLOBAL validate_password_mixed_case_count=0;
mysql> SET GLOBAL validate_password_number_count=3;
mysql> SET GLOBAL validate_password_special_char_count=0;
mysql> SET GLOBAL validate_password_length=3;
mysql> UPDATE mysql.user SET authentication_string=PASSWORD(\'123\'), plugin=\'mysql_native_password\' WHERE user=\'root\';
mysql> FLUSH PRIVILEGES;
mysql> exit;
6.访问数据库
-- 解决密码问题:https://blog.csdn.net/qq_32799165/article/details/83574665
-- mysql -u root -h 127.0.0.1 -p
GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'\'IDENTIFIED BY \'rootpassword\' WITH GRANT OPTION;
FLUSH PRIVILEGES;
7.授权管理
-- 用户管理特殊命令(PS:用户权限相关数据保存在mysql书库的user表中,不建议直接对其操作)
-- 创建用户
CREATE USER \'用户名\'@\'IP地址\' IDENTIFIED BY \'密码\';
-- 删除用户
DROP USER \'用户名\'@\'IP地址\';
-- 修改用户
RENAME USER \'用户名\'@\'IP地址\' TO \'新用户名\'@\'新IP地址\';
-- 修改密码
SET PASSWORD FOR \'用户名\'@\'IP地址\' = PASSWORD(\'新密码\');
--
-- 用户权限管理(默认权限什么都没有)
-- 查看权限
SHOW GRANTS FOR \'用户名\'@\'IP地址\';
-- 授权
-- 权限[ ALL PRIVILEGES 除grant外的所有权限
-- SELECT 仅查权限
-- SELECT,INSERT 查和插入权限
-- ...
-- USAGE 无访问权限
-- ALTER 使用alter table
-- ALTER ROUTINE 使用alter procedure和drop procedure
-- CREATE 使用create table
-- CREATE ROUTINE 使用create procedure
-- CREATE TEMPORARY TABLES 使用create temporary tables
-- CREATE USER 使用create user、drop user、rename user和revoke all privileges
-- CREATE VIEW 使用create view
-- DELETE 使用delete
-- DROP 使用drop table
-- EXECUTE 使用call和存储过程
-- FILE 使用select into outfile 和 load data infile
-- GRANT OPTION 使用grant 和 revoke
-- INDEX 使用index
-- INSERT 使用insert
-- LOCK TABLES 使用lock table
-- PROCESS 使用show full processlist
-- SHOW DATABASES 使用show databases
-- SHOW VIEW 使用show view
-- UPDATE 使用update
-- RELOAD 使用flush
-- SHUTDOWN 使用mysqladmin shutdown(关闭MySQL)
-- SUPER 使用change master、kill、logs、purge、master和set global。还允许mysqladmin