一.数据库简介
1.概念
数据库是一个按数据结构来存储和管理数据的计算机软件系统。简单来说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
2.SQL语言
SQL 全拼为 Structured Query Language, 即 “结构化查询语言”。
SQL语言诞生于1974年,是IBM提出的,但是关系型数据库在1970年已经出现,在没有出现SQL语言之前当时的查询语言依赖于复杂的数学逻辑和符号,查询语言成为关系型数据库发展的一个主要瓶颈,SQL的出现使没有接受过数学和计算机编程正规训练的用户也能简便的使用。
SQL 是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
3.关系型数据库
二.数据库相关术语和概念
数据库:数据库是一些关联表的集合。
数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列:一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性:参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
三.Linux数据库的开启和连接
1.安装数据库
sudo apt install -y mysql-server mysql-client
2.开启数据库服务
(1)Ubuntu : service mysql start|stop|restart|status
(2)Deepin : systemctl start|stop|restart|status mysqld
(3)CentOS7 : systemctl start|stop|restart|status mysqld
(4)CentOS6 : service mysqld start|stop|restart|status
3.连接数据库
各个 Linux 系统连接数据库都一样
语法: mysql -h localhost -uroot -pxxx -P3306
-h : host(ip地址) localhost = 127.0.0.1
-u : username(用户账户)
-p : password(密码)
-P : port(端口,默认端口3306)
第一次连接数据库时,可以输入:sudo mysql -uroot,直接进入数据库。
备注:第一次使用 root 连接后最好添加一个新的用户来操作。出于安全考虑,日常开发中最好不要使用 root,后面会介绍怎么创建新用户,并设置密码。
4.退出数据库
四种方式效果一样:
(1)exit (2)quit (3)\q (4)快捷键:Ctrl + d
5.强行进入数据库
如果我们一开始连接数据库时,输入‘sudo mysql -uroot’进不去时,或者在以后长时间不用数据库,忘记密码时,我们可以通过以下的操作进入数据库
(1)打开配置:sudo vim /etc/mysql/my.cnf
(2)可在文件后面添加以下一段:
[mysqld]
skip-grant-tables
如果文件中已存在 [mysqld] , 则直接将 skip-grant-tables 写到其下方即可。
(3)修改完成后,保存退出,重启服务:
8.0之前的版本:sudo systemctl restart mysqld
8.0之后的版本:sudo systemctl restart mysql.service
查看数据库版本:mysql --version
四.权限管理
1.MySQL权限的两个阶段
(1)第一阶段为连接验证,主要限制用户连接 mysql-server 时使用的 ip 及 密码
(2)第二阶段为操作检查,主要检查用户执行的指令是否被允许,一般非管理员账户不被允许执行 drop、delete 等危险操作。
2.权限控制安全准则
(1)只授予能满足需要的最小权限,防止用户执行危险操作。
(2)限制用户的登录主机,防止不速之客登录数据库。
(3)禁止或删除没有密码的用户。
(4)禁止用户使用弱密码。
(5)定期清理无效的用户,回收权限或者删除用户。
3.常用操作
(1)创建账户、权限授予
前面提到过,第一次使用 root 连接后最好添加一个新的用户来操作,这里会介绍如何创建新用户,并设置密码。
8.0之前的版本:
GRANT ALL PRIVILEGES on *.* to '⽤户名'@'主机' IDENTIFIED BY "密 码" WITH GRANT OPTION;
通过下面的命令刷新使权限生效
flush privileges;
ALL PRIVILEGES : 授予全部权限,也可以指定 select、insert 等
* . * : 代表该用户可以操作任何库、任何表
主机名可以使用’%', 代表允许该用户从任何机器登陆
WITH GRANT OPTION : 带有该子句说明允许用户将自己拥有的权限授予
8.0之后的版本:
CREATE USER `⽤户名`@`主机` IDENTIFIED BY '密码'; -- 创建账户
GRANT ALL ON *.* TO `⽤户名`@`主机` WITH GRANT OPTION; -- 授权
(2)修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';"
如果你在创建账户或者修改密码,出现了ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement的错误,不要惊慌,这可能是版本带来的问题,这时只需要再次输入:flush privileges; 来刷新就行了。
(3)查看权限
show grants; -- 查看当前用户的权限
show grants for 'abc'@'localhost'; -- 查看用户 abc 的权限
(4)回收权限
revoke delete on *.* from 'abc'@'localhos