浅看MySQL数据库

news2024/12/26 23:00:59

有这么一句话:“一个不会数据库的程序员不是合格的程序员”。有点夸张,但是确是如此。透彻学习数据库是要学习好多知识,需要学的东西也是偏难的。我们今天来看数据库MySQL的一些简单基础东西,跟着小编一起来看一下吧。

什么是数据库

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。

我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。

1.什么是MySQL数据库

MySQL 是一个流行的开源关系型数据库管理系统,用于存储和管理数据。

现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。

所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

1.1特点

1.数据以表格的形式出现

2.每行为各种记录名称

3.每列为记录名称所对应的数据域

4.许多的行和列组成一张表单

5.若干的表单组成database

1.2术语

1.数据库: 数据库是一些关联表的集合。

2.数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

3.列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。

4.行:一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

5.冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

6.主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

7.外键:外键用于关联两个表。

8.复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

9.索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

10.参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

2.安装与启动

2.1安装

可以从 MySQL 的官方网站下载适合你操作系统的安装包,并按照安装指南进行安装。常见的操作系统包括 Windows、Linux。

2.2启动 

Windows:通过   MySQL Installer  启动 MySQL 服务。

Linux:使用命令 sudo systemctl start mysql 启动 MySQL 服务。

3.基础操作指令

3.1MySQL连接 

mysql -u root -p   # root 是用户名 可以是其他用户名

3.2数据库操作 

3.2.1查看所有库

show databases;  # 会展示用户下所有数据库

3.2.2创建数据库

create database admin charset=utf8;  # 指令执行会创建一个名为admin的数据库

在创建数据库时, 库名后面按需要可以添加 charset=utf8 ,否则数据库中所有数据不能出现中文。

注意:执行数据库操作后结果有时候会显示拒绝了操作,这时候是该用户没有相关数据库的权限,可以到root用户中给该用户设置权限。

3.2.3删除数据库

drop database admin;  # 指令执行用户删除名为admin的数据库

在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。在执行删除数据库操作前,请确保你确实想要删除数据库及其所有数据,因为该操作是不可逆的。为了避免误操作,通常建议在执行删除之前备份数据库。 

3.2.4选择数据库 

use admin;  # 选择使用 用户下名为admin的数据库,没有报找不到

<>Database changed  # 选择成功显示这个

选择来数据库后,你的后续 SQL 查询和操作在指定的数据库上执行。 

3.3数据表操作

3.3.1查看所有表

show tables;  # 展示选择数据库下的所有数据表,未选择数据库会报未选择

 3.3.2创建数据表

use admin;
Database changed
# 选择使用admin数据库
create table user (id int primary key auto_increment, user_name varchar(20) not null unique, password int not null default 123456);  # 在数据库admin下创建了名为user的数据表

show tables;
+-----------------+
| Tables_in_admin |
+-----------------+
| user            |
+-----------------+
1 row in set (0.00 sec)
# 可以看出此时已经创建数据表user成功

执行后可以通过查看所有表指令查看是否创建成功。

 3.3.3查看数据表结构

desc user;  # 可以查看user表的结构 是否和创建预想结果一致
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| id        | int(11)     | NO   | PRI | NULL    | auto_increment |
| user_name | varchar(20) | NO   | UNI | NULL    |                |
| password  | int(11)     | NO   |     | 123456  |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.03 sec)  
# 可以看出和在创建user表时想要的效果一样

提一点是,auto_increment 是约束自增长,默认非空。

3.3.4删除数据表

drop table user;  # 删除数据表user
Query OK, 0 rows affected (0.14 sec)

show tables;
Empty set (0.00 sec)
# 此时展示所有表就不再有user

和删除数据库一样,在删除前一定要确定好并且操作要规范,避免发生意外可以提前备份。 

3.3.5修改数据表

alter table user drop password;  # 删除user表中名password的列
alter table user add age int not null default 20;  # 在user表中添加新列
alter table user change user_name name varchar(20) not null unique;  # 把user表中列名为user_name 的列改为 名 name的新列

