【MySQL】SQL介绍+基础+DDL+数据备份+还原

目录

一、DDL建库建表

1. 数据库

2. 内部4特征

3. 外部4特征

4. 数据库结构

5. SQL语句分类(重点)

6. 注意

7. 数据库表的字段类型

8. 存储引擎

9. 数据库表的操作

二、三范式

1. 什么是范式

2. 约束作用

3. 三范式

4. 第一范式(1NF)确保每列保持原子性

5. 第二范式(2NF)属性完全依赖于主键

6. 第三范式(3NF)属性不依赖于其它非主属性 属性直接依赖于主键

三、表约束

1. 什么是约束

2. 约束作用

3. 约束种类

6.1 主键约束与“not null unique”区别

6.2 一般主键的建立方式

7. 外键约束

8. 约束的添加

9. 约束的删除

四、数据备份与还原

1. 使用工具

2. 控制台


一、DDL建库建表

1. 数据库

        概念:长期存放在计算机内,有组织、可共享的大量数据的集合,是一个 数据“仓库”。

        (1)作用:存放、管理数据

        (2)分类:关系型数据库、NoSQL数据库

                关系型数据库: MySQL、orcale、postgreSQl

                NoSQL数据库(非关系型数据库): redis、mongoDB

        (3)MySQL特点

                操作便捷

                小巧,功能齐全

                免费、开源的数据库

                可运行于windows或linux系统

2. 内部4特征

(1)数据的保存

(2)数据的完整性

(3)数据的读取

(4)数据的安全性

3. 外部4特征

(1)结构化

(2)共享性

(3)独立性

(4)安全性

4. 数据库结构

(1)数据库(Database)

        以文件的形式存放在磁盘上,即对应于一个或多个物理文件。

(2)数据表(Table)

        简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。

(3)字段(Field)

        也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息。

(4)记录(Record)

        表中的每一行称为一个记录,它由若干个字段组成。实体

(5)索引(Index)

        索引实际上是一种特殊类型的表,其中含有关键字段的值和指向实际记录位置的指针,可以提高访问数据库的效率。

(6)SQL语句

        结构化查询语句命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。

5. SQL语句分类(重点)

(1)DDL(数据定义语言)   CREATE、DROP、ALTER

(2)DML(数据操作语言)   INSERT、UPDATE、DELETE

(3)DQL(数据查询语言)   SELECT

(4)DCL(数据控制语言)   GRANT、COMMIT、ROLLBACK

6. 注意

  1. # 注释
  2. -- 注释
  3. /*

                多行注释

        */

(1)sql不区分大小写

(2)_(下划线)进行名字的分割,不适用驼峰命名法

(3);语句sql结尾处写一个;来表示结束

(4)一般关键词建议用大写

(5)所有名称不允许使用中文

7. 数据库表的字段类型

(1)字符串类型

char和varchar区别(重点)

        都是字符串

  char(字符串长度)     固定长度字符串

  varchar(字符串长度)   可变长度字符串

  char(5)   'abcdef' 存不下      'abc  '不够补空格  可能浪费空间

  varchar(5)    'abcdef'   存不下       'abc'

  deimal(m,d)  m总长度   n小数位数

例:0-100,小数1位    deimal(4,1)  100三位+小数1位

(2)数值类型

(3)日期和事件类型

        null是一种类型,本身没值,表示空无一物

8. 存储引擎

        查看当前数据库支持的存储引擎:show engines;

(1)数据库存储引擎-InnoDB

        InnoDB是MysQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)

        除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。

        除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

        数据文件结构:

                • 表名.frm存储表结构(MySQL8.0时,合并在表名.ibd中)。

                • 表名.ibd存储数据和索引

        InnoDB是为处理巨大数据量的最大性能设计。

        对比MylISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。

        MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。

(2)数据库存储引擎-MyISAM

        MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。

        优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用,MyISAM查询快,对增删改不友好

        针对数据统计有额外的常数存储。故而count(*)的查询效率很高

        数据文件结构:

                • 表名.frm存储表结构。

                • 表名.MYD存储数据(MYData)。

                • 表名.MYI存储索引 (MYIndex)

        应用场景:只读应用或者以读为主的业务

(3)数据库存储引擎-MyISAM 和InnoDB区别(重点)

9. 数据库表的操作

(1)创建表

        create table 表名(

                字段名 类型 属性,

                字段名 类型 属性,

                ...

                字段名 类型 属性

        );

