掌握MySQL,看完这篇文章就够了!

1. MySQL

MySQL是一种广泛使用的关系型数据库管理系统(RDBMS),由瑞典的MySQL AB公司开发,目前属于甲骨文公司(Oracle Corporation)。

MySQL使用结构化查询语言(SQL)进行数据库管理,这是一种用于添加、访问和处理数据库内容的标准编程语言。MySQL被广泛应用于各种场景,包括网站建设、网络应用、数据存储和日志记录等。

MySQL级别组织:数据库管理系统DBMS——数据库DB——表Table——行Row——列Column

2. MySQL的安装

(1)使用custom自定义安装,默认使用TCP/IP协议,MySQL默认端口号为3306。

(2)配置用户及密码:默认使用root用户,输入密码;也可以自定义用户。

(3)配置服务,开机启动。不想开机启动的话,也可在任务管理器手动启动MySQL服务。

(4)配置环境变量:高级设置->环境变量->mysql所在位置bin目录(默认存放位置为C:\Program Files\MySQL\MySQL Server 5.7\bin)->确定->确定->确定,按如上步骤操作,可配置成功。

(5)测试是否安装成功:按住win+r键,输入cmd回车,在弹出的黑窗口输入以下代码,回车输入密码,若显示以下图片极为安装成功。

mysql -uroot -p

(6)通过黑窗口连接数据库时,输入代码

        -u后加用户名,可以是系统用户,也可以是自己创建的用户,

        -p后输入密码,

        -P后输入端口号3306,

        -h后输入IP地址,远程访问需要权限。

mysql -uroot -p;

3. MySQL使用客户端

(1)可以使用黑窗口操作,如上标题2所示操作进行连接

(2)可以使用workbentch,MySQL自带的客户端

(3)navicat软件(我使用的该软件)

4. SQL结构化查询数据库

4.1  数据库相关

(1)展示所有数据库

如下图所示,其中红色框选的为系统自带,初学者不要进行随意修改。

show databases;

(2)查看当前使用数据库

未选择数据库时会显示NULL。

select database();

(3)创建一个数据库

如下三种方法创建,创建时指定字符编码utf8,适用中文。

create database 数据库名 charset = utf8;

create database 数据库名 character set utf8;

create database if not exists 数据库名 charset = utf8;

(4)使用数据库

use 数据库名;

(5)删除数据库

drop database 数据库名;

4.2  表相关

(1)查询所有表

show tables;

(2)创建表

create table 表名 ( 列名 约束信息, 列名 约束信息);

# 例如以下语句创建teacher表
Create table teacher (id int primary key not null auto_increment, name varchar(20) not null)

(3)查看表信息

describe 表名

# 如:
desc teacher;

(4)删除表

desc 表名


desc teacher;

(5)修改表名

rename Table 原始表名 to 新表名

(6)操作表中的列信息

①添加列

add table 表名 列名 类型 约束


add table teacher add age int default 20;

②删除列

drop 列名

Add table teacher drop sex;

③修改列

change 原始列名 新列名 类型 约束

Add table teacher change age age int default 18;

4.3  数据相关

(1)查询数据

# 查询所有数据
Select * from 表名

# 查询某列数据
Select  (列1, 列2...  ) from 表名

# 查询满足某个条件的数据
Select * from 表名 where 条件;

(2)插入数据

①全列插入:包含所有列,需要给每一列赋值

# 插入单行:
Insert into 表名 values (列1,列2,列3)

# 插入多行:
insert into 表名 values () , () , ()...

②缺省插入:

a.需要指定列指定值,有默认值的可以忽略

Insert into 表名 ( 列1, 列2)  values (值1,值2)

b.直接设置某列等于某个值

insert into 表名 set 列1 = 值1,列2 = 值2

(3)修改数据

# (如果不带条件则会修改整个表)

update 表名 set 列=值,列2=值2,where 条件

(4)删除数据

#(如果不带条件则会修改整个表)

delete from 表名 where 条件;

5. MySQL列的约束

(1)主键:primary key

一个表中必须有一列是主键;