desc user;
# 执行修改表指令后可以查看表结构是否修改成功

修改表结构要注意添加和改变时要加上类型和约束。

3.4约束

非空: not null  不能为空

唯一: unique  列中内容不可重复

默认: default  无指定时,使用默认值

外键: foreign key  与其他表关联 是其他表的左键

主键: primary key  可以确定唯一的一行 只能有一个

自增长: aotu_increment  每次+1 这里要注意的是,无论操作是否成功或保存,执行了就会+1,也就是说,在某些情况下,表中实际数据自增长列不一定相邻相差为1。

3.5CURD(增删改查)

3.5.1插入数据表数据

insert into user (id, user_name) values (0,'鸽鸽'),(0,'宇将军'),(0,'giao弟'),(0,'荒天帝');  # 向user表中添加数据
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0

select * from user;  # 查询user表中的数据
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  1 | 鸽鸽      |   123456 |
|  2 | 宇将军    |   123456 |
|  3 | giao弟    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
4 rows in set (0.02 sec)

还可以使用其他添加格式:

按照实际需要可以任意选择格式,注意格式规范即可。 

3.5.2查询数据表数据 

select * from user;  # 查询user表中的数据
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  1 | 鸽鸽      |   123456 |
|  2 | 宇将军    |   123456 |
|  3 | giao弟    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
4 rows in set (0.02 sec)

在实际使用时,不建议使用 select * from 表名,耗时大。

select id, user_name from user;  # 选择某些指定列查询显示
+----+-----------+
| id | user_name |
+----+-----------+
|  3 | giao弟    |
|  2 | 宇将军    |
|  4 | 荒天帝    |
|  1 | 鸽鸽      |
+----+-----------+
4 rows in set (0.00 sec)

select id as 序号, user_name as 用户名 from user;  # 还可以用别名替代原列名显示,不影响表列名
+------+--------+
| 序号 | 用户名 |
+------+--------+
|    3 | giao弟 |
|    2 | 宇将军 |
|    4 | 荒天帝 |
|    1 | 鸽鸽   |
+------+--------+
4 rows in set (0.01 sec)

通过特定列查询,相对耗时少,效率更高。

select * from user where id > 2;  # 通过条件筛选查询数据
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  3 | giao弟    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
2 rows in set (0.07 sec)


select * from user where id > 2 or user_name = '宇将军 ';
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  2 | 宇将军    |   123456 |
|  3 | giao弟    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
3 rows in set (0.00 sec)

可以通过 where + 条件 来选择查询, 条件有:

比较运算符: > < = >= <= != <>  其中 <> 和 != 作用一致。

逻辑运算符: and or not

判空: is null   is not null 

成员运算符: in  精确比较

范围比较: between n and n0 

像运算符: like  % 多个字符   _ 一个字符

3.5.3修改数据表数据

update user set user_name = '沸羊羊' where user_name = 'giao弟';  # 修改user表中某数据
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0


select * from user;  # 查询数据查看是否修改成功
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  1 | 鸽鸽      |   123456 |
|  2 | 宇将军    |   123456 |
|  3 | 沸羊羊    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
4 rows in set (0.01 sec)

修改数据要加条件, 不加条件会修改指定列每行内容。

3.5.4删除数据表数据

delete from user where user_name = '鸽鸽';  # 删除user表中 user_name = '鸽鸽 的整行数据
Query OK, 1 row affected (0.03 sec)


select * from user;  # 查询数据查看是否删除成功
+----+-----------+----------+
| id | user_name | password |
+----+-----------+----------+
|  2 | 宇将军    |   123456 |
|  3 | 沸羊羊    |   123456 |
|  4 | 荒天帝    |   123456 |
+----+-----------+----------+
3 rows in set (0.00 sec)

增删改查数据要操作正确规范,可以先备份,以免出错。

3.6用户操作