(2)查看表结构

        方式一:desc 表名

        方式二:show create table 表名;

        `反引号 -- 取消关键性

        DEFAULT NULL 该字段的值可以为空

        DEFAULT CHARSET=utf8mb4      字符集

        COLLATE-utf8mb4_0900_ai_ci   字符排序

        ENGINE=InnoDB  非常重要  存储引擎  规则(InnoDB)

(3)表结构修改

        alter table 表名 关键词 数据;

        关键词:rename as、add、drop、modify、change。

        修改表名alter table 旧表名 rename as 新表名;

        添加字段(重点):alter table 表名 add 新字段名 类型 属性;

                alter table xuesheng add stu_qq varchar(20) comment '这是学生的qq号';

        comment相当于备注

(4)删除字段(危险操作)

        alter table 表名 drop 字段名;

(5)修改字段

        覆盖式

  • 一定的默认值
  • 如果有已经存在具体数据,数据是可以做隐式转换

方式一:modify 只能修改数据类型属性

        alter table 表名 modify 字段名 要修改的类型 要修改的属性;

方式二:change

        alter table 表名 change 旧字段名 新字段名 要修改类型 要修改属性

(6)删除表(危险操作)

        drop table [if exists] 表名

二、三范式

1. 什么是范式

        为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。

        在关系型数据库中这种规则就叫做范式。

2. 约束作用

        数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

3. 三范式

        第一范式:确保每列保持原子性

        第二范式:确保表中的每列都和主键相关

        第三范式:确保每列都和主键列直接相关,而不是间接相关

        第一范式 (拆字段):原子性(不可再分),拆到不可再拆为止,减少冗余和歧义

        第二范式(拆表):在第一范式基础上建立 ,数据库表中的每个实例或行必须可以被惟一地区分,主键(标识数据),属性完全依赖于主键。

        第三范式(拆表):每个属性都跟主键有直接关系而不是间接关系。

4. 第一范式(1NF)确保每列保持原子性

(1)每一列属性都是不可再分的属性值,确保每一列的原子性。

(2)两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。

5. 第二范式(2NF)属性完全依赖于主键

(1)第二范式(2NF)是在第一范式(1NF)的基础上建立起来的。即满足第二范式必须先满足第一范式。

(2)第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键。

6. 第三范式(3NF)属性不依赖于其它非主属性 属性直接依赖于主键

        数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。

        像:a-->b-->c 属性之间含有这样的关系,是不符合第三范式的。

        比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)这样的表结构,我们应该拆开来,如下。

        (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

        总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

三、表约束

1. 什么是约束

        约束实际上就是表中数据的限制条件。

2. 约束作用

        表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效。

3. 约束种类

  • 非空约束(not null)
  • 唯一性约束(unique)
  • 主键约束(primary key) PK
  • 外键约束(foreign key) FK
  • 检查约束(目前MySQL不支持、Oracle支持)

4.非空约束

        用not null约束的字段不能为null值,必须给定具体的数据

        create table tb2(

        username varchar(10) not null, -- 非空约束

        userage int

        );

        create table tb3(

           username varchar(10) not null default '无名', -- 非空约束

           userage int

        );

5. 唯一约束

        是可以为null,并且可以有多个null,因为null是一个类型。

create table tb4(

   username varchar(10) unique, -- 唯一约束,行级约束,只约束一个字段

   userage int unique           -- 每个字段都是各自的唯一约束

);

create table tb5(

   username varchar(10),

   userage int,      

   unique(username,userage)   -- 表级约束 / 联合唯一约束  

                             -- 字段是有关联的,必须每个字段的值都相同才会触发唯一约束(两条记录username,userage完全一样时,数据无法存取)

);

6. 主键约束

        主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。

  • 每张表必须有且只有一个主键
  • 主键的只是唯一的
  • 主键是不能为null
  • 用来做标识
  • 一张表应该有主键字段,如果没有,表示该表无效
6.1 主键约束与“not null unique”区别

(1)作为Primary Key的域/域组不能为null,而Unique Key可以。

(2)在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的,具体到某一列可能会重复。

(3)更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。

create table tb7(

   username varchar(10) primary key,

   userage int primary key    -- 错误

);

create table tb8(

   username varchar(10),

   userage int,

   primary key(username,userage)  -- 联合主键 / 联合约束

                                  -- 多个字段完全相同时,才会触发

);

6.2 一般主键的建立方式
  • int bitint 自增
  • 主键的值不会回补

create table tb9(

   tid int primary key auto_increment,  -- 自增

   username varchar(10),

   userage int

);

7. 外键约束

        外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

        若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键 。A为基本表或父表,主表,B为信息表,子表,副表

        只能是表级定义。

        foreign key(表的字段名) references 父表表名(父表的字段名)

按外键约束的字段数量分类:

        单一外键:给一个字段添加外键约束

        复合外键:给多个字段联合添加一个外键约束

  • 外键的值可以重复
  • 外键的值可以为null
  • 外键必须要写父表中有的数据
  • 父表中的关联字段必须是一个具有唯一性的数据
  • 父表的字段名和从表的字段名不一定要相同,但是数据类型必须一致
  • 一个表中可以有多个外键,也可以有多个外键约束,但是只能有一个主键
  • 外键约束和外键关系 不一样, 关系没有形成约束
  • 先添加父表数据,再添加子表数据
  • 先删子表数据,再删父表数据
  • 使用外键关系,不去建立外键约束

create table a(

   aid int primary key auto_increment,

   aname varchar(10)

);

create table b(

   bid int primary key auto_increment,

   bname varchar(10),

   aid int,

   foreign key(aid) references a(aid)

);

8. 约束的添加

        添加非空约束

                alter table 表名 modify test_student char(10) not null;

        添加唯一约束

                alter table 表名 add unique(表字段名,字段,字段,字段);

        添加主键约束

                alter table 表名 add primary key(表的字段名,字段,字段);

        添加外键约束

                alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);

9. 约束的删除

        删除not null约束

                alter table 表名 modify 列名 类型;

        删除unique约束

                alter table 表名 drop index 唯一约束名;

        删除primary key约束

                alter table 表名 drop primary key;

        删除foreign key约束

                alter table 表名 drop foreign key 外键名;

四、数据备份与还原

1. 使用工具

2. 控制台

        在F:\MySQL\MySQL Server 5.7\bin        -- cmd中(终端)

(1)数据备份

        mysqldump.exe -h localhost -P 3306 -u root -p xiaozhao2 > F:/Task/myschool.sql

        passward

        -h 服务器     -P端口号

        > 尖尖对应目标

        < 开口对应数据

(2)数据还原

        导入linux中数据库

        阿里云mysql先建库

        mysql.exe -h 121.41.85.102 -P 3306 -u root -p haha < F:/Task/myschool.sql       

        passward

        121.41.85.102为shell 主机ip

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

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

相关文章

《Linux从小白到高手》理论篇:深入理解Linux的计划任务/定时任务

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。本篇详细深入介绍Linux的计划任务/定时计划。 Linux的计划任务 在很多时候为了自动化管理系统&#xff0c;我们都会用到计划任务&#xff0c;比如关机&#xff0c;重启&#xff0c;备份之类…

SpringBoot平台:古典舞爱好者的在线聚集地

第三章 系统分析 3.1 可行性分析 需要使用大部分精力开发的古典舞在线交流平台为了充分降低开发风险&#xff0c;特意在开发之前进行可行性分析这个验证系统开发是否可行的步骤。本文就会从技术角度&#xff0c;经济角度&#xff0c;还有操作角度等进行综合阐述。 3.1.1技术可行…

OpenFeign微服务部署

一.开启nacos 和redis 1.查看nacos和redis是否启动 docker ps2.查看是否安装nacos和redis docker ps -a3.启动nacos和redis docker start nacos docker start redis-6379 docker ps 二.使用SpringSession共享例子 这里的两个例子在我的一个博客有创建过程&#xff0c…

netty之Netty与SpringBoot整合

前言 在实际的开发中&#xff0c;我们需要对netty服务进行更多的操作&#xff0c;包括&#xff1b;获取它的状态信息、启动/停止、对客户端用户强制下线等等&#xff0c;为此我们需要把netty服务加入到web系统中。 MyChannelInitializer public class MyChannelInitializer ex…

【Android 源码分析】Activity生命周期之onDestroy

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

python爬虫 - 初识爬虫

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、爬虫的关键概念 &#xff08;一&#xff09;HTTP请求与响应 &#xff0…

Discord:报错:A fatal Javascript error occured(解决办法)

按 Windows 键 R 并输入 %appdata% 选择 discord 文件夹并将其删除。 再次按 Windows 键 R 并输入 %LocalAppData% 选择 discord 文件夹并再次将其删除。 附加&#xff1a; 如果还不行&#xff0c;就通过官网下载吧&#xff0c;这个问题通过epic下载可能会有

TypeScript 第三部分 扩展

1. 声明文件 主要作用&#xff1a; 类型声明&#xff1a;为库或模块提供类型信息。全局声明&#xff1a;为全局作用域中的类型和变量提供声明。类型兼容性&#xff1a;确保第三方库或自定义代码的类型正确性。代码提示与检查&#xff1a;在开发环境中提供更好的代码提示和类型…

关于深度学习torch的环境配置问题

已经下好了torch在虚拟环境中&#xff0c;结果在ipynb文件中无法运行 后来在终端直接用python语句编译 发现没有问题 在编辑测试py文件 发现runcode有问题 原来是插件默认base环境 具体操作参考VS Code插件Code Runner使用python虚拟环境_coderunner怎么在虚拟环境中使用-CSD…

11. 异步编程

计算机的核心部分&#xff0c;即执行构成我们程序的各个步骤的部分&#xff0c;称为处理器。我们迄今为止看到的程序都会让处理器忙个不停&#xff0c;直到它们完成工作。像操作数字的循环这样的程序的执行速度几乎完全取决于计算机处理器和内存的速度。但是&#xff0c;许多程…

微服务nginx解析部署使用全流程

目录 1、nginx介绍 1、简介 2、反向代理 3、负载均衡 2、安装nginx 1、下载nginx 2、解压nginx安装包 3、安装nginx​编辑 1、执行configure命令 2、执行make命令 4、启动nginx 1、查找nginx位置并启动 2、常用命令 3、反向代理 1、介绍反向代理配置 1、基础配置…

Windows上面搭建Flutter Android运行环境

Windows 上面搭建 Flutter Android 运 行环境&#xff08;适用于 Flutter3.7.3之后的版本&#xff09;。 提示&#xff1a; Flutter3.7.x 之前的版本配置请参考教程&#xff0c;或者参考文档《 Flutter Android 开发环境搭建&#xff0c;适用于 Flutter3.3.10之前的版本》。 …

MySQL-SQL(DDL、DML、DQL、DCL)

一、 MySQL启动&#xff1a; MySQL客户端连接&#xff1a; 二、SQL &#xff11;.SQL通用语法 (1) SQL语句可以单行或多行书写&#xff0c;以分号结尾。 (2) SQL语句可以使用空格/缩进来增强语句的可读性。 (3) MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使…

宣城自闭症咨询寄宿学校:为家庭提供专业支持

宣城与广州的自闭症教育探索&#xff1a;星贝育园为家庭提供专业支持 在自闭症儿童教育的广阔领域中&#xff0c;寄宿学校作为一种特殊而重要的教育模式&#xff0c;正逐渐展现出其独特的价值和意义。虽然本文标题提及了宣城的自闭症咨询寄宿学校&#xff0c;但我们的焦点将转…

UE4_Niagara基础实例—4、静态网格体表面生成粒子

效果图&#xff1a; 分析&#xff1a;在物体面上生成粒子&#xff0c;改变粒子的不透明度&#xff0c;让粒子收到力&#xff0c;并添加紊乱&#xff0c;类似于水蒸气。 操作步骤&#xff1a; 1、创建个niagara 系统&#xff0c;使用模版 simple sprite burst。简单调节参数。…

【算法】链表:160.相交链表(easy)+双指针

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法&#xff08;双指针&#xff09; 返回结果 算法正确性 时间复杂度 4、代码 1、题目链接 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 ​ 3、解法&#xff08;…

[C#]C# winform部署yolov11目标检测的onnx模型

yolov11官方框架&#xff1a;https://github.com/ultralytics/ultralytics 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.2 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel;…

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能&#xff1f; (baidu.com) 1 联接手机…

Pikachu-File Inclusion-远程文件包含

远程文件包含漏洞 是指能够包含远程服务器上的文件并执行。由于远程服务器的文件是我们可控的&#xff0c;因此漏洞一旦存在&#xff0c;危害性会很大。但远程文件包含漏洞的利用条件较为苛刻&#xff1b;因此&#xff0c;在web应用系统的功能设计上尽量不要让前端用户直接传变…

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示&#xff1b; 2、不管是正确的输入&#xff0c;还是错误的输入&#xff0c;都只显示两种情况&#xff0c;true or false&#xff1b; 3、在正确的输入下&#xff0c;输入and 1 1/and 1 2发现可以判断&#xff1b; 布尔盲注常用函数&…