MySQL的安装步骤教程以及基本操作--详细讲解

MySQL的安装过程以及使用

  • 安装步骤
    • 安装MariaDB:
    • 配置:
    • 查看配置:
  • 数据库的基本操作
    • 库的操作:
    • 数据类型
    • 数据库表的操作:
    • 表中数据的增删改查:
    • 表中数据的增删改查(进阶):
    • 子集
    • 索引
    • 数据库事务:

安装步骤

安装MariaDB:

  1. 安装mariadb服务端和客户端软件:
sudo apt-get install -y mariadb-server mariadb-client

配置:

  1. 查看服务器是否正在运行:
sudo service mysql status

如果不在运行,执行以下命令(如果运行中不用执行):

sudo service mysql start
  1. 执行mysql_secure_installation
sudo mysql_secure_installation

交互式安装过程会问一些问题来设置MySQL:

Enter current password for root (enter for none):
如果你是第一次安装 MySQL,那么根本没有设置过密码,直接按回车即可。
Set root password?
输入 Y,然后输入你想要设置的密码。请注意,这里应该采用强密码,由数字、字母、符号组成,并且不应该与你的其他账户密码相同。
Remove anonymous users?
输入 Y。这样,没有密码的用户将无法访问 MySQL 服务器。
Disallow root login remotely?
这个问题涉及到 MySQL 服务器的安全设置。如果你只是在本地使用 MySQL,而不是在一台远程服务器上,那么直接输入 Y 即可。如果你需要在远程计算机上使用 MySQL,那么需要考虑更复杂的安全设置。
Remove test database and access to it?
输入 Y。这个问题涉及到 MySQL 服务器的安全设置。如果你不需要测试数据库,那么最好将其删除以防止安全漏洞的出现。
Reload privilege tables now?
输入 Y。这样你的设置才会生效。

查看配置:

  1. mysql安装后进入命令:
mysql -u root -p

mysql(打开mysql客户端)-u(用户名,默认为root)-p(输入密码)

进入后查看字符编码集:

show variables like '%char%';

数据库的基本操作

库的操作:

SQL-结构化查询语言:

  • 有具体格式与语法规则,每一条sql都要以一个英文分号结尾(SQL语句可以跨行,因此要以分号结尾)
  • 库表字段名称不能使用关键字-如果非要使用则使用反引号··(tab键上面的按键)括起来
  • 不区分大小写 DB_91和db_91以及dB_91相同
  1. 查看:查看当前所管理的数据库
show databases;
  1. 创建 :创建数据库
create database dbname;//如果创建名称dbname是一个关键字,则用反引号括起来
create database `dbname`;//典型用法:无论是否存在该数据库都会返回成功
create database if not exits `dbname`;
  1. 删除:删除该库
drop database `dbname`;
  1. 使用:选择默认使用的数据库
use `dbname`;
  1. 查看当前所使用的数据库
select database();
  1. 其他

显示创建该库时所使用的命令(了解)

show creat database `dbname`;

数据类型

  1. 整形:
    bit(16),tinyint, int, bigint
  2. 浮点型:
    float(m, d), double(数字个数, 数字中小数的个数)
    例如:double(5, 2) -> 888.88,五个数,小数个数为2
    decimal(m, d), numeric(m, d):精度损失小,使用较多
  3. 字符串型:
    varchar(32):变长字符类型,该例表示最多存储32个字符,text,mediumtext,blob
  4. 日期型:
    datatime

数据库表的操作:

表:以行列的关系模型给组织数据,一个库中可以存在多张表

  1. 创建:创建表
create table if not exits 表名(表内信息);

例如:
学生信息表:学号,姓名,年龄,性别,身高,体重

//注意:变量在前,类型在后
create table if not exits stu(
sn int comment '学号',
name varchar(32) comment '姓名',
age int comment '年龄',
sex varchar(1) comment '性别',
height int comment '身高',
weight decimal(4,1) comment '体重');

comment ‘’:为注释,可以在使用show creat table stu时查看该注释。
2. 查看:查看库中所有表

show tables;
  1. 描述:查看表内信息
describe 表名;
  1. 修改:修改表内信息(不常用)
alter table 表明 add 变量 类型;//举例:
alter table stu add birth datetime;
  1. 删除:删除表