3.6.1创建用户 

create user 'user'@'%' indentified by '123456';  # 创建一个名为 user ,密码是 123456 的用户,加 % 代表所有ip都可以访问。

3.6.2分配权限 

grant 权限列举 to '用户名' @ '%' on 数据库名, 数据表名

flush privieleges 刷新权限 

grant all to 'user' @ '%' on *.*;  # 所有权限分配给用户user的所有数据库的所有表

3.6.3删除用户

drop user 'user' @ '%';  # 删除用户user

3.6.4修改密码

alter user 'user' @ '%' indentified by '1234567';  # 修改用户user的密码为‘1234567’

 3.7外键关联表

 关系型数据库表与表之间存在关联关系,可以通过外键实现。外键就是一个表中的某一列是另外一个表的主键。

constraint fk_user froeign key(user_id) references user(id) on update cascade on delete cascade 
#  创建添加外键关联列表。

fk_user 是外键名。用于之后的删除修改, user_id 是关联列 ,user(id) 是另一个表user的关联列id,  on update/delete cascade 表明之后外键发生改变或删除,关联表同步变化。

3.8函数 

select database();  查看当前数据库
select  user();  查看当前用户
select version();  查看版本
select now();  现在时间
select curdate();  当前日期
select curtime();  当前时间
select unix_timestamp()  时间戳 

4 .使用Python操作MySQL

4.1下载模块

 在pycharm终端执行 pip install pymysql

4.2导入模块

import pymysql

4.3构建连接

con = pymysql.connect(user="admin", password="123456")
con.select_db("user")

4.4构建游标

# 建立游标
cur = con.cursor()
row = cur.execute("show tables")

通过游标执行SQL:

row = cur.execute("show tables")

# 访问表
datas = cur.fetchall()
for data in datas:
    print(data[0])
# 控制游标位置
# mode="absolute" 绝对位置  移动到数值
# mode="relative" 正值向右 负值向左 移动数值
cur.scroll(0, mode="absolute")
data = cur.fetchone()
print(data)

4.4断开连接

# 关闭游标
cur.close()
# 关闭连接
con.close()

 这只是一个基础的框架,具体内容操作可以根据所需进行。

5.拓展知识 

5.1备份与恢复

5.1.1备份

在可视化工具中(小编用的是Navicat Premium 15)选中数据库,转储SQL文件,SQL文件内部包含表与数据的创建过程。

5.1.2恢复

在可视化工具中(小编用的是Navicat Premium 15)选中连接,新建数据库

打开数据库,运行SQL文件

选中SQL文件,开始恢复,就完成了数据备份的恢复。

5.2视图

视图是一张虚拟的表,不占用内存,数据都来源都真实的数据表,修改视图中的数据,真实数据表中的数据也会更改。

5.3函数以及储存过程 

函数分系统级别函数, select user()  select version()    数据库级别函数, 经过运算返回数据

储存过程就是一个复杂的函数,一般不返回内容,用于执行sql。

	# 注册n个用户

	

	# 声明一个变量i 他的类型为int 他的初始值为1

	DECLARE i INT DEFAULT 1;

	

	# 使用循环 创建n个账户

	WHILE i <= n DO

		INSERT INTO `user` VALUES (0, CONCAT('name',i), '123456');

		SET i = i + 1;		

	END WHILE;

都是储存在数据库服务器上的,预编辑过的,执行效率非常高。

5.4索引 

索引是为了提升查询效率。索引类型:
主键索引
唯一索引
普通索引
索引不是越多越好,因为维护索引需要额外的开销,更新有索引的列时索引会同步更新。所以数据修改概率比较小的适合建索引,如果修改概率非常高,不适合建立索引 

5.5事务

事务有四大特性ACIP
原子性:事务不可在分割,要么全部执行要不全部放弃
 一致性:事务执行前后都要保持数据一致性
 隔离性:多个事务相互不干扰
