1.1 MySQL 软件安装及数据库基础
1)软件安装及服务器设置。
(1)下载windows版,下载解压后文件放在c盘,遇到的第一个问题就是 my.ini文件找不到,可以用notepad++创建my.ini文件(下载链接:https://notepad-plus.en.softonic.com/)。
(2) 在导入数据文件到mysql时,提示需要把初始密码改掉,可参考下面语句完成密码更改(参考链接:https://www.cnblogs.com/Owen-ET/p/9644727.html)
2)使用图形界面软件 Navicat for SQL
在用Navicat链接mysql数据库时,总是提示:Authentication plugin caching_sha2_password' cannot be loaded的错误,按照链接(https://blog.csdn.net/u011182575/article/details/80821418)可把问题解决。
3)数据库基础知识
(1)数据库定义
数据库是一个以某种有组织的方式存储的数据集合。
(2)关系型数据库
采用了关系模型来组织数据的数据库。
(3)二维表
表是一种结构化的文件,可用来存储某种特定类型的数据。存储在表中的数据必须是同一类型的数据,并且同一个数据库中表的名字是唯一的,即不能有两个相同名字的表。
(4)行
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
(5)列
表由列组成,列存储表中的某一个信息。
(6)主键
主键(primary key)一列(或一组列),其值能够唯一标识表中每一行。没有主键,更新或删除表中特定行就极为困难,在创建表的时候就应该定义主键。
主键有以下要求:
任意两行都不具有相同的主键值;
每一行都必须具有1个主键值,主键值不能为NULL;
主键列中的值不允许修改或更新;
主键值不能重用。
(7)外键
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。
1.2 MySQL 基础 (一)- 查询语句
1)按照示例导入数据库
CREATE DATABASE IF NOT EXISTS yiibaidb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
2)SQL是什么?MySql是什么?
SQL(发音为字母 S-Q-L或 sequel)是 Structured Query Language(结构化查询语言)的缩写。 SQL是一种专门用来与数据库沟通的语言。
MySQL是数据库管理系统(DBMS)中的一类,数据库是通过DBMS创建和操纵的容器。
3)查询语句 SELECT FROM
(1)语句解释
如:SELECT city FROM offices; --从offices表中读取city这一列。
(2) 去重语句
SELECT DISTINCT city FROM offices;--DISTINCT 应该位于列名前面,并且是作用于所有列。
(3) 前N个语句
SELECT city FROM offices LIMIT 5;--显示offices表中city列的前5行数据。
4)筛选语句 WHERE
SLECT price FROM products WHERE price > 10000;--从products表格中的price这一列中选取数值大于10000的数据。
常用的运算符包括:=等于,!=或者<>是不等于,>大于,<小于,!<不小于,!>不大于,BETWEEN...AND...在什么范围之间,IS NULL 是空值;
操作符(operator)用来联结或改变 WHERE子句中的子句的关键字,也称为逻辑操作符。
AND 与,同时满足条件;
OR或,满足其一,计算优先级低于AND;
IN指定条件范围,范围中的每个条件都可以进行匹配。功能与OR类似。
NOT:WHERE子句中用来否定其后条件的关键字。
通配符:用来匹配值的一部分的特殊字符。
%:%表示任何字符出现任意次数。
如 SELECT city FROM offices WHERE city LIKE '%ab' #从office表里面city的列中选取以ab结尾的数据。
_:下划线的用途与%一样,但它只匹配单个字符,而不是多个字符。起到填空题的作用,规定的是数据字符的数量。
[]:方括号([])通配符用来指定一个字符集,它必须匹配指定位置(通配符的位置)的一个字符。
5)分组语句 GROUP BY
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id
HAVING vend_id > 2;
对vend_id进行分组,计数结果为COUNT(*),作为num_prods列值输出。GROUP BY必须放在WHERE 语句后 ORDER BY语句前。
6)排序语句 ORDER BY
SELECT order_num, COUNT(*) AS items
FROM OrderItems
GROUP BY order_num
HAVING COUNT(*) >= 3
ORDER BY items, order_num;
DESC:倒序;默认正序。
7)函数
SUBSTRING():提取字符串的组成部分;
CONVERT():数据类型转换;
8)使用注释
注释使用--(两个连字符)嵌在行内。 --之后的文本就是注释。;
在一行的开始处使用#, 这一整行都将作为注释。
注释从/*开始,到*/结束, /*和*/之间的任何内容都是注释。
9)代码规范
参考 https://zhuanlan.zhihu.com/p/27466166 [SQL Style Guide] https://www.sqlstyle.guide/;
作业一:
SELECT DISTINCT Email
FROM email
WHERE Email IN(SELECT Email FROM email GROUP BY Email HAVING COUNT(Email)>1);
作业二:
SELECT *
FROM World
WHERE area > 3000000 or (population >25000000 and gdp >20000000);