MySQL
- 零、思维导图(关于公式的总结)
- 一、数据库简介
- 1)数据库优点
- 2)数据库内涵
- 下面我们用一个工作簿来模拟MySQL
- RDBMS
- 二、MySQL安装
- 1)安装数据库
- 安装过程中可能的错误
- mysql ERROR 1045 (28000):错误解决办法
- (mysql.connector.errors.ProgrammingError) 1064 (42000)错误解决办法
- 2)使用图形化工具
- 下载navicat(腾讯应用商店里有)
- 连接数据库登陆失败
- 两周之后?
- 接下来
- 三、图形界面工具
- 四、由图像操作向SQL语句
- 1)数据类型与条件
- 常用的数据类型如下
- 约束
- 五、命令行脚本(重点)
- 1)基本操作
- 2)数据库中操作
- 3)数据表中基本操作
- 4)数据表中操作进阶(修改表结构alter table)
- 5)增删改查(CURD)(!最常用!)
- 增加
- 1.单行全列插入(插入的记录的值,必须与字段个数相等)
- 2.部分插入
- 3.多行插入
- 修改
- 1.修改某字段在全部位置的值为
- 2.修改某字段在某个位置的值为
- 3.修改某些字段在某个位置的值为
- 查询
- 1.查询整个表
- 2.查询某条数据
- 3.查询某条数据的某些字段(普通)
- 4.查询某条数据的某些字段(给字段取别名,增加可读性)
- 物理删除(忘了它吧,不要学)
- 1.删除数据表
- 2.删除数据表中某条记录
- 逻辑删除
零、思维导图(关于公式的总结)
一、数据库简介
文件夹可以保存数据,但数据量庞大时,读写不易,不易扩展。有这样一种程序,可以帮助我们很快的取出某个文件群里的某些文件,并进行增删改查。这个程序就是数据库客户端,它访问服务器,然后获取其后的文件,也就是数据库。
1)数据库优点
- 持久化存储
- 读写速度极高
- 保证数据的有效性
- 对程序支持性比较好,容易扩展
2)数据库内涵
一种特殊的文件。存储在硬盘上,不因关机而造成数据丢失。有自己的写法和读法。
下面我们用一个工作簿来模拟MySQL
- 这里新建了一个活动表,命名为hero,用来存放英雄信息。每一行叫一条记录,每一列叫一个字段。也可以说,行就是记录,列就是字段。
- 由于在存放时,可能会输入重复,因此name和job都不能代替某一行数值,但是id是唯一的。所以id这个字段被称为主键。
- 可以看到,坦克的克被我打错了。现在还好说,只有两条数据,如果数据一多……
- 为此我们可以新建一个job工作表,再让原工作表中的内容与其对应。这样,只要修改job工作表中的一个数据,就可以实现批量修改。
- 这种多个数据表有关联的,就叫关系型数据库。MySQL是关系型数据库中的代表。
- 一堆字段和记录,组成一张数据表。多个数据表,组成一个数据库。EXcel中每一个表都可以类比为数据表,一个Excel就相当于一个数据库。
RDBMS
直接访问数据库,会得到一堆看不懂的代码。为了知道如果改动读取里面的数据,要用到RDBMS。
SQL
RDBMS-client
RDBMS-server
数据库1
数据库2
数据库3
RDBMS(关系型数据库管理系统)是一种程序。基于C/S架构。
- B/S架构,即浏览器服务器架构.通过http来传输数据。
- C/S架构,即客户端服务器架构,通过SQL语句传输数据。
- SQL,即结构化查询语言。是一种用来操作RDBMS的数据库语言。
- 我们不需要学习如何开发客户端,数据库。我们只要学习SQL语句即可。
- SQL语句不止可以在MySQL上用。
- 数据的增删改查,是重点。
- SQL不区分大小写。
二、MySQL安装
- 选择自己需要的版本下载。
- 下载完之后安装。
- 基本都是默认下一项,可以选个安装位置。
- 安装完成之后
1)安装数据库
cmd中
- create database 数据库名;
(新建一个数据库)
安装过程中可能的错误
mysql ERROR 1045 (28000):错误解决办法
- 找到配置文件my.ini ,然后将其打开,可以选择用记事本打开
- 然后balabala添加一些东西?不不不,这个方法失效了。
关掉那个my.ini吧,我们不需要它 - 打开一个cmd输入(启动服务器):
mysqld --console --skip-grant-tables --shared-memory
- 打开另一个cmd输入:
mysql -u用户名 -p密码
(mysql.connector.errors.ProgrammingError) 1064 (42000)错误解决办法
使用反引号(tab键上方的那个键)将表名扩起来,表头也要哦
2)使用图形化工具
下载navicat(腾讯应用商店里有)
- 安装。
- 点击试用。
- 点连接,输入用户名和密码(MySQL的)
下载完之后,一般会面临两个问题
连接数据库登陆失败
新版本MySQL连接不了,原因是身份验证插件更新了,需要在cmd中(左侧的诸如cmd是标示位置的,不要复制)
- C:\user>mysql -u用户名 -p密码
- mysql>use mysql;
(上面打开名为mysql的数据库)- mysql>select user,host,plugin,authentication_string from user;
(上面查询身份验证插件)- mysql>alter user ‘用户名’@’%’ identified with mysql_native_password by ‘密码’;
(上面改回老版身份验证插件)- mysql>select user,host,plugin,authentication_string from user;
(再次查询,发现已经修改成功)
两周之后?
任何有试用期的东西,都一定在本地有一个记录开始时间的文件。只要删了它,就可以无限试用了。
- Win+R输入regedit
- 到HKEY_CURRENT_USER\Software\PremiumSof 删除Data。
- 然后到HKEY_CURRENT_USER\Software\ Classes\CLSID目录下。可以看到有许多子目录。点开这些子目录,如果某个子目录下,只含有一个info文件夹,就将这个子目录删除,直到删完所有这样的子目录。
- 然后,恩。试用时间就重置了。
接下来
接下来双击链接的那个数据库,直到其变绿。如果它不变绿,说明mysql是关闭状态。
Win+R输入services.msc找到mysql,启动即可
三、图形界面工具
- 打开Navicat,右键,新建一个数据库。
- 点击数据库,右键,新建一个数据表。
- 然后中间的区域设置字段
(区域下方是其附加属性)
(插入字段是往前面插,添加字段是往后面加) - 滑到最右边,点击那个空白的格子,会出现一个钥匙。那个这个字段就成为主键。
- 点击保存。输入表名。
- 在左侧导航栏双击该表。
- 左下角:
+表示添加一行。
√表示保存(写完数据之后都要点这个,才能真正地保存下来)
- 我们会发现id列不用填,因为之前勾选了自动增长。(如果删除了一行,新行的ID,会从这行的下一个开始哦)
- 右键,点设计表,就可以进入字段设置的界面(就是之前的那个界面)。
数据库有一个特点,就是插入的数据不符合要求,会保存不了,并且返回插入前的数据
要做一个数据表时,考虑两方面,一、每一个字段的类型是什么。二、其它的约束是什么。比如:主键列的类型是int,约束是不能重复,不能为零之类的.无符号范围的意思是,不带负号。
四、由图像操作向SQL语句
1)数据类型与条件
常用的数据类型如下
整数:int,bit
小数:decimal
字符串:varchar,char,text
日期时间:date,time,datetime
枚举类型(enum)–>python里没有枚举类型。
- 特别说明
- decimal(7,3)表示共存7位数,小数占3位。
- char(3)固定长度为3,如果不足三位,在后面用空格补齐。
- varchar(3)可变长度为3,不足不会补齐。
- text表示存储大文本,当字符大于4000时推荐使用
- 对于二进制文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径。
- 更多数据类型:点击这里
约束
- 主键primary key:物理上存储的顺序
- 非空not null:此字段不允许填写空值
- 唯一unique:此字段的值不允许重复
- 默认default:当不填写此值时会使用默认值,填写时一填写为准
- 外键foreign key:另一个关联表的主键
(说明:外键约束可以保证数据有效性,但是在进行数据的curd(增删改查)时,都会降低数据库的性能,不推荐使用。可以在逻辑层进行控制以保证数据的有效性。)
五、命令行脚本(重点)
下面操作都在cmd中: 最前面有思维导图,不必担心记忆问题。
如果报错,可以试试在表名、数据库名两侧加反引号,特别是这些名字中有特殊字符的时候。
1)基本操作
- 命令行连接
mysql -u用户名 -p密码
- 退出exit或quit,Ctrl+D
- **注意sql语句要由 ; 结尾
- 显示当前有多少数据库
show databases;红圈:查出信息的标题
蓝圈:查出的数据
注意: 语句敲enter换行不影响。记得保证语句完整即可。大小写不影响。
- 显示时间
select now();
- 显示版本
select version();
- 注释
-- 注释不会被运行,记得在注释内容间加空格
注意: 可以用上下键翻着选择哦
2)数据库中操作
- 创建数据库
create database 数据库名;
- 查看创建数据库的sql语句(python中的写法)
show create database 数据库名;
创建一个数据库时,如果不指定编码,那么默认是拉丁文
- 指定编码方式的创建数据库
create database 数据库名 charset=utf8;
查看创建数据库的sql语句,后面直接用数据库名即可,不能带charset=utf8之类的
- 删除数据库
drop database 数据库名;
- 使用某个数据库(如果要用到这个数据库的,后续操作都基于此)
ues 数据库名;
看到database changed就成功了
即使转到了这个数据库,也可以用use直接跳到别的数据库
6. 查看当前使用的数据库
select database();
3)数据表中基本操作
- 查看当前数据库中所有的表
show tables;
- 创建一个数据表
create table 数据表名(字段1 类型1 约束1,字段2 类型2 约束2);
例如: create table hero(id int,name varchar(4));
- 查看表的结构(字段,约束之类的)
desc 数据表名;
Type表示类型,其它几个都为约束。分别为:是否为空?是否为主键?有默认值吗?有额外的吗?
- 创建一个数据表(携带更多条件)
create table 数据表名(id int unsigned primary key not null auto_increment,name varchar(5));
给id的条件依次是 数字(这里设置为无符号,是约束的属性,必须得紧跟这个约束的后面),主键,非空,自动增长填充。顺序可以调换哦。
太长了可以换行,最后一个千万不能加逗号
- 创建一个数据表(多行多条件)
create table 数据表名(
id int unsigned not null auto_increment primary key,
name varchar(5),
age TinyInt unsigned default 0,
height decimal(5,2),
cls_id int unsigned
);
关于默认的语法注意一下即可
- 往数据表中插入数据
insert into 数据表名 values(0,“老张”,18,188.88,0);
- 查看表中数据
select * from 数据表名;
4)数据表中操作进阶(修改表结构alter table)
- 添加字段
alter table 数据表名 add 字段名 字段类型约束;
- 修改某字段类型约束(不修改字段名)
alter table 数据表名 modify 该字段名 类型约束;
- 修改字段名及类型约束
alter table 数据表名 change 原字段名 新字段名 类型及约束;
- 删除字段
alter table 数据表名 drop 字段名;
- 从删库到跑路
--删库
drop database 数据库名;
--删表
drop table 数据表名;
6.查看表的创建语句(python中就用这个哦,中间红圈)
show create table 数据表名;
注意:
ENGINE=InnoDB表示引擎是innoDB,它支持事务处理、外键和行级锁(一个用户操作行时,另一个用户不能操作这行)。还有一个常见的引擎是MylSAM,它性能更好。
AUTO_INCREMENT=2,自动增长的默认值,表示添加下一行数据,主键为2。
DEFAULT CHARSET=utf8mb4,默认编码是utf8mb4。这个是从数据库继承来的。utf8mb4是支持中文和emoji的(MySQL中的utf8是阉割版,只能显示3字节。而utf8mb4其实是完全版的utf8。)。
5)增删改查(CURD)(!最常用!)
create创建
update更新
Retrieve读取
delete删除
增加
1.单行全列插入(插入的记录的值,必须与字段个数相等)
insert into 数据表名 values(记录);
--主键列除了填0,还可以填null,default。都可以让其自动填列。
--若某键是枚举类型,可以直接用数字进行插入等修改(从1开始)。
2.部分插入
insert into 数据表名 (字段i,字段j…) values (对应的记录);
--没写的会显示默认值。不许为空的列必须插入。
3.多行插入
insert into 数据表名(字段i,字段j…) values (对应的记录1),
(对应的记录2), (对应的记录3)…;
修改
1.修改某字段在全部位置的值为
update 数据表名 set 字段名=字段值;
2.修改某字段在某个位置的值为
--找到字段名1=值名1的那一条数据,并修改字段2的值为
--那个字段名1,最好为主键,这样可以起到唯一修改的效果
update 数据表名 set 字段名2=字段值2 where 字段名1=值名1;
! ! ! 我们称where 字段名1=值名1叫定位条件。不只是=哦,定位条件也可以用>或<等来,用的是布尔值。
3.修改某些字段在某个位置的值为
--定位条件只能一个,老师我试过了。
update 数据表名 set 字段名1=字段值1,字段名1=字段值2 定位条件;
查询
1.查询整个表
select * from 数据表名;
2.查询某条数据
select *from 数据表名 定位条件;
3.查询某条数据的某些字段(普通)
select 字段1,字段2 from 数据表名 定位条件;
从这里可以看出 * 表示全部的字段
4.查询某条数据的某些字段(给字段取别名,增加可读性)
select 字段1 as 别名1,字段2 as 别名2 from 数据表名 定位条件;
先写的字段,会显示在前面
物理删除(忘了它吧,不要学)
1.删除数据表
delete from 数据表名;
2.删除数据表中某条记录
delete from 数据表名 定位条件;
逻辑删除
--添加一个字段,根据字段里面的值来判断,有没有删除。
alter table 数据表名 add is_delete bit default 0;为什么is_delete字段没东西?因为起码要一个字节我们才看得到,而这里只有一个bit。但是该怎么用还怎么用,定位条件为is_delete=0
update 数据表名 set is_delete=1 定位条件;