drop table 表名;
  1. 其他

显示创建该表时所使用的命令

show creat table 表名;

表中数据的增删改查:

  1. 新增:insert[into]

单行插入:(into可省略)

insert into 表名 values(参数);
//指定列插入
insert into 表明(变量名) values(指定列参数);//举例
insert into stu values(1001,'张三',18,'男',165,55.55,'2023-11-27 14:14:12');
insert into stu(name,sn,sex) value('李四',1002,'女');

多行插入:

insert into 表名 values(参数1),(参数2),...(参数n);//举例
insert into stu values(1001,'张三',18,'男',165,55.55,'2023-11-27 14:14:12'),
(1003,'王五',17,'男',168,54.65,'2023-11-27 14:16:13'),
(1004,'阿衰',19,'男',167,57.85,'2023-11-27 14:17:14');
  1. 删除:delete
delete from stu where sn=1003;
  1. 修改:uodate
//前面的=是赋值,后面where的=是判断条件
update 表名 set 内部参数1=赋值,内部参数2=赋值 where 内部参数=表内值;//举例
update stu set weight=60.4,name='赵四' where sn=1003
  1. 查询:select

默认全列:

select * from 表名;

指定列查询:

select 变量 from 表名;//举例
select height,weight name from stu;

查询字段为表达式+取别名:as

select 变量1+变量2 as hw from 表名;//举例
select height+weight as hw name from stu;

去重:distinct

select distinct 变量 from 表名;//举例
select distinct height from stu;

排序:order by

//升序(默认)
select * from 表名 order by 变量;
select * from 表名 order by 变量 asc;
//降序
select * from 表名 order by 变量 desc;//举例
//先以第一列指定排序,若在相同的情况下以第二列指定排序
//即先以体重从高到底排序,若体重相同的情况下,按年龄从小到大排序
select * from stu order by height desc, age asc;

分页查询:limit

from 表名 order by 变量 指定排序 limit 查询数 offset 页数*查询数;//举例:身高从高到低排序,查询前三名1,2,3
from stu order by height desc limit 3 offset 0;
//第二页:也就是第4,5,6名
from stu order by height desc limit 3 offset 3;

条件查询:where

select * from 表名 where 变量名=;//举例
select * from stu where name='张三';

关系运算符:

//比较:>,>=,<,<=,=,!=,<=>(相等),<>(不相等)
select * from stu where name='张三';
select * from stu where birth<=>null;//空值:is null,  is not null
select * from stu where sn is null;//范围:between...and..
select * from stu where height between 165 and 170;//子集匹配:in(集合)
select * from stu where name in ('王四','赵四','李四');//模糊匹配:like
select * from stu where name like '%四%';

逻辑运算符:

//与:双目,and-连接两个比较条件,两者同为真,则结果为真
select * from stu where height>=165 and height<=170;
//或:双目,or-连接两个比较条件,两者任意一个为真,则结果为真
select * from stu where weight>=55 or height<=170;
//非:单目,not-针对单个比较条件,条件为真,则结果为假
select * from stu where not height>=165;

表中数据的增删改查(进阶):

  1. 键值约束与扩展属性

键值约束:约束表中指定字段的数据必须符合某种规则
种类:
非空约束:NOT NULL – 约束指定字段的数据不能为NULL
唯一约束:UNIQUE – 约束指定字段的数据不能出现重复
主键约束:primary key – 数据非空且唯一,一张表只有一个主键
外键约束:foreign key – 表中指定字段的数据受父表数据约束
默认值:DEFAULT – 为指定字段设置默认值
自增属性:AUTO_INCREMENT – 整形字段数据自动+1

create table if not exits student(
id int primary key auto_increment,
sn int not null unique,
name varchar(32),
class_id int,
sex varchar(1) default '男',
foreign key (class_id) reference class(id)
);
  1. 数据库中表的设计:ER关系图+三大范式

ER关系图:根据实体与实体之间的关系决定数据库表如何设计
一对一:每个实体设计表的时候都应该具有一个唯一主键
一对多:每个学生信息中都会包含一个班级id
多对多:创建一个中间表关联两个实体(学生-课程)