持续性:事务一旦提交永久更改
关键字有:
begin:开启事务
rollback:回滚事务 (出现异常时)
commit:提交事务
隔离级别用于处理高并发情况
级别有:
读未提交: 效率最高,容易脏数据
读已提交:可重复读
串行化:效率最低,数据最安全 

数据库是一个很庞大的学科,搞懂很难,不是必要,能够简单使用就可以,希望小编的总结对大侠有亿点帮助。

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

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

相关文章

什么是树的先/中/后序遍历

前言 很久没有写c教程&#xff08;有几个月&#xff09;了&#xff0c;今天来讲讲树 为什么之前不讲树因为我不会但我现在能写出一些树的选择题了 首先我们画一棵树&#xff1a; 有些潦草 遍历是什么 我们要研究先/中/后序遍历&#xff0c;我们应该先知道什么叫遍历 遍历…

论文精要:《对静态分析缺陷报告进行聚类,以降低维护成本》

1. 前言 周末找到一篇《对静态分析缺陷报告进行聚类&#xff0c;以降低维护成本》&#xff0c;读了之后受到不少启发&#xff0c;特此将笔记整理出来。 论文出处&#xff1a; Published in: 2013 20th Working Conference on Reverse Engineering (WCRE)Date of Conference:…

疫情期间高校人员管理

TOC springboot322疫情期间高校人员管理 绪论 1.1 选题背景 当人们发现随着生产规模的不断扩大&#xff0c;人为计算方面才是一个巨大的短板&#xff0c;所以发明了各种计算设备&#xff0c;从结绳记事&#xff0c;到算筹&#xff0c;以及算盘&#xff0c;到如今的计算机&a…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…

MySQL InnoDB中一个update语句从执行到提交的全过程(1)

目录 一、开启事务 二、sql解析、查询计划生成 三、查询要修改的数据 1、读buffer pool的过程 buffer pool的结构组成 1&#xff09;Free List (空闲链表) 2&#xff09;LRU List (最近最少使用链表) 3&#xff09;Flush List (刷新链表) 三条链表之间的关系 2、怎么…

[Linux][OS][信号的保存和处理]

目录 信号的处理 1. 在内核中的表示 2. 相关概念 3. 信号集操作函数 4.sigprocmask 5.sigpending 信号的捕捉 重谈地址空间 信号的处理 1. 在内核中的表示 普通信号&#xff0c;多次产生只会记录一次 信号范围 [1,31]&#xff0c;每一种信号都要有自己的一种处理方式…

Java Spring|day3.SpringBoot

Spring Boot 定义 从本质上来说&#xff0c;Spring Boot就是Spring&#xff0c;它做了那些没有它你自己也会去做的Spring Bean配置。Spring Boot使用“习惯优于配置”的理念让你的项目快速地运行起来&#xff0c;使用Spring Boot很容易创建一个能独立运行、准生产级别、基于S…

SpringBoot + Hadoop + HDFS + Vue 实现一个简单的文件管理系统

1. 安装前的准备工作 1.1 更新系统并安装必要的工具 在终端中运行以下命令&#xff1a; sudo apt-get update sudo apt-get install -y ssh rsync curl1.2 安装 Java 如果系统中没有安装 Java&#xff0c;可以通过以下命令安装 OpenJDK&#xff1a; sudo apt-get install …

软件安全测试的必要性,第三方软件测试机构进行安全测试好处简析

在当前信息技术迅猛发展的时代&#xff0c;软件的安全性显得尤为重要。随着越来越多的企业依赖软件进行日常运营&#xff0c;软件漏洞和安全隐患所带来的风险也逐渐上升。因此&#xff0c;软件安全测试不再是可有可无的选择&#xff0c;而是每个企业必须考虑的关键环节。 一、…

Node之npm常用命令与package.json文件

新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;&#xff08;Web前端技术丛书&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) npm常用命令 npm默认与Node.js一起安装&#xff0c;可以在命令行中输入…

达梦数据库系列—49.审计功能

