体验简介

本试验提供一台根底环境为CentOS的ECS(云服务器)实例,点击体验。

咱们将会在这台服务器上安装mysql,而后学习根本的SQL语句。

体验此场景后,能够把握的常识有:

  1. MySQL装置。
  2. 根本SQL语句的应用。

背景常识

  • SQL:

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查问和程序设计语言,用于存取数据以及查问、更新和治理关系数据库系统。

  • 数据查询语言(Data Query Language,简称DQL):其语句也称为“数据检索语句”,用以从表中取得数据,确定数据怎么在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其余DQL罕用的保留字有WHERE、ORDER BY、GROUP BY和HAVING。这些DQL保留字常与其余类型的SQL语句一起应用。
  • 数据操作语言(DML:Data Manipulation Language):其语句包含动词INSERT、UPDATE和DELETE。它们别离用于增加、批改和删除。
  • 事务管制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包含COMMIT(提交)命令、SAVEPOINT(保留点)命令、ROLLBACK(回滚)命令。
  • 数据管制语言(DCL):它的语句通过GRANT或REVOKE实现权限管制,确定单个用户和用户组对数据库对象的拜访。某些RDBMS可用GRANT或REVOKE管制对表单个列的拜访。
  • 数据定义语言(DDL):其语句包含动词CREATE、ALTER和DROP。DDL语句用于在数据库中创立新表、批改、删除表(CREATE TABLE或DROP TABLE)、为表退出索引等。
  • 指针管制语言(CCL):它的语句包含DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT,用于对一个或多个表独自行的操作。
  • 云服务器ECS:

云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳固牢靠、弹性扩大的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您洽购IT硬件的后期筹备,让您像应用水、电、天然气等公共资源一样便捷、高效地应用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS继续提供创新型服务器,解决多种业务需要,助力您的业务倒退。

装置并配置MySQL

\1. 顺次执行如下命令,下载并装置MySQL。

wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-server --nogpgcheck

返回如下后果,示意MySQL装置胜利。

\2. 执行如下命令,启动MySQL 数据库。

systemctl start mysqld.service

\3. 执行如下命令,查看MySQL运行状态。

systemctl status mysqld.service

返回如下后果,示意MySQL失常运行。

\4. 执行如下命令,查看MySQL初始密码。

grep "password" /var/log/mysqld.log

返回如下后果。

\5. 执行如下命令,登录数据库。

mysql -uroot -p

返回如下后果,输出MySQL初始密码。

返回如下后果,示意登录胜利。

\6. 执行如下命令,批改MySQL默认明码。

阐明

  • 您须要将上面命令中的NewPassWord1.批改为您要设置的数据库明码。
  • 设置的新密码必须同时蕴含大小写英文字母、数字和特殊符号中的三类字符,否则会因为明码过于简略报错。
  • 留神每条残缺的SQL命令结尾都有一个半角分号(;),如果多行命令两头没有分号分隔,这些命令将不会执行,直至遇到一个分号。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassWord1.';

\7. 顺次执行如下命令,退出MySql从新登录。

exitmysql -uroot -p

创立数据库和创立数据表

\1. 应用create命令创立数据库,语法如下:

create DATABASE 数据库名;

执行如下命令,创立数据库Test。

create DATABASE Test;

\2. 执行如下命令,查看以后数据库列表,即可看到创立的Test数据库。

show databases;

\3. 执行如下命令,连贯Test数据库。

阐明

执行如下命令后,您就曾经胜利抉择了Test数据库,您的后续所有操作都会在Test数据库中执行。

use Test;

\4. 创立MySQL数据表。

创立MySQL数据表时须要以下相干信息:

  • 表名。
  • 表字段名。
  • 定义每个表字段。

创立数据表的SQL通用语法:

CREATE TABLE table_name(column_name column_type);

执行如下命令,在Test数据库中创立数据表web。

CREATE TABLE `web` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',  `url` varchar(255) NOT NULL DEFAULT '',  `rank` int(11) NOT NULL DEFAULT '0' COMMENT '排名',   PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

\5. 执行如下命令,查看数据库Test下的所有数据表。

show tables;

SQL的增删改查

\1. 应用INSERT INTO语句。

INSERT INTO语句用于向表中插入新记录。INSERT INTO语句能够有两种编写模式。

