MySQL笔记

第一章 数据库概述

1.1 数据库概述

DBMS:数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。

DB:数据库(Database)

SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。

MySQL:其中的一款关系型数据库管理系统

以下是2019年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:https://db-engines.com/en/ranking)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EXc8kDRH-1627311550761)(imgs/1571362950860.png)]

关系型数据库,采用关系模型来组织数据,简单来说,关系模型指的就是二维表格模型。类似于Excel工作表。非关系型数据库,可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。

关系型数据库设计规则

  • 遵循ER模型

    • E entity 代表实体的意思 对应到数据库当中的一张表
    • R relationship 代表关系的意思
  • 具体体现

    • 将数据放到表中,表再放到库中。
    • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。
    • 表具有一些特性,这些特性定义了数据在表中如何存储,类似java和python中 “类”的设计。
    • 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和字段名。每个字段类似java 或者python中的“实例属性”。
    • 表中的数据是按行存储的,一行即为一条记录。每一行类似于java或python中的“对象”。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m229AnBK-1627311550762)(imgs/1557377471553.png)]

1.2 MySQL概述

MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多互联网公司选择了MySQL作为网站数据库(Facebook, Twitter, YouTube,阿里的蚂蚁金服,去哪儿,魅族,百度外卖,腾讯)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Oq4lbxKy-1627311550763)(imgs/1557377559776.png)]

1.3 Mysql软件的卸载、安装和配置

见《MySQL5.7安装文档.md》

第二章 MySQL的使用

2.1 MySQL服务的启动

“我的电脑/计算机”–>右键–>“管理”–>“服务”–>启动和关闭MySQL服务

“开始菜单”–>“控制面板”–>“管理工具”–>“服务”–>启动和关闭MySQL

“任务管理器”–>“服务”–>启动和关闭MySQL

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J0XI5coZ-1627311550764)(imgs\wps10.jpg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iiBkIiFA-1627311550765)(imgs\wps11.jpg)]

或者

命令行

net  start  MySQL服务名
net  stop  MySQL服务名

2.2 客户端连接MySQL

1、命令行客户端:

mysql -h 主机IP地址 -P 端口号	-u 用户名	-p回车
Enter Password:密码

如果访问本机,-h localhost可以省略

如果端口号没有修改,-P 3306可以省略

除了-p与密码之间不要空格外,其他的-h,-P,-u与后面的参数值之间可以有空格

想要连接成功,必须保证服务开启的

2、其他客户端,例如:可视化工具Navicat或SQLyog等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lD97Zrz8-1627311550766)(imgs/1557378069584.png)]

2.3 导入和导出数据

2.3.1 单个数据库备份

mysql5.5

C:\Windows\System32> mysqldump -h主机地址 -P端口号 -u用户名 -p密码 --database  数据名 > 文件路径/文件名.sql

例如:

C:\Windows\System32>mysqldump -hlocalhost -P3306 -uroot -p123456 --database  test > d:/test.sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5qGRly8-1627311550767)(imgs/1560928457771.png)]

mysql5.7版

C:\Windows\System32> mysqldump -h主机地址 -P端口号 -u用户名 -p密码  数据名 > 文件路径/文件名.sql

不要再写–database

2.3.2 导入执行备份的sql脚本

先登录mysql,然后执行如下命令:

mysql> source  sql脚本路径名.sql

例如:

mysql>source d:/test.sql;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V5KkP7lp-1627311550767)(imgs/1560928671347.png)]

第三章 MySQL数据类型和运算符

3.1 MySQL数据类型

1、数值类型

  • 整型系列:xxxInt

int(M),必须和unsigned zerofill一起使用才有意义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ugGn4Hd-1627311550767)(imgs/1560933629123.png)]

  • 浮点型系列:float,double(或real)

double(M,D):表示最长为M位,其中小数点后D位

例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。

  • 定点型系列:decimal(底层实际上是使用字符串进行存储)

decimal(M,D):表示最长为M位,其中小数点后D位

  • 位类型:bit

字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1)

用来存储二进制数。对于位字段,直接使用select命令将不会看到结果。可以使用bit()或hex()函数进行读取。插入bit类型字段时,使用bit()函数转为二进制值再插入,因为二进制码是“01”。

2、日期时间类型

日期时间类型:year, date, datetime, timestamp

注意一下每一种日期时间的表示范围

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzNSAxA6-1627311550768)(imgs/1560933691657.png)]

timestamp和datetime的区别:

  • timestamp范围比较小
  • timestamp和时区有关
    • show variables like ‘time_zone’;
    • set time_zone = ‘+9:00’;
  • timestamp受MySQL版本和服务器的SQLMode影响很大
  • 表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-husTGpBv-1627311550768)(imgs/image-20200406171844833.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fwu39BHw-1627311550768)(imgs/image-20200406171900814.png)]

3、字符串类型

MySQL中提供了多种对字符数据的存储类型,不同的版本可能有所差异。常见的有:

char,varchar,xxtext,binary,varbinary,xxblob,enum,set等等

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s9GIQFIi-1627311550768)(imgs/image-20200406180437224.png)]

  • 字符串类型char,varchar(M)