主键列默认不能重复,一般是有一个独立的列id;

定义方法:可以在列类型之后使用primary key;在定义完所有列之后单独使用primary key

(2)非空:not null

(3)自增长:auto_increment

(4)唯一:unique

(5)默认:default

(6)外键:foreign key

6. MySQL的数据类型

(1)数字

Int

整数4个字节
bigint

整数

8个字节
float浮点数,单精度4个字节
double双精度8个字节
decimal高精度须指明小数位数及精度

(2)字符串

char长度
varchar可变长度
text长文本

(3)布尔 bool

0假、False
1真、True

(4)时间日期datetime

date日期
time时间
datetime时间日期
timestamp时间戳

(5)枚举Enum  罗列所有可能

7. 数据库的外键

(1)添加外键

①创建表时添加

Create table 表名( 列名 类型  列约束 ,  列名 类型  列约束 , 列名  类型  列约束constraint 外键名 foreign key(列名) references 外键所属表名on update 外键修饰on delete 外键修饰);


# 例:
Create table teacher ( id int primary key not null auto_increment ,  name varchar(20) not null , sid int not null constraint fk_sid foreign key(sid) references student on update cascade on delete cascade);

②表创建完成之后添加

Alter table teacher add constraint 外键名 foreign key(列名) references 外键所属表名on update 外键修饰on delete 外键修饰);

# 例:
Alter table teacher add constraint fk_sid foreign key(sid) references student on update cascade on delete cascade;

(2)创建外键时,该外键在其主表中必须存在

(3)删除外键

alter table 表名 drop foreign key

(4)外键的修饰选项

Restrict 拒绝,假如有外键使用到主表中的主键,修改时会被拒绝

Cascade 级联,删除修改主表时,外键对应的内容同步操作

8.进阶查询

(1)普通查询

# 查询所有行的所有列
Select * from teacher;	

# 查询所有行的部分(name,age)列
Select name,age form teacher;		

# 查询部分行的条件列
Select name, age from teacher where id < 5;	

(2)通过起别名来区分呈现不同表的同名的列

Select 列名 as 别名,列名 as 别名 from 表名 where 条件


Select name as 姓名 , age as 年龄 from teacher where id < 5;

(3)条件查询

比较运算符

=、  !=、  <>   、<   、 <=  、 >、>=  

多个条件

and 并且、or 或者

成员

in 在其中一个、not in

范围比较 between and
模糊查询

like,(%代表n个字符,_代表一个字符)

判空

is null 空,is not null 不是空(空字符串不是null)

9.函数

(1)系统函数

# 当前用户
Select user();	

# 当前数据库版本
Select versioin();	

# 当前使用数据库	
Select database();	

# 当前日期
Select current_date();	

# 当前时间	
Select current_time();	

# 当前日期时间	
Select current_timestamp();	

(2)聚合函数

# 最大值
Max(列名)

# 最小值	
Min(列名)	

#平均值
Avg(列名)

# 求和	
Sum(列名)	

# 统计行数
Count(列名)		
Select count(age) from teacher;

10. 常用技术

(1)排序:order

asc——默认升序、desc——降序

Select * from 表名 order by 列名 排序方式,列名 排序方式

(2)分页:limit

Select * from 表名 limit n	显示前n个
Select * from 表名 limit m,n	从索引m开始显示前n个
Select * from 表名 limit (page - 1)* size , size 显示page页每页size个

(3)分组:group by

针对查询结果进行分组


select count(*) from 表名 where 条件
Select sex,count(*) from teacher where id > 2 group by sex having sex = ‘女’

(4)去重:distinct去重某一列

Select distinct (age ) from teacher;

11.关联查询

(1)嵌套查询:一个查询的结果作为另一个查询的内容

Select * from student where tid = (select id from teacher where name=’t1’)

(2)笛卡尔连接:组合表中所有数据,

一个有m行,另一个n行,查询结果共m*n行

Select * from teacher, student

(3)内连接:inner join on 条件

Select student.name , teacher.name from teacher inner join student on student.tid = teacher.id

(4)左外连接:内连接结果+左表内容(右侧补null)

