一周内快速了解并掌握MySQL的使用方法。
1. MySQL数据库安装
1.1 MySQL官网下载
- Mysql官网下载最新的安装包:https://dev.mysql.com/downloads/mysql/
- 点击 download
- 选择No thanks, just start my download.
下载后解压安装即可
1.2 配置环境变量
配置路径:计算机—属性—高级系统设置—环境变量—系统变量—path—编辑—新建—粘贴mysql的bin目录
举例:C:Program FilesMySQLMySQL Server5.5bin
2. 数据库基础知识
2.1 数据库定义
个人理解就是存储及查询数据的一种工具。
2.2 关系型数据库
大部分数据库都是关系型数据,存储的是结构化数据,以关系模型来组织数据。
数据库事务必须具备ACID特性,ACID分别是Atomic原子性,Consistency一致性, Isolation隔离性,Durability持久性。
当今十大主流的关系型数据库 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一个分支),SAP
非关系型数据库:指非关系型的,分布式的,且一般不保证遵循ACID原则的数据存储系统。
非关系型数据库以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对,不局限于固定的结构,可以减少一些时间和空间的开销。
2个主流非关系型数据库 Redis, MongoDB
2.3 二维表
一维表:第一行为字段名,其他行为数据 二维表:第一行也是字段名,但是可能也是数据的一部分。 简而言之:一维表砍掉一列只是砍掉了表的一个属性,二维表砍掉一列是砍掉了某个属性的一部分,造成数据缺失,因为建议使用一维表来组织数据。 见下图理解:
2.4 主键、外键
举个例子:
学生表(学号,姓名,性别,班级) ,学号是一个主键
课程表(课程号,课程名,学分),课程号是一个主键
成绩表(学号,课程号,成绩),学号和课程号的属性组构成一个主键
成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键
定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键
以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
3. mysql数据库关系系统
查看数据库
打开MySQL 5.5 Command Line Client 输入密码
代码语言:javascript复制-------------------------------
--show databases; # 查看数据库
-------------------------------
mysql> show databases;
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| test |
| user |
| world |
--------------------
12 rows in set (0.01 sec)
查看数据表
代码语言:javascript复制----------------------------
--use world; # 选定数据库
--show tables; # 查看数据表
----------------------------
mysql> use world;
Database changed
mysql> show tables;
-----------------
| Tables_in_world |
-----------------
| city |
-----------------
1 row in set (0.00 sec)
视图
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上。
视图优点:
- 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
- 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;
使用场景:
- 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary…
- 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;
mysql> select * from city limit 10; --查看city前10行
------ ---------------- ------------- --------------- ------------
| ID | Name | CountryCode | District | Population |
------ ---------------- ------------- --------------- ------------
| 1 | Kabul | AFG | Kabol | 1780000 |
| 2 | Qandahar | AFG | Qandahar | 237500 |
| 3 | Herat | AFG | Herat | 186800 |
| 4 | Mazar-e-Sharif | AFG | Balkh | 127800 |
| 5 | Amsterdam | NLD | Noord-Holland | 731200 |
| 6 | Rotterdam | NLD | Zuid-Holland | 593321 |
| 7 | Haag | NLD | Zuid-Holland | 440900 |
| 8 | Utrecht | NLD | Utrecht | 234323 |
| 9 | Eindhoven | NLD | Noord-Brabant | 201843 |
| 10 | Tilburg | NLD | Noord-Brabant | 193238 |
------ ---------------- ------------- --------------- ------------
10 rows in set (0.00 sec)
mysql> DROP VIEW
-> IF EXISTS `view_user_course`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
--创建view--
mysql> CREATE ALGORITHM = UNDEFINED
-> DEFINER = `root`@`localhost`
-> SQL SECURITY DEFINER
-> VIEW `view_city` AS (
->
-> select * from city limit 10);
Query OK, 0 rows affected (0.02 sec)
--查询view和查询原表结果一样--
mysql> select * from view_city;
------ ---------------- ------------- --------------- ------------
| ID | Name | CountryCode | District | Population |
------ ---------------- ------------- --------------- ------------
| 1 | Kabul | AFG | Kabol | 1780000 |
| 2 | Qandahar | AFG | Qandahar | 237500 |
| 3 | Herat | AFG | Herat | 186800 |
| 4 | Mazar-e-Sharif | AFG | Balkh | 127800 |
| 5 | Amsterdam | NLD | Noord-Holland | 731200 |
| 6 | Rotterdam | NLD | Zuid-Holland | 593321 |
| 7 | Haag | NLD | Zuid-Holland | 440900 |
| 8 | Utrecht | NLD | Utrecht | 234323 |
| 9 | Eindhoven | NLD | Noord-Brabant | 201843 |
| 10 | Tilburg | NLD | Noord-Brabant | 193238 |
------ ---------------- ------------- --------------- ------------
10 rows in set (0.00 sec)
存储过程
简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;
ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;
代码语言:javascript复制-- ----------------------------------------------------------------------------------
-- Procedure structure for `proc_adder`
--存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,
--功能就是计算输入参数a和b的结果,赋值给输出参数sum ;
--DELIMITER ;;:之前说过了,把默认的输入的结束符 ; 替换成 ;;
--DEFINER:创建者
-- ---------------------------------------------------------------------------------
DROP PROCEDURE IF EXISTS `proc_adder`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
BEGIN
#Routine body goes here...
DECLARE c int;
if a is null then set a = 0;
end if;
if b is null then set b = 0;
end if;
set sum = a b;
END
;;
DELIMITER ;
执行以上存储结果,验证是否正确,如下图,结果OK:
代码语言:javascript复制mysql> set @b=5;
Query OK, 0 rows affected (0.00 sec)
mysql> call proc_adder(2,@b,@s);
Query OK, 0 rows affected (0.00 sec)
mysql> select @s as sum;
------
| sum |
------
| 7 |
------
1 row in set (0.00 sec)
总结
- 学习MySQL数据库安装方法
- 学习MySQL数据库基础知识
- 学习视图创建方法
- 学习存储过程创建方法