char如果没有指定宽度,默认为1个字符

varchar(M),必须指定宽度

  • binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串,不支持模糊查询之类的。

  • 一般在保存少量字符串的时候,我们会选择char和varchar;而在保存较大文本时,通常会选择使用text或blob系列。blob和text值会引起一些性能问题,特别是在执行了大量的删除操作时,会在数据表中留下很大的“空洞”,为了提高性能,建议定期时候用optimize table功能对这类表进行碎片整理。可以使用合成的(Synthetic)索引来提高大文本字段的查询性能,如果需要对大文本字段进行模糊查询,MySql提供了前缀索引。但是仍然要在不必要的时候避免检索大型的blob或text值。

  • enum枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1~255个成员的枚举需要1个字节存储;对于255`65535个成员需要2个字节存储。例如:gender enum(‘男’,‘女’)。如果插入枚举值以外的值,会按第一个值处理。一次只能从枚举值中选择一个。

  • set集合类型,可以包含0~64个成员。一次可以从集合中选择多个成员。如果选择了1-8个成员的集合,占1个字节,依次占2个,3个。。8个字节。例如:hoppy set(‘吃饭’,‘睡觉’,‘玩游戏’,‘旅游’),选择时’吃饭,睡觉’或’睡觉,玩游戏,旅游’

4、示例

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| eid            | int(11)      | NO   | PRI | NULL    | auto_increment |
| ename          | varchar(20)  | NO   |     | NULL    |                |
| tel            | char(11)     | NO   |     | NULL    |                |
| gender         | char(1)      | YES  |     | 男        |                |
| salary         | double       | YES  |     | NULL    |                |
| commission_pct | double(3,2)  | YES  |     | NULL    |                |
| birthday       | date         | YES  |     | NULL    |                |
| hiredate       | date         | YES  |     | NULL    |                |
| job_id         | int(11)      | YES  |     | NULL    |                |
| email          | varchar(32)  | YES  |     | NULL    |                |
| mid            | int(11)      | YES  |     | NULL    |                |
| address        | varchar(150) | YES  |     | NULL    |                |
| native_place   | varchar(10)  | YES  |     | NULL    |                |
| did            | int(11)      | YES  |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

3.2 MySQL运算符

1、算术运算符

加:+
减:-
乘:*
除:/   div(只保留整数部分)
模:%   mod

2、比较运算符

大于:>
小于:<
大于等于:>=
小于等于:<=
等于:=   不能用于null判断
不等于:!=  或 <>
安全等于:<=>  可以用于null值判断

3、逻辑运算符(建议用单词,可读性来说)

逻辑与:&& 或 and
逻辑或:|| 或 or
逻辑非:! 或 not
逻辑异或:^ 或 xor

4、范围

区间范围:between x  and  y
	    not between x  and  y
集合范围:in (x,x,x)
	    not  in(x,x,x)

5、模糊查询和正则匹配(只针对字符串类型,日期类型)

like 'xxx'
如果想要表示0~n个字符,用%
如果想要表示确定的1个字符,用_
regexp '正则'

6、位运算符(很少使用)

左移:<<
右移:>>
按位与:&
按位或:|
按位异或:^
按位取反:~

7、特殊的null值处理

#(1)判断时
xx is null
xx is not null
xx <=> null

#(2)计算时
ifnull(xx,代替值)  当xx是null时,用代替值计算
/*一、运算符
1、算术运算符
+:加
-:减
*:乘
/:除   可以保留小数部分
div:除  如果整数与整数相除只保留整数部分
%:求余数
mod:求余数
*/
select 1+1;
select 1/2; #0.5
select 1 div 2; #0

/*
2、比较运算符
>:大于
<:小于
=:等于  注意区别,Java中是==,mysql中是=
>=:大于等于
<=:小于等于
!=:不等于
<>:不等于
<=>:安全等于  用于判断null值的比较运算符
		null值的判断,习惯上我们用is null 和is not null
*/
#查询薪资大于20000元的员工
select * from t_employee where salary > 20000;

#查询所有男员工
select * from t_employee where gender = '男';
select * from t_employee where gender != '女';
select * from t_employee where gender <> '女';

#查询奖金比例commision_pct是null的员工
select  * from t_employee where commission_pct <=> null;
select  * from t_employee where commission_pct is null;

/*
3、逻辑运算符
&&和and:逻辑与
	两个条件同时满足
||和or:逻辑或
	两个条件满足任意一个
^和xor:逻辑异或
	两个条件只能满足其中一个
!和not:
	不满足xx条件
	*/
#查询薪资大于20000元的女员工	
select * from t_employee where salary > 20000 && gender = '女';
select * from t_employee where salary > 20000 and gender = '女';

#查询男员工
select * from t_employee where not gender = '女';
select * from t_employee where !(gender = '女');

#查询薪资大于10000  异或 性别是男的,即它俩只能满足一个
#即查询薪资大于10000的女的或薪资低于10000的男的
select * from t_employee where salary
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值