在学习web后端以及web安全时不可避免地需要与数据库打交道,而各种数据库中应用最为广泛的就是mysql等关系型数据库了,sql注入更是web领域常见的安全隐患,所以系统学习一下sql是很有必要的。自己订了一个30天的学习计划,不说要学到多精通,但至少做到熟悉。
那么从今天开始,结合[番茄工作法],执行30天的学习计划。
一、基本概念
首先梳理清楚数据库的有关概念,分清我们常说的“数据库、SQL、MySQL”
这些名词。
1. 数据库
平时谈到“数据库”可能有两种含义:
1)MSSQLServer、Oracle等某种DBMS(DataBaseManagementSystem,数据库管理系统)。
2)以某种有组织的方式存储的数据集合(database)。
我们平常说到的MySQL、Oracal等确切地说应该是DBMS(数据库管理系统)
才对。而“数据库”以第二种概念较为合适。
2.关系数据库
反映和实现数据联系的方法称为数据模型,比较流行的数据模型有三种,即按图论理论建立的层次结构模型和网状结构模型以及按关系理论建立的关系结构模型。在不同模型的基础上建立了不同种类的数据库系统。
关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如某单位的职工关系就是一个二元关系。
由关系数据结构组成的数据库系统被称为关系数据库系统。
在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系表格的分类、合并、连接或选取等运算来实现数据的管理。
因此,可以概括地说,一个关系称为一个数据库,若干个数据库可以构成一个数据库系统。数据库系统可以派生出各种不同类型的辅助文件和建立它的应用系统。
3.SQL语言
SQL(Structured Query Language) 结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
有如下特点:
1)SQL不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL。
2)SQL简单易学。它的语句全都是由很强描述性的英语单词组成,而且这些单词的数目不多。
3)SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的互数据库操作
4)许多DBMS供应商通过增加语句或指令,对SQL进行了扩展。这种扩展的目的是提供执行特定操作的额外功能或简化方法。虽然这种扩展很有用,但一般都是针对个别DBMS的,很少有两个以上的供应商支持这种扩展。标准SQL有ANSI标准委员会管理,从而称为ANSI SQL,所有主要的DBMS,即使有自己的扩展,但都支持ANSI SQL。
二、MySQL
1.安装
弄清楚基本概念后,就要选用具体的软件进行学习了,在开发或者学习上我用的系统是Fedora22,自然首选开源软件,也就是MySQL了。由于MySQL被Oracle收购,虽然仍旧开源,但现在社区内更流行的是其分支——MariaDB,完全兼容MySQL,Fedora软件源里提供的也是MariaDB。以后提到的所有概念、命令,皆以Fedora22,MariaDB10(x86_64)
为准。
mariadb分客户端和服务端:
服务端包括一组在服务器主机上运行的程序和相关文件(数据文件、配置文件、日志文件等),通过运行程序启动后,即启动了数据库服务,也称为运行了数据库服务器。
客户端系统则是连接数据库服务器,用来执行查询、修改和管理数据库中的数据的程序。客户端系统也由一组软件组成,如mysql命令行工具、mysqldump导出工具等;
用以下命令安装mariadb和mariadb-server:
sudo dnf install mariadb mariadb-server
要进行命令行的相关操作,首先需要在主机上运行数据库的服务端,使用以下命令运行、停止或重启mariadb服务
#启动
sudo systemctl start mariadb
#停止
sudo systemctl stop mariadb
#重启
sudo systemctl restart mariadb
#开机启动
sudo systemctl enable mariadb
#禁止开机启动
sudo systemctl disable mariadb
2.入门教程
mysql基本概念和命令参考[21分钟MySQL入门教程]
3.用户相关操作
第一步,以root身份登录
在ubuntu中,以系统root用户登录mysql无需密码。
即首先切换到系统root用户,直接在命令行输入
mysql
即可使用root身份登录数据库。
第二步,添加新用户
以root身份登入数据库以后,可以使用下列语法创建新用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
其中:
username – 你将创建的用户名;
host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如 果想让该用户可以从任意远程主机登陆,可以使用通配符%;
password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器;
例如:
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '123456';
CREATE USER 'pig'@'%' IDENTIFIED BY '';
CREATE USER 'pig'@'%';
具体可参考:
[Mysql命令行添加用户]
第三步,赋予新用户相应权限
由于mysql的安全策略,每个用户拥有的对数据库的操作权限是不同的,对某个用户,我们可以限制其只能在何处登录、只能操作哪些数据库的哪些表、对某个库的某个表能进行哪些操作(增删改查等),可以控制到非常细致的程度。
具体语法如下:
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明: privileges – 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所 的权限则使用ALL.;databasename – 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用* 表示。
我们学习的过程中,为一个用户单独创建一个数据库,赋予其全部操作权限就好,具体操作:
create database mydb;
grant ALL on mydb.* to 'zeta'@'%';
第四步,普通用户登录
mysql -u 用户名 -p
然后输入密码即可。
备忘,修改用户密码
- 以root身份登录mysql
mysql>use mysql;
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='username';
mysql> FLUSH PRIVILEGES;
mysql> quit;
- 以root身份登录mysql
mysql>use mysql;
mysql> SET PASSWORD FOR username=PASSWORD('new password');
mysql> QUIT