三大范式:数据库表设计的三大规范
1nf:表中每个字段都必须具有不可分割原子特性
第一范式是其他范式的前提
并且如果不遵循第一范式会导致按照某个非原子字段进行查询时降低效率
2nf:表中每个字段有应该与主键完全关联,而不是部分关联
若不遵循第二范式:则表中有可能存在大量冗余数据
3nf:表中每个字段都应该与主键直接关联,而不是间接关联

  1. 分组查询:以表中某一字段作为分组依据进行数据统计的分组查询 – group by having
select 变量1,变量2,... from 表名 grop by 变量1select role,sum(salary),max(salary),min(salary) from emp grop by role;

分组查询不能用where,用having代替

select role,sum(salary),max(salary),min(salary),avg(salary) from emp grop by role having avg(salary)>1500;

聚合函数:
count(*):统计数据条数
sun(fields):统计指定字段的和
max(fields):统计指定字段中的最大值
min(fields):统计指定字段中的最小值
avg(fields):统计指定字段中的平均值

  1. 多表联查:将多张表合在一起进行查询

将多张表合在一起:笛卡尔积
左连接:以左表作为基表在右表中查询符合条件的数据
右连接:以右表作为基表在左表中查询符号条件的数据进行连接

//[inner]可省略
select 字段 from1 别名1 [inner] join2 别名2 on 连接条件 and 其他条件;
select 字段 from1 别名1,2 别名2 where 连接条件 and 其他条件;selsect stu.name,class.name from stu inner join class on stu.class_id=class.id;
//左连接
selsect stu.name,class.name from stu left join class on stu.class_id=class.id;
//右连接
selsect stu.name,class.name from stu right join class on stu.class_id=class.id;

子集

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

//查询小明同学的同班同学
select * from student where classes_id=(select classes_id from student where name="小明");

子条件in:先获取条件的结果集,然后逐条在结果集中进行判断

select * from score where course_id in (select id from course where name='语文' or name='英文');

EXISTS关键字:后面判断为真则查询
取出一条成绩信息,然后去表中再次查询是否具有符合条件的结果

select * from score where exists(select score.id from course where (name='语文' or name='英文') and course.id=score.course.id);

合并查询:union – 将多条sql语句的执行结果合并到一起

select * from course where id<=3 
union 
select * from course where name="java";

union all :全部合并,并不去除重复数据

select * from course where id<=3 
union all
select * from course where name="java";

索引

B树与B+树:
B树:是一个多叉树 – 降低树的高度来提高查询效率
B+树:也是一个多叉树
相较于B树的差别:
B树的数据与索引存储在一起,B+树数据与索引分离
一次性可以从磁盘中读取出更多索引信息,更利于索引检索
B+树数据顺序存储,在连续查询或范围查询时可以连续IO去除数据,效率较高

聚簇索引/非聚簇索引:
聚簇索引:以主键作为主索引,数据节点在磁盘中顺序进行存储,其他的索引作为辅助索引,其中辅助索引保存的是主键索引的字段值
使用场景:索引与数据都是顺序存储的,因此中间插入/删除需要调整索引的存储结构。
聚簇索引的数据都是顺序存储的,因此在连续/范围查询的时候效率较高
聚簇索引通常针对主键创建,一张表只有一个
非聚簇索引:主键索引与普通索引区别不大,都是最终索引项中存储数据在磁盘中的存放位置,数据节点在磁盘中并非顺序存储
使用场景:中间插入数据,只需要将数据存储到磁盘新的位置,中间调整索引信息即可
因为索引与数据存储顺序不一致,导致在范围查询是,与单个查询效率没有差别都需要一个个去找出来

innodb索引类型默认是聚簇索引,中间数据的插入与删除会涉及索引与数据的位置调整,因此大多数情况都是使用自增主键作为聚簇索引,这样的话数据与索引总是在最后添加,而不涉及中间插入的调整。
在数据库操作中的索引类型:

  1. 主键索引:一个字段被设置为主键,则默认就会为主键字段创建主键索引
  2. 唯一键索引:一个字段被设置了唯一约束,也会默认创建唯一键索引
  3. 外键索引:一个字段被设置外键约束,也会默认创建外键索引 普通索引:并非默认创建的索引

查看索引:

show index from tbname\G;

创建索引:

create index idx_name on tbname(fields_name);

删除索引:

drop index idx_name on tbname;

数据库事务:

概念:一个或多个sql的组合
示例:
银行转账:给同学转账1000,你的账户少了1000,对方账户多了1000
特性:
原子性:一个事务要么一次完成要么一个都不做。
一致性:在事务前与事务后,数据完整性都要符合预设规则,以来原子性
持久性:事务之后,数据的修改是永久的(持久化存储)
隔离性:允许多个事务并发执行,不会因为交叉执行导致数据不一致
脏写:事务A对数据的修改,在事务提交之前被其他事务覆盖
脏读:一个事务中读取到的数据是其他事务中未提交的数据
不可重复读(针对update):在一个事务的不同阶段所读取的数据不一致
幻读(insert/delete):在一个事务内的不同时间段读取到的数据条数不一致

mvcc:多版本并发控制
就是给每个事务分配一个事务id
事务中对数据进行操作时,都临时拷贝出一份数据进行操作
在本次事务对数据再次进行访问时访问的都是这个临时拷贝
事务提交时将事务操作持久化存储

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#zookeeper集群+kafka集群

kafka3.0之前是依赖于zookeeper的。 zookeeper是开源&#xff0c;分布式的架构。提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式涉及的分布式服务管理架构。 存储和管理数据。分布式节点上的服务接受观察者的注册。一旦分布式节点上的数据发生变化&#xf…

公共英语三级阅读理解一篇,附带答案

公共英语三级阅读理解 The food we eat seems to have profound effects on our health&#xff0e;Although science has made enormous steps in making food more fit to eat, it has, at the same time, made many foods unfit to eat&#xff0e;Some research has shown…

【快速见刊|投稿优惠】2024年机电一体与自动化技术国际学术会议(IACMAT 2024)

2024年机电一体与自动化技术国际学术会议(IACMAT 2024) 2024 International Academic Conference on Mechatronics and Automation Technology(IACMAT 2024) 一【会议简介】 2024年机电一体与自动化技术国际学术会议(IACMAT 2024)即将召开&#xff0c;它以“机电一体&#xff0…

2023年【安全员-B证】最新解析及安全员-B证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-B证最新解析是安全生产模拟考试一点通生成的&#xff0c;安全员-B证证模拟考试题库是根据安全员-B证最新版教材汇编出安全员-B证仿真模拟考试。2023年【安全员-B证】最新解析及安全员-B证免费试题 1、【多选题…

用友U8 ERP和面粉行业专版系统接口集成方案

面粉加工行业面临着数据管理和业务流程自动化的挑战。众诚ERP系统和用友U8系统的数据集成是解决这一挑战的关键。 解决方案 轻易云平台提供了一套完善的数据同步和集成解决方案&#xff0c;包括以下几个方面&#xff1a; 基础资料同步&#xff1a;包括物料、客户、供应商、仓…

解决:AttributeError: ‘NoneType’ object has no attribute ‘shape’

解决&#xff1a;AttributeError: ‘NoneType’ object has no attribute ‘shape’ 文章目录 解决&#xff1a;AttributeError: NoneType object has no attribute shape背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&…

【数值计算方法(黄明游)】矩阵特征值与特征向量的计算(二):Jacobi 过关法(Jacobi 旋转法的改进)【理论到程序】

文章目录 一、Jacobi 旋转法1. 基本思想2. 注意事项 二、Jacobi 过关法1. 基本思想2. 注意事项 三、Python实现迭代过程&#xff08;调试&#xff09; 矩阵的特征值&#xff08;eigenvalue&#xff09;和特征向量&#xff08;eigenvector&#xff09;在很多应用中都具有重要的数…

Spring Task

Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 **定位&#xff1a;**定时任务框架 **作用&#xff1a;**定时自动执行某段Java代码 cron表达式 cron表达式其实就是一个字符串&#xff0c;通过cron表达式可以定义任务触…

c语言:模拟实现atoi函数

atoi函数的功能和用法&#xff1a; 主要功能&#xff1a;将字符串转换为整数。例如&#xff0c;将字符类型的“123”转换为整数123. #include <stdio.h> #include <stdlib.h>int main() {char str[] "123";int num atoi(str);printf("Converted …

【matlab程序】画海洋流场