第一种模式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_nameVALUES (value1,value2,value3,...);

第二种模式须要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);

执行如下命令,向web表中插入五条数据。

INSERT INTO `web` VALUES ('1', '阿里云', 'https://www.aliyun.com/','123'), ('2', '淘宝', 'https://www.taobao.com/','1'), ('3', '帮忙核心', 'https://help.aliyun.com/','112'), ('4', '开发者社区', 'https://developer.aliyun.com/','213'), ('5', '体验实验室', 'https://developer.aliyun.com/adc/labs/',456);

\2. 应用SELECT语句。

SELECT语句用于从数据库中选取数据,并将选取的数据存储在一个后果表中,称为后果集。SQL的SELECT语法如下。

第一种模式语法如下,示意从表(table_name)中查问某些字段(column_name)。

SELECT column_name,column_name FROM table_name;

第二种模式语法如下,示意从表(table_name)中查问所有字段。

SELECT * FROM table_name;

a. 执行如下命令,从"web"表中查问"name"和"url"列。

SELECT name,url FROM web;

返回后果如下。

b. 执行如下命令,从"web"表中查问所有的列。

SELECT * FROM web;

返回后果如下。

\3. 应用UPDATE语句。

UPDATE语句用于更新表中已存在的记录。SQL的UPDATE语法如下,示意在表(table_name)中,如果某列(some_column)取值为特定值(some_value),则将column更新成value。

UPDATE table_nameSET column1=value1,column2=value2,...WHERE some_column=some_value;

留神:

应用UPDATE语句时请留神设置WHERE子句。如果您省略了WHERE子句,会将数据表中所有的数据都更新。

执行如下命令,把name为"阿里云"的数据的rank更新为5。

UPDATE web SET rank='5' WHERE name='阿里云';

b. 执行如下命令,查问所有数据。

SELECT * FROM web;

返回后果如下,您能够看到数据曾经被更新。

\4. 应用DELETE语句。

DELETE语句用于删除表中的行。SQL的DELETE语法如下。

DELETE FROM table_nameWHERE some_column=some_value;

留神:

WHERE子句规定哪条记录或者哪些记录须要删除。如果您省略了WHERE子句,所有的记录都将被删除!

a. 执行如下SQL语句,向web表中插入一条数据。

INSERT INTO web(name, url, rank)VALUES ('新手入门','https://help.aliyun.com/learn/getting-started.html','789');

b. 执行如下SQL语句,查问所有数据,您能够看到新增的数据。

select * from web;

c. 执行如下SQL语句,从web表中删除name为新手入门的数据。

DELETE FROM web WHERE name='新手入门';

d. 执行如下SQL语句,查问所有数据,您能够看到数据曾经删除。

select * from web;

SQL的AND和OR运算符

AND和OR运算符用于基于一个以上的条件对记录进行过滤。

\1. 应用AND运算符。

如果第一个条件和第二个条件都成立,则AND运算符显示一条记录。

执行如下SQL语句,从web表中选取id为1且rank大于2的数据:

SELECT * FROM web WHERE id= '1' AND rank > 2;

返回的后果如下。

\2. 应用OR运算符。

如果第一个条件和第二个条件中只有有一个成立,则OR运算符显示一条记录。

执行如下SQL语句,从web表中选取rank大于300的或name为阿里云的数据:

SELECT * FROM web WHERE rank > 300 OR name = '阿里云';

返回的后果如下。

SQL的ORDER BY关键字

ORDER BY关键字用于对后果集依照一个列或者多个列进行排序。

ORDER BY关键字默认依照升序对记录进行排序。如果须要依照降序对记录进行排序,您能够应用DESC关键字。ORDER BY语法如下。

SELECT column_name,column_nameFROM table_nameORDER BY column_name,column_name ASC|DESC;

\1. 应用ORDER BY。

执行如下SQL语句,从web表中选取所有数据,并依照rank列排序。

SELECT * FROM web ORDER BY rank;

返回后果如下。

\2. 应用ORDER BY DESC。

执行如下SQL语句,从web表中选取所有数据,并依照rank列降序排序。

SELECT * FROM web ORDER BY rank DESC;

返回后果如下。

\3. 应用ORDER BY多列。

执行如下SQL语句,查问web表中选取所有数据,并依照rank列降序排序。

