# 安装及启动

注意
此处只适用于ios系统

下载安装包

https://dev.mysql.com/downloads/ (opens new window)

选择需要安装的版本

图片alt

根据需要选择(我一般选择.dmg)

图片alt

启动mysql

图片alt

配置环境变量

此时输入mysql -uroot -p,会提示没有 commod not found

  1. 进入/usr/local/mysql/bin,查看此目录下是否有mysql

cd /usr/local/mysql/bin

  1. 打开 ~/.bash_profile 文件

open ~/.bash_profile

  1. 添加 path

export PATH=$PATH:/usr/local/mysql/bin

  1. 再次输入 mysql -uroot -p,登录mysql

图片alt

启动服务

sudo mysql.server start

关闭服务

sudo mysql.server stop

查看状态

sudo mysql.server status

# Sequel Pro

说明
我也想用navicat,耐不住它要收费啊!

下载地址

https://sequelpro.com/download (opens new window)

连接数据库

图片alt

填好参数之后,点击 test connection 按钮;如上图所示,测试通过后,再点击 connect 连接数据库。

基本用法

图片alt

# 概述

关系型数据库(RDBMS)

概念:

建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

  1. 使用表存储数据,格式统一,便于维护。
  2. 使用sql语言操作,标准统一,使用方便。

# SQL通用语法

  1. sql语句可以单行或多行写,以分号结尾。
  2. sql语句可以使用空格/缩进来增加语句的可读性。
  3. mysql数据库的sql语句是不区分大小写的,关键字建议使用大写。
  4. 单行用:-- 或 # 注释;多行用 /* */ 注释。

# SQL分类

分类 说明
DDL 数据定义语言,用于定义数据库对象(数据库,表,字段)
DML 数据操作语言,用来对数据库表中的数据进行增删改查
DQL 数据查询语言,用来查询数据库中表的记录
DCL 数据控制语言,用来创建数据库用户,控制数据库的访问权限

# DDL数据类型

数值类型

图片alt

字符串类型

图片alt

时间类型

图片alt

# DDL操作数据库

查询所有数据库

SHOW DATABASES;

查询当前数据库

SELECT DATABASE();

创建数据库

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集][COLLATE 排序规则];

删除数据库

DROP DATABASE IF EXISTS 数据库名;

使用数据库

USE 数据库名;

# DDL表的创建

CREATE TABLE 表名(
    字段1 字段类型 [COMMENT '注释'],
    字段2 字段类型 [COMMENT '注释'],
    字段3 字段类型 [COMMENT '注释'],
    ···
    字段n 字段类型 [COMMENT '注释']
) [COMMENT '注释'];
注意
最后一个字段后面没有逗号!

# DDL表的查询

查询当前数据库所有表

SHOW TABLES;

查询表结构

DESC 表名;

查询指定表的创表语句

SHOW CREATE TABLE 表名;

# DDL表的修改

添加字段

ALTER TABLE 表名 ADD 字段名 字段类型(长度)[COMMENT '注释'] [约束];

修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALTER 表名 CHANGE 旧字段名 新字段名 数据类型(长度)[COMMENT '注释'] [约束];

修改表名

ALTER TABLE 表名 RENAME TO 新表名;

# DDL表的删除

删除字段

ALTER TABLE 表名 DROP 字段名;

删除表

DROP TABLE [IF EXISTS] 表名;

删除指定表,并创建该表

TRUNCATE TABLE 表名;

# DML添加数据

给指定字段添加数据

INSERT INTO 表名 (字段1, 字段2, ...) VALUES(值1, 值2, ...);

给全部字段添加数据

INSERT INTO 表名 VALUES(值1, 值2, ...);

批量添加数据

INSERT INTO 表名 (字段1, 字段2, ...) VALUES(值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);


INSERT INTO 表名 VALUES(值1, 值2, ...),(值1, 值2, ...),(值1, 值2, ...);
注意
1. 插入数据时,指定字段的顺序需要与值的顺序一一对应。
2. 字符串与日期型数据应包含在引号中。
3. 插入数据大小,应该在字段规定的范围内。

# DML修改数据

修改数据

UPDATE 表名 SET 字段1=值1, 字段2=值2, ... [WHERE 条件];
注意
where条件可以有,也可以没有;如果没有,则会修改整张表的所有数据。

# DML删除数据

删除数据

DELETE FROM 表名 [WHERE 条件];
注意
1. where条件可以有,也可以没有;如果没有,则会删除整张表的所有数据。
2. 不能删除某一个字段的值。

# DQL编写顺序

图片alt

# DQL基本查询

查询多个字段

SEECT 字段1, 字段2, ... FROM 表名;

查询所有字段

SELECT * FROM 表名;

设置别名

SEECT 字段1[AS 别名1], 字段2[AS 别名2], ... FROM 表名;

查询不重复内容

SELECT DISTINCT 字段 FROM 表名; 

# DQL条件查询

SELECT 字段 FROM 表名 WHERE 条件;

运算符

图片alt

# DQL聚合函数

SELECT 聚合函数(字段) FROM 表名;

常见聚合函数

图片alt

注意
null值不参与聚合函数运算

# DQL分组查询

SELECT 字段 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
注意
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

# DQL排序查询

SELECT 字段名 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

正序:esc 倒序:desc

# DQL分页查询

SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;
注意
起始索引从0开始,起始索引 =(页码-1)* 每页显示记录数。
不同的数据库有不同的实现,MySQL中是limit。
如果查询的是第一页数据,起始索引可以省略。

# DCL用户管理

查询用户

USE mysql;
SELECT * FROM user;

创建用户

CREATE USER '用户名@主机名' IDENTIFIED BY '密码';

修改用户密码

ALTER USER '用户名@主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

删除用户

DROP USER '用户名@主机名';

# DCL权限控制

查询权限

SHOW GRANTS FOR '用户名@主机名';

授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名@主机名';

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名@主机名';

# 约束

图片alt

# 外健约束

ALTER TABLE 表名 ADD CONSTRAINT 外健名称 FOREIGN KEY(外健字段名) REFERENCES 主表(主表列名);

# 外键删除/更新行为

图片alt

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES  主表(主表列名) ON UPDATE CASCADE ON DELETE CASCADE;

多表关系介绍

基本分为三种:

  1. 一对多
  2. 多对多
  3. 一对一

一对多

案例:部门与员工的关系

关系:一个部门可以对应多个员工,一个员工只能对应一个部门

实现:在多的一方建立外键,指向一对一的主键

多对多

案例:学生与课程表的关系

关系:一个学生可以选修多门课程,一门课程可以供多名学生选择

实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

一对一

案例:用户与用户详情的关系

关系:一对一关系多用于单表拆分,将一张表基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率

# 内连接

内连接:是查询两张表交集的部分

隐式内连接

SELECT 字段列表 FROM 表一, 表二 WHERE 条件...;

显式内连接

SELECT 字段列表 FROM 表1 INNER JOIN 表2 ON 连接条件...;

# 外连接

左外连接

SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件...;

右外连接

SELECT 字段列表 FROM 表1 RIGHT OUTER JOIN 表2 ON 条件...;