Select student.name , teacher.name from teacher left join student on student.tid = teacher.id

(5)右外连接:内连接结果+右表内容(左侧补null)

Select student.name , teacher.name from teacher right join student on student.tid = teacher.id

(6)全连接:左外连接 union 右外连接

Select student.name , teacher.name from teacher left join student on student.tid = teacher.id union Select student.name , teacher.name from teacher right join student on student.tid = teacher.id

12.用户与授权

(1)创建用户:

create user ‘temp1’@’%’ identified by ‘123456’

(2)分配权限:

# 分配所有权限:
grant all on *.* to ‘temp1’@’%’ ;

# 分配部分权限:
grant select,insert on 数据库名.* to ‘temp1’@’%’ 

(3)删除用户:

drop user ‘temp1’@’%’

(4)刷新权限:

flush privileges(刷新之后才能生效)

13.视图

视图就是一张虚拟的表,方便查询;修改视图内容就等于修改表内容;可以隐藏真实表结构,显示出需要的行列。

创建视图:可以直接在navicat工具里交互式创建。

使用视图:相当于使用表。

14.函数与存储过程

(1)函数经过计算返回一个结果,需要指定形参,制定返回值。

函数与存储过程都是存储在服务器上的,可以提升数据的安全。

创建函数:交互式创建,

调用函数:

select 函数名(参数); Select my_add(5, 10);

(2)存储过程:一套SQL操作,没有返回值。

BEGIN
SELECT * FROM student_teacher_view LIMIT n;
SELECT * FROM student LIMIT n;
SELECT * FROM teacher LIMIT n;
END

执行过程:

call 过程名(参数);     

call my_select(5);

15.索引

索引是一种查询优化技术,可以提升查询效率,本质是要预先存储一些额外数据,牺牲存储空间,提升查询效率

索引类型:

主键索引:主键自带索引

唯一索引:unique

普通索引:formal

何时定义索引:索引不是创建越多越好,如果表的修改频率较高,不适合创建索引;如果表的查询频率较高,几乎不修改,就适合创建索引。

索引方法:

        BTREE适合大数据量,适用于范围比较;

        HASH适合小数据量,适用于精准的等值比较。

16.事务

Mysql存储引擎默认innoDB支持事务。

事务就是mysql数据库中对应的一系列操作,要么全部执行成功然后提交,要么全部失败回滚。

Mysql终端默认自动提交,

# 设置自动提交:
set autocommit = 1;

# 取消自动提交:
set autocommit = 0;

事务相关:

(1)开启事务:

# 默认不会自动提交
start transaction; 

(2)结束事务:

# 成功提交
commit; 

# 失败回滚
rollback; 

事务特性:ACID原则

原子性atomicity:不可再分的单元,要么全部成功,要么全部失败

一致性consistency:执行前后数据要保持一致

隔离性isolation:多个事务互不影响

持久性durability:一旦提交,则执行完毕,永久改变

17.存储引擎

存储引擎是数据库存储的实现方式,不同的存储引擎适合不同的场景。

关键字:

create table 表名() engine = 引擎名;

常用存储引擎:

(1)InnoDB:mysql默认存储引擎

特点:支持外键;支持事务;支持行级别锁定与阻塞;综合能力强,适用于大多数场景,使用后缀为ibd文件存储内容

(2)MyISAM特点:查询、排序速度非常快,但不支持外键。

(3)Memory特点:读写内存速度快,但是不能持久化,即不能在本地保存。一旦数据库断开连接数据全部清空。

(4)CSV特点:使用逗号分隔,便于导入导出操作

18.数据库的备份与恢复

数据库备份,将数据库信息转储为sql文件,文件名.sql

数据库恢复,手动创建数据库之后,右键、执行sql文件,将文件导入即可。

19.使用pycharm连接数据库

导入pymysql模块:

pip install pymysql

步骤:

(1)导入pymysql模块

(2)构建一个链接

(3)通过连接构建一个游标实例

(4)通过游标实例执行sql语句; 获取游标中所有内容

(5)释放游标与连接

# 1.导入pymysql模块
import pymysql