目录 1、打开审计 2、审计级别 系统级审计 语句级审计 对象级审计 3、审计文件管理 删除审计文件 查看审计信息 4、审计分析 审计分析工具Analyzer 审计分析工具dmaudtool 1、打开审计 0&#xff1a;关闭审计1&#xff1a;打开普通审计2&#xff1a;打开普通审计和…

qt 5.15.2 使用pdf

1. 安装Qt 5.15.2 选择对应编译器和源码&#xff1a; 安装后已有pdf对应的库和源码&#xff1a; 将QtPdf和QtPdfWidgets目录拷贝到msvc2019_64/include(根据需要用到的编译器而定) 将C:\Qt\5.15.2\Src\qtwebengine\src\pdf\api所有文件拷贝到C:\Qt\5.15.2\msvc2019_64\include\…

低功耗蓝牙协议栈如何学习?

目录 1. 基础知识 1.1 了解BLE基本概念 1.2 阅读BLE规范 2. 实践和开发工具 2.1 使用开发板 2.2 安装开发环境 3. 学习资源 3.1 官方文档和示例 3.2 在线课程和教程 4. 实践项目 4.1 简单项目 4.2 复杂项目 5. 深入理解协议栈 5.1 分析协议栈 5.2 调试和分析 6…

v-charts的下载与引用

近期&#xff0c;因项目需要&#xff0c;需用v-charts做一些登录后首页的展示图&#xff0c;按之前的逻辑echarts官网都有API直接拿来用就行了&#xff0c;但是我的项目框架是vuespringboot&#xff0c;我的vue版本是2.6.1&#xff0c;这个v-charts文档在网上搜了搜&#xff0c…

nginx服务部署及其平滑升级

概述 1. 7层负载均衡&#xff08;nginx&#xff09; 1. 停掉4层的环境 systemctl disable --now keepalived.service # 停用之前的4层协议方式2. 源码安装nginx tar zxf nginx-1.22.1.tar.gz 具体方式是源码编译“三部曲” ./configure # 负责检查环境&#xff0c;生成指导…

每日OJ_牛客_星际密码(矩阵+斐波那契)

目录 牛客_星际密码&#xff08;矩阵斐波那契&#xff09; 解析代码 牛客_星际密码&#xff08;矩阵斐波那契&#xff09; 星际密码__牛客网 解析代码 这个题目首先需要明确矩阵是固定的&#xff0c;其次是矩阵相乘的方法。解题思路&#xff1a;初始化斐波那契数列&#xff…

leetcode刷题-二叉树05

代码随想录二叉树part05|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 654.最大二叉树一遍过&#xff0c;不过貌似有多种解法&#xff0c;后序再补充 617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树看其他解题方法 654.最大二叉树 代码…

RCE的另外一些绕过练习

目录 被过滤了flag怎么办 方法 结果 过滤了flag、php、system 方法一 结果 ​编辑 方法二 过滤了很多但是主要的就是过滤了空格 和 注意一下这个就行 方法一 方法二 相对于上面一道题来说多过滤了一个括号 方法一 被过滤了flag怎么办 <?php error_reportin…

29岁才转行软件测试,目前31了,我的一些经历跟感受

按惯例&#xff0c;先说下我基本情况。我是90年的&#xff0c;算是最早的90后&#xff0c;现在跟你介绍的时候还恬不知耻的说我是90后&#xff0c;哈哈&#xff0c;计算机专业普通本科毕业。在一个二线城市&#xff0c;毕业后因为自身能力问题、认知水平问题&#xff0c;再加上…

Cesium倾斜相机视角观察物体

先看效果&#xff1a; 在cesium中&#xff0c;我们有时需要倾斜相机视角去观察物体&#xff0c;如相机俯视45观察物体。 cesium的api提供了倾斜相机视角的配置&#xff0c;但是直接使用cesium的api不能达到我们想要的效果。 函数如下&#xff1a; function flyToBox() {let l…