MySQL学习
【MySQL数据库基础教程_数据库_小白零基础带你掌握SQL数据库_包括(下载、安装和卸载)_小白必看】 https://www.bilibili.com/video/BV1y2mKYQEeg/?share_source=copy_web&vd_source=26a21a8ac3f19fd0d663fb58dee41081
参考资料为:《MySQL5.7从入门到精通(视频教学版)(第二版)》
一、SQL 概述
1.基本概念
SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。
SQL 通过一系列的语句和命令来执行数据定义、数据查询、数据操作和数据控制等功能,包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
2.SQL 分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)
3.语法要求
SQL 语句可以单行或多行书写,以分号结尾;
可以用空格和缩进来来增强语句的可读性;
关键字不区别大小写;
4.数据类型
MySQL 与 Java、C 一样,也有数据类型MySQL 中数据类型主要应用在列上。
常用类型:
int:整型
double:浮点型,例如 double(5,2)表示最多 5 位,其中必须有 2 位小数,即最大值为 999.99;
decimal:泛型型,在表单线方面使用该类型,因为不会出现精度缺失问题;
char:固定长度字符串类型;(当输入的字符不够长度时会补空格)
varchar:固定长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型;
参考资料:https://blog.csdn.net/PILIpilipala/article/details/113798383
二、MySQL概述
1.MySQL是什么
MySQL是一个小型关系数据库管理系统,它虽然规模小、功能有限,但是它体积小、速度快、成本低,且提供的功能对于稍微复杂的应用来说已经够用了,这些特性使得它成为世界上最受欢迎的开放源代码数据库。
2.MySQL的安装与配置
MySQL的安装
在https://dev.mysql.com/downloads/windows/installer/下载5.7.44版本,这时候会弹出登录界面,按照页面提示注册好就可以下载了。
下载好后进行安装,这几步忘截图了,就放参考书上的图片了,提醒一下中间设置的密码一定不能忘