# 2.构建一个链接
con = pymysql.connect(host="localhost", port=3306, user="root", password="123456")
# 2.1 使用数据库
con.select_db("ly")
# 3.通过连接构建一个游标实例
cur = con.cursor()
# 4.通过游标实例执行sql语句
sql = "select * from teacher"
line = cur.execute(sql)
print(f"影响行数{line}")
# 4.1获取游标中所有内容
# datas = cur.fetchall()
# for data in datas:
#     print(data)
# 4.2 改变游标位置
cur.scroll(1)
data = cur.fetchone()
print(data)
print("--------------------")
datas = cur.fetchmany(3)
for data in datas:
    print(data)
print("--------------------")
datas = cur.fetchall()
for data in datas:
    print(data)
# 相对改变
print("*****************************")
cur.scroll(-1, mode="relative")
data = cur.fetchone()
print(data)
# 绝对改变
print("*****************************")
cur.scroll(0, mode="absolute")
data = cur.fetchone()
print(data)

# 5.释放游标与连接
cur.close()
con.close()

20.pycharm有关MySQL方法使用

(1)Fetchone:获取游标执行完sql语句之后的一行内容

(2)Fetchall:获取游标执行完sql语句之后的所有内容

(3)Fetchmany(size):获取游标执行完sql语句之后的size行内容

(4)Scroll:改变游标位置,默认relative,可以变为absolute

(5)Execute:执行一行sql语句函数

(6)Executemany:执行多行SQL语句

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/442193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言指针——常量字符串和 变量字符串

常量字符串和 变量字符串 常量字符串和变量字符串是在编程中常见的两种字符串类型&#xff0c;它们有以下区别&#xff1a; 值的不可变性&#xff1a;常量字符串的值是不可变的&#xff0c;一旦被定义&#xff0c;就不能修改。而变量字符串的值是可变的&#xff0c;可以随时修…

Redis进阶(三):主从复制

为了解决单点问题&#xff0c;实现多服务器部署redis&#xff0c;有几种解决方案可以实现&#xff1a;主从复制&#xff0c;主从哨兵还有集群。 何为主从复制 简单来说有三个服务器分别部署了redis-server程序&#xff0c;选中一个服务器当作主节点&#xff0c;其他的就是从节…

【PCL】(二十六)自定义条件的欧几里得聚类分割点云

&#xff08;二十六&#xff09;自定义条件的欧几里得聚类分割点云 以下代码实现自定义条件对点进行欧几里得聚类分割。 conditional_euclidean_clustering.cpp #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/console/time.h>#…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

Mint_21.3 drawing-area和goocanvas的FB笔记(五)

FreeBASIC SDL图形功能 SDL - Simple DirectMedia Layer 是完整的跨平台系统&#xff0c;有自己的窗口、直接捕获键盘、鼠标和游戏操纵杆的事件&#xff0c;直接操作音频和CDROM&#xff0c;在其surface上可使用gfx, openGL和direct3D绘图。Window3.0时代&#xff0c;各种应用…

准谐振PWM控制器-能够实现多种保护功能FAN6921MRMY 功率因数控制器

高度集成的FAN6921MRMY将功率因数控制器 (PFC) 和准谐振 PWM 控制器相结合。集成提供了成本高效的设计&#xff0c;可减少外部组件数量。对于 PFC&#xff0c;FAN6921MRMY使用控制导通时间技术提供调节的直流输出电压&#xff0c;执行自然的功率因数校正。FAN6921MRMY使用创新的…

【代码随想录算法训练营Day40】01背包问题一维dp数组;二维dp数组(滚动数组);416.分割等和子集

文章目录 ❇️Day 41 第九章 动态规划 part04✴️今日任务❇️01背包问题 二维背包问题的区别暴力解法动规五部曲 ❇️01背包问题 一维二维转一维&#xff1a;滚动数组动规五部曲 ❇️416. 分割等和子集随想录思路自己的思路二维方法一维方法 自己的代码二维方法一维方法 ❇️D…

Kibana二次开发环境搭建