【matlab程序】画海洋流场 clear;clc; file ( ‘0227.nc’); latncread(file,‘latitude’); lonncread(file,‘longitude’); uncread(file,‘water_u’); vncread(file,‘water_v’); [x,y]meshgrid(lon,lat); xx’; yy’; interval4; figure (1) set(gcf,‘color’,[1 1 1…

Period of an Infinite Binary Expansion(分析+欧拉)

传送阵&#xff1a;NEFU2022-Eulers totient function - Virtual Judge 思路&#xff1a; 对于一个小于1的数&#xff0c;化为二进制&#xff0c;找第一次进入循环的位置和最小循环周期。 我们设第一次进入循环的位置是i&#xff0c;第一次循环结束后&#xff0c;再次进入循…

3D云参观红色革命纪念馆允许更多人在线交流、体验

生活在和平年代的新一代青少年&#xff0c;可能对革命先烈英勇事迹难以有很深的体会&#xff0c;无法切实感受到中国共产党无畏牺牲、誓死保家卫国的红色精神&#xff0c;因此借助VR虚拟现实制作技术&#xff0c;让参观者们走近革命先烈中&#xff0c;感受老一辈无产阶级革命家…

高德地图全国行政区域信息

行政区域查询-API文档-开发指南-Web服务 API | 高德地图API private static void tm1(String s) throws IOException {String url"https://restapi.amap.com/v3/config/district?keywords中华人民共和国&subdistrict3&key用户key";String sx OkHttpUtils.g…

domjudge题目配置和开比赛

系统使用的是7.3.3&#xff0c;domjudge配置的方法请参考前文 domjudge配置-CSDN博客 题目导入 传统比较 首先可以去domjudge中随便下载一个题目&#xff0c;下载下来的压缩包应该是这样的 │ domjudge-problem.ini │ problem.pdf │ problem.yaml │ └─data└─sec…

模型层(回顾补充)

1.1基本使用 orm框架---》对象关系映射 数据库中&#xff1a;一个个表 &#xff1a;user表&#xff0c;book表&#xff0c;一条条的记录 程序中&#xff1a;一个个类&#xff0c;一个个对象 以后数据库中一张表---》对应程序中一个类 以后数据库中一条记录--》对应…

12月01日,每日信息差//阿里国际发布3款AI设计生态工具//美团买菜升级为“小象超市”//外国人永居证换新、6国游客免签来华

_灵感 &#x1f396; 阿里国际发布3款AI设计生态工具 &#x1f384; AITO问界系列11月交付新车18827辆 &#x1f30d; 美团买菜升级为“小象超市” &#x1f30b; 全球首个金融风控大模型国际标准出炉&#xff0c;由腾讯牵头制定 &#x1f381; 支付宝&#xff1a;支持外国人…

Python函数关键字参数及用法

在定义 Python 函数时可定义形参&#xff08;形式参数的意思&#xff09;&#xff0c;这些形参的值要等到调用时才能确定下来&#xff0c;由函数的调用者负责为形参传入参数值。简单来说&#xff0c;就是谁调用函数&#xff0c;谁负责传入参数值。 Python 函数的参数名不是无意…

Appium 元素定位与常用方法,让你轻松玩转自动化测试!

对测试人来说&#xff0c;Appium 是非常重要的一个开源跨平台自动化测试工具&#xff0c;它允许测试人员在不同的平台&#xff08;iOS、Android 等&#xff09;使用同一套 API 来写自动化测试脚本&#xff0c;这样可大幅提升代码复用率和工作效率。 本文汇总了从 Appium 基础到…

Python列表切片操作详解:提取、复制、反转等应用示例

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;列表切片是处理列表数据非常强大且灵活的方法。本文将全面探讨Python中列表切片的多种用法&#xff0c;包括提取子列表、复制列表、反转列表等操作&#xff0c;结合丰富的示例代码进行详细…

直饮水表与智能水表有哪些区别?

随着科技的不断进步,智能家居的概念正逐渐深入人们的生活。其中,直饮水表和智能水表作为创新科技的代表,在水资源的使用和管理方面发挥了重要作用。然而,这两者之间存在一些关键的区别。那么&#xff0c;直饮水表与智能水表到底有哪些区别呢&#xff1f; 直饮水表和智能水表都是…