SELECT * FROM web ORDER BY name,rank;

返回后果如下。

SQL函数阐明

\1. 应用AVG()函数。

AVG()函数返回数值列的平均值。AVG()语法如下。

SELECT AVG(column_name) FROM table_name

SELECT AVG(column_name) FROM table_name;

a. 执行如下SQL语句,在Test数据库中创立数据表access_log。

CREATE TABLE `access_log` (  `aid` int(11) NOT NULL AUTO_INCREMENT,  `site_id` int(11) NOT NULL DEFAULT '0' COMMENT '网站id',  `count` int(11) NOT NULL DEFAULT '0' COMMENT '拜访次数',  `date` date NOT NULL,  PRIMARY KEY (`aid`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

b. 执行如下SQL语句,向数据表access_log插入数据。

INSERT INTO `access_log` VALUES ('1', '1', '45', '2016-05-10'), ('2', '3', '100', '2016-05-13'), ('3', '1', '230', '2016-05-14'), ('4', '2', '10', '2016-05-14'), ('5', '5', '205', '2016-05-14'), ('6', '4', '13', '2016-05-15'), ('7', '3', '220', '2016-05-15'), ('8', '5', '545', '2016-05-16'), ('9', '3', '201', '2016-05-17');

c. 执行如下SQL语句,从access_log数据表的count列获取平均值。

SELECT AVG(count) AS CountAverage FROM access_log;

返回后果如下。

\2. 应用COUNT()函数 。

COUNT()函数返回匹配指定条件的行数。COUNT()函数有三种语法,如下所示。

COUNT(column_name)语法 :COUNT(column_name)函数返回指定列的值的数目(NULL不计入)。

SELECT COUNT(column_name) FROM table_name;

COUNT() 语法 COUNT() :函数返回表中的记录数。

SELECT COUNT(*) FROM table_name;

COUNT(DISTINCT column_name)语法 :COUNT(DISTINCT column_name)函数返回指定列的不同值的数目 。

SELECT COUNT(DISTINCT column_name) FROM table_name;

测试方法如下:

a. 执行如下SQL语句,计算access_log数据表中site_id=3的总访问量。

SELECT COUNT(count) AS nums FROM access_log WHERE site_id=3;

返回后果如下。

b. 执行如下SQL语句,计算access_log数据表中总记录数。

SELECT COUNT(*) AS nums FROM access_log;

返回后果如下。

c. 执行如下SQL语句,计算access_log数据表中不同site_id的记录数。

SELECT COUNT(DISTINCT site_id) AS nums FROM access_log;

返回后果如下。

\3. 应用MAX()函数 。

MAX()函数返回指定列的最大值。MAX()语法 如下。

SELECT MAX(column_name) FROM table_name;

执行如下SQL语句,获取web数据表中rank列的最大值。

SELECT MAX(rank) AS max_rank FROM web;

\4. 应用MIN()函数 。

MIN()函数返回指定列的最小值。MIN()语法 如下。

SELECT MIN(column_name) FROM table_name;

执行如下SQL语句,获取web数据表中rank列的最小值。

SELECT MIN(rank) AS min_rank FROM web;

返回后果如下。

\5. 应用SUM()函数 。

SUM()函数返回数值列的总数。SUM()语法 如下。

SELECT SUM(column_name) FROM table_name。

执行如下SQL语句,获取access_log数据表的count字段的总数。

SELECT SUM(count) AS nums FROM access_log;

\6. 应用GROUP BY语句。

GROUP BY语句用于联合聚合函数,依据一个或多个列对后果集进行分组。GROUP BY语法如下。

SELECT column_name, aggregate_function(column_name) FROM table_nameWHERE column_name operator value GROUP BY column_name;

执行如下SQL语句,获取access_log数据表各个site_id的访问量。

SELECT site_id, SUM(access_log.count) AS numsFROM access_log GROUP BY site_id;

\7. 应用EXISTS运算符。

EXISTS运算符用于判断查问子句是否有记录,如果有一条或多条记录存在返回 True,否则返回False。EXISTS语法 如下。

SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);

执行如下SQL语句,查找查找count字段大于200的网站是否存在。

SELECT web.name, web.url FROM webWHERE EXISTS (SELECT count FROM access_log WHERE web.id = access_log.site_id AND count > 200);