1 kibana环境搭建 1.1 搭建后端服务 &#xff08;1&#xff09;java环境安装 ElasticSearch运行需要java jdk支持。所以要先安装JAVA环境。由于ElasticSearch 5.x 往后依赖于JDK 1.8的&#xff0c;所以现在我们下载JDK 1.8或者更高版本。下载JDK1.8,下载完成后安装&#xff…

去电脑维修店修电脑需要注意什么呢?装机之家晓龙

每当电脑出现故障时&#xff0c;你无疑会感到非常沮丧。 如果计算机已过了保修期&#xff0c;您将无法享受制造商的免费保修服务。 这意味着您必须自费找到一家电脑维修店。 去电脑维修店并不容易。 大家一定要知道&#xff0c;电脑维修非常困难&#xff0c;尤其是笔记本电脑维…

qtCreator可以全局包含。VSqt中千万不能全局包含,你的控件头文件会自己变成<>括号,编译就报错

qtCreator可以全局包含。 VSqt中千万不能全局包含&#xff0c;你的控件头文件会自己变成&#xff1c;&#xff1e;括号&#xff0c;编译就报错

重建大师6.2版本的建模效果出现下图中模糊的情况,是什么原因?

可能是因为坐标原点设置的不对&#xff0c;图例中的三角网都出现了精度损失的问题。 坐标原点设置的具体操作&#xff1a;提交产品后&#xff0c;在弹出的界面&#xff0c;可以设定坐标原点。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0…

第七届强网杯-PWN-【warmup】

文章目录 warmup libc 2.35检查IDA逆向maindeldelete_noteadd_noteshow_noteinput_numberread_16atoi __errno_location()相关解释prctl相关 思路高版本off by null利用技巧产生chunk extend泄露libc基地址泄露heap基地址修改放入tcachebin中的chunk的fd为stdout最后add两个chu…

AI大模型助力创意思维,拓展无限可能性

在当今快速发展的科技时代&#xff0c;人工智能大模型正逐渐成为我们生活中不可或缺的一部分。它们拥有强大的计算能力和学习能力&#xff0c;能够帮助我们解决许多复杂的问题&#xff0c;同时也可以为创意思维的拓展提供无限可能性。 人工智能大模型可以通过对海量数据的分析…

docker部署springboot jar包项目

docker部署springboot jar包项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1…

华为北向网管NCE开发教程(1)闭坑选接口协议

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 本文一是记录自己开发华为北向网管遇到的坑&#xff0c;二是给需要的人&…

Rocky Linux 的安装

1. 为什么用Rocky 因为CentOS不干了&#xff0c;这是CentOS的现状&#xff1a; CentOS Linux 8 在 2021 年底停止更新&#xff1b; CentOS Linux 7 用户较多&#xff0c;这个版本将在 2024 年 6 月 30 日停止支持&#xff1b; 未来社区不会再有 CentOS Linux 的新版本&…

联立方程模型的可识别性的通俗解释

联立方程模型的可识别性&#xff0c;主要的解法是阶条件算法和秩条件算法&#xff0c;数学公式角度的解释就不讲了&#xff0c;参考下面的前人文献。 【计量经济学】联立方程模型-CSDN博客 说一下公式算法背后的通俗原理。 在计量经济模型中&#xff0c;比如 Y23*Xu中&#x…

[java基础揉碎]super关键字

super关键字: 基本介绍 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super给编程带来的便利/细节 1.调用父类的构造器的好处(分工明确&#xff0c;父类属性由父类初始化&#xff0c;子类的属性由子类初始化) 2.当子类中有和父类中的成员(属性和方法)重…

Springer旗下SCI,16天见刊!稳定检索13年,质量稳定

毕业推荐 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区 • 2个月19天录用&#xff0c;6天见刊&#xff0c;36天检索 SCI&EI&#xff08;CCF-C类&#xff09; • 算法类&#xff0c;2.0-3.0&#xff0c;JCR3区&#xff0c…

数字孪生的大方向趋势及未来

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 数字孪生的大方向趋势及未来 一、引言 数字孪生&#xff08;Digital Twin&#xff09…
最新文章