比如说现在要查看一个名为egg的数据库的定义,需要输入:“show create database egg\G;”
3.删除数据库
如果我们想要删除一个数据库,输入语句格式如下:
drop database __数据库名 ;
比如说现在要删除一个名为fischl0527的数据库,需要输入:“drop database fischl0527;”
此时我们再查看所有数据库就已经没有了“fischl0527”这个数据库了。
如果再次查看fischl数据库时,执行结果会报错
并且要注意删除数据库时MySQL不会给出任何确认信息,删除数据库后所有数据表、数据不可恢复,因此删除数据库时一定要小心谨慎。
四、数据表的基本操作
1.数据类型
(1) 数值类型:
数值类型的长度m是指显示长度,并不表示存储长度,只有字段指定zerofill时有用
例如:int(3),如果实际值是2,如果列指定了zerofill,那查询结果是002,左边的0用来填充
在浮点类型中,(m,d),m为总位数,d为小数位。
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| tinyint(m) | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
| smallint(m) | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
| mediumint(m) | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| int(m)或integer(m) | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| bigint(m) | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| float(m,d) | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| double(m,d) | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| decimal(m,d) | 对decimal(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
(2) 日期和时间类型:
datatime不支持跨时区,它没有时区处理timestamp是有时间戳的,支持时区处理。
| 类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| date | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| time | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值或持续时间 |
| year | 1 | 1901/2155 | YYYY | 年份值 |
| datatime | 8 | ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
| timestamp | 4 | ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
(3) 字符串类型:
char(n)和varchar(n)中n指的是字符的总长度,并且在char中的n是固定长度,当字符数小于n时,MySQL会用空格在前面来补齐;但是varchar的n是表示最大长度,长度不够时,不会用空格来补齐。所以在使用char(n)和varchar(n)时必须指定字符长度。
text不需要指定长度,当不知道属性长度时,适合用text。
查询速度char最快,varchar次之,text最慢。
blob是二进制数据,blob和text存储方式不同,text是以文本方式存储的,blob是以二进制方式存储的。blob存储的数据只能整体读出。text可以指定字符集,blob不用指定字符集。
| 类型 | 大小 | 用途 |
|---|---|---|
| char(n) | 0-255 bytes | 定长字符串 |
| varchar(n) | 0-65535 bytes | 变长字符串 |
| tinyblob | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
| tinytext | 0-255 bytes | 短文本字符串 |
| blob | 0-65 535 bytes | 二进制形式的长文本数据 |
| text | 0-65 535 bytes | 长文本数据 |
| mediumblob | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
| mediumtext | 0-16 777 215 bytes | 中等长度文本数据 |
| longblob | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
| longtext | 0-4 294 967 295 bytes | 极大文本数据 |
2.创建表
在创建好数据库时,接下来的工作就是创建数据表。创建数据表是指在已经创建的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据的完整性(包括实体完整性、引用完整性和域完整性)约束的过程。
在创建数据表之前需要说明在那个数据库进行操作,语句为:
use 数据库名 ;
使用语句创建数据表的语法结构为:
创建表的语句为create table,语法规则如下:
create table 表名
(
字段名1,数据类型[列级别约束条件] [默认值],
字段名1,数据类型[列级别约束条件] [默认值],
……
[表级别约束条件]
);
示例:创建一个employees表包含雇员ID,雇员名字,雇员薪水:
先创建一个数据库text,并选中
之后创建雇员数据表
“employee_id int,“代表雇员名字,数据类型是int;
”employee_name varchar(10),”代表雇员名字,数据类型是varchar,字符不超过10个;
“salary float(8,2),“代表雇员的薪水,数据类型是float,该数据一共有8位,6位整数,2位小数。
这样一个数据表就创建成功了。
查看已创建的表的语句是:
show tables;
输入后就可以查看创建的employees的表前提得选中,不然会报错
3.删除表
如果想要删除表,对应语句为:
drop table 表格名;
示例:删除刚才创建的employees表:
这时再查看表格时发现数据库已经是空的了,表明已经删除成功了:
4.修改表
(1) 修改表_修改表名
修改数据表的语句为:
alter table 旧表名 rename 新表名;
示例:创建一个employees表包含雇员ID,雇员名字,雇员薪水,并修改表名称为emp:
选中text数据库并创建employees表
此时查看表格,表格名是employees
输入语句“alter table employees rename emp;”改动表格名字
再次查看表格,发现名字变为emp,说明表格名字改动成功
(2) 修改表_修改列名
修改列名的语句是:
alter table 表名 change column旧列名 新列名 类型;
示例:将emp表中的employee_name修改为name:
(3) 修改表_修改列类型
修改列类型的语句是:
alter table 表名 modify 列名 新类型;
示例:将emp中的name的长度指定为40。
(4) 修改表_添加新列
添加新列的语句是:
alter table 表名 add column 新列名 类型;
示例:在emp表中添加佣金列,列名为commission_pct
(5) 修改表_删除指定列
删除列的语句是:
alter table 表名 drop column 列名;
示例:在emp表中删除commission_pct列
5.MySQL的约束
(1) 约束概述
数据库约束是对表中的数据进行进一步的限制,确保数据的正确性、有效性和完整性。数据库的约束类型有:主键约束、外键约束、唯一性约束、非空约束和检查约束。
主键约束(Primary Key):主键约束是使用最频繁的约束。它不允许为空、重复,以此保证数据的唯一性。在设计数据表时一般情况下,都会要求表中设置一个主键。主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。如果发现有重复值出现时,那么数据将无法添加到数据表当中。例如:学生信息表当中的学号是唯一的,这时就需要添加主键来进行约束。
外键约束(Foreign Key):外键约束经常和主键约束一起使用,用来确保数据的一致性,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。它允许有空值、重复但是值必须是参照表中参照列中的所包含的值以保证数据的参照完整性。从表添加外键约束,用于引用主表中某列的值。比如学生表的专业编号,员工表的部门编号,员工表的工种编号。
唯一性约束(Unique):用于约束该字段的值具有唯一性,可以有多个,可以没有,可以为空,允许为多个列添加唯一性约束,但是相同值只能出现一次。比如座位号
非空约束(Not Null):用于约束该字段的值不能为空,允许有空值,允许为多个列添加非空约束,保证了数据没有空值。比如姓名、学号等。
检查约束(Check):检查约束也叫用户自定义约束,是用来检查数据表中,字段值是否有效的一个手段。
查询表中的约束信息的语句为:
show keys from 表名;
(2) 添加主键约束
单一主键:使用一个列作为主键列,当列的值有重复时,则违反唯一约束。
联合主键:使用多个列作为主键列,当多个列的值都相同时,则违反唯一约束。
一般来说单一主键用的比较多
添加主键约束的语句为:
alter table 表名 add primary key (列名);
示例:将emp表中的employee_id修改为主键。
主键自增长:
MySQL中的自动增长要求:
- 一个表中只能有一个列自动增长。
- 自动增长的类型必须是整形。
- 自动增长只能添加到具备主键约束与唯一性约束的列上。
- 删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后再删除约束。
语句为:
alter table 表名 modify 添加主键的列名 类型 auto_increment;
示例:将emp表的employees_id修改为自增:
(3) 删除主键约束
删除主键的语句为:
alter table 表名 drop primary key;
删除主键时,如果主键具备自动增长能力,要先去掉自动增长,然后删除主键。
去掉主键自动增长的语句是:
alter table 表名 modify 添加主键的列名 类型 ;
示例:删除emp表中的employee_id主键约束
如果先输入删除主键的语句,则会报错
因为employee_id有自动增长,所以会报错,要先去掉自动增长
再删除主键约束
(4) 添加外键约束
添加外键约束的语句为:
alter tables 表名 add constraint 约束名 foreign key (列名) references 参照的表名(参照的列名);
示例:创建depaartments表包含department_id,department_name,location_id。
并修改depaartments表,向department_id列添加主键约束与自动递增:
创建depaartments表
添加主键约束
添加自动递增
修改emp表,添加dept_id列
向dept_id列添加外键约束
不知道为什么会报错,给 dept_id加上主键自动增长改成一样的格式也是同样样报错
最后查了资料是在emp后面加上“_fk“组成约束名来”解决的
(5) 删除外键约束
删除外键约束的语句为:
alter table 表名 drop foreign key 约束名;
示例:删除dept_id的外键约束。
(6) 添加唯一性约束
添加唯一性约束的语句是:
alter table 表名 add constraint 约束名 unique(列名);
示例:向emp表中的name添加唯一性约束。
(7) 删除唯一性约束
删除唯一性约束的语句为:
alter table 表名 drop key 约束名;
示例:删除name的唯一性约束。
(8) 添加非空约束
添加非空约束的语句为:
alter table 表名 modify 列名 类型 not null;
示例:向emp表中的salary添加非空约束:
(9) 删除非空约束
删除非空约束的语句为:
alter table 表名 modify 列名 类型 null ;
示例:删除emp表中salary的非空约束
(10) 创建表时添加约束
一般来说除了外键约束不能在创建表时创建,其他约束均能在创建表时创建,创建时在列类型的后面加上约束类型即可。
示例:创建depts表包含department_id该列为主键且为自动增长,department_name列不允许重复,location_id列不含有空值。
6.数据处理
(1) 添加数据
选择插入的语句为:
insert into 表名(列名1,列名2,……)values(值1,值2……);
注意有非空约束的一定要有数据;
示例:向departments 表中添加一条数据,部门名称为market,工作地点ID为1
(2) 默认值处理
如果插入数据时未指定该列的值,则我们可以设置默认值
创建表时指定某列默认值的语句是:
create table 表名(列名 类型default 默认值,……);
示例:创建emp3表,该表包含emp_id主键且自动增长,包含name,包含address且该列默认值为”Unknown”
修改表添加新列并指定默认值的语句为:
alter table 表名 add column 列名 类型 default 默认值;
示例:修改emp3表,添加job_id列且该列的默认值为0
插入数据时的默认值处理
如果在插入数据时未指定该列的值,那么MySQL会将默认值添加到该列如果是完全项插入需要使用default来占位。
示例:向emp3插入数据,要求address列与job_id列使用默认值作为该列的值。
两种方式:
(3) 更新数据
更新数据时一定要给定更新条件,否则表中所有数据都会更新
更新数据的语句为:
update 表名 set 列名=值,列名=值 where 条件;
示例:更新emp3表中的id为1的数据,添加address为北京
(4) 删除数据
删除数据一定要给定删除条件,否则所有数据都会删除
删除数据的语句为:
delate from 表名 where 条件;
示例:删emp3表中的emp_id为1的雇员信息
7.查询
(1) select基本查询介绍
SELECT语句从数据库中返回信息。使用一个SELECT语句,可以做下面事情:
列选择:能够使用SELECT语句的列选择功能选择表中的列,这些列是想要用查询返回的。当查询时,能够返回列中的数据。
行选择:能够使用SELECT语句的行选择功能选择表中的行,这些行是想要用查询返回的。能够用不同的标准限制看见的行。
链接:能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接,查询出我们关心的数据

在最简单的形式中,select语句必须包含一下内容:
一个select子句,指定被显示的列
一个from子句,指定表,该表包含select子句中的字段列表
(2) 查询中的列选择
选择所有列的语句为:
select * from 表名;
用跟在select关键字后面的星号(*),你能够显示表中所有数据的所有列。
示例:查询departments表中的所有数据。
选择指定的列的语句为:
select 列名1,列名2…… from 表名;
示例:查询departments表中的所有部门名称
(3) 查询中的算数表达式
算数表达式有:加(+)、减(-)、乘(*)和除(/)
需要修改数据的显示方式,如执行计算,或者作假定推测,这些都可能用到算数表达式。一个算数表达式可以包含列名、固定的数字值和算数运算符。
在查询到的结果做算数表达式处理时,并不会影响我们表中的数据,并不会更新到我们表当中去
做算术表达式,使用算数运算符的语句为:
select 列名1,列名2 关于列名2的算数表达式 from 表名;
示例:查询雇员的年薪。

心有所向,日复一日,必有精进!加油!





























































