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

news2024/11/28 0:56:21

目录

一、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.coloradmin.cn/o/2186915.html

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

相关文章

Python从入门到高手4.2节-掌握循环控制语句

目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋&#xff0c;指事物周而复始地运动或变…

Sharp.js:简单而又实用的图像处理库

前言 在现代Web开发中&#xff0c;图像处理是一个不可或缺的部分。 前端开发者经常需要处理图像&#xff0c;以确保它们在不同的设备和分辨率上都能保持良好的显示效果。 sharp.js是一个高性能的Node.js模块&#xff0c;它利用了libvips库&#xff0c;提供了快速且高效的图像…

网安学习(js漏洞挖掘)

内容来自bili白帽大法师白帽大法师的个人空间-白帽大法师个人主页-哔哩哔哩视频 (bilibili.com) 四种方式 目录 1、JS中存在插件名字&#xff0c;根据插件找到相应的漏洞直接利用 2、JS中存在一些URL链接&#xff0c;根据URL链接找到相应的页面进一步测试和利用 3、JS中存…

《软件工程概论》作业一:新冠疫情下软件产品设计

课程说明&#xff1a;《软件工程概论》为浙江科技学院2018级软件工程专业在大二下学期开设的必修课。课程使用《软件工程导论&#xff08;第6版&#xff09;》&#xff08;张海藩等编著&#xff0c;清华大学出版社&#xff09;作为教材。以《软件设计文档国家标准GBT8567-2006》…

Python案例--水仙花数的探索之旅

一、引言 水仙花数&#xff0c;也称为阿姆斯特朗数&#xff0c;是一种特殊的三位数&#xff0c;其各位数字的立方和等于其本身。例如&#xff0c;153就是一个水仙花数&#xff0c;因为 135333153135333153。这种数字的发现不仅展示了数字的内在美&#xff0c;也激发了人们对数…

STM32编码器接口解析及抗噪声措施探讨

1. 引言 在现代控制系统中&#xff0c;编码器扮演着非常重要的角色。它就像一个精密的测量工具&#xff0c;可以告诉我们机械部件的位置和运动状态。在STM32微控制器中&#xff0c;编码器接口可以轻松地与各种编码器连接&#xff0c;实现精确的控制。我将在这里探讨STM32编码器…

unity 默认渲染管线材质球的材质通道,材质球的材质通道

标准渲染管线——材质球的材质通道 文档&#xff0c;与内容无关&#xff0c;是介绍材质球的属性的。 https://docs.unity3d.com/2022.1/Documentation/Manual/StandardShaderMaterialParameters.html游戏资源中常见的贴图类型 https://zhuanlan.zhihu.com/p/260973533 十大贴图…

flutter_鸿蒙next(win)环境搭建

第一步 拉取鸿蒙版本flutterSDK仓库 仓库地址&#xff1a;OpenHarmony-SIG/flutter_flutter 第二步 找到拉取的仓库中的README.md 并根据说明配置环境 第三步 配置好环境变量之后 用管理员开启cmd 输入&#xff1a;flutter dcotor 并查看此时flutter所支持的系统 包括&…

Cpp::STL—string类的模拟实现(12)

文章目录 前言一、string类各函数接口总览二、默认构造函数string(const char* str "");string(const string& str);传统拷贝写法现代拷贝写法 string& operator(const string& str);传统赋值构造现代赋值构造 ~string(); 三、迭代器相关函数begin &…

leetcode打卡001-约瑟夫问题

约瑟夫问题 其背景故事是关于一组人站成一个圈&#xff0c;从某个人开始报数&#xff0c;每数到特定数字的人将被淘汰出圈&#xff0c;然后从被淘汰人的下一个人重新开始报数&#xff0c;直到最后剩下一个人。问题的目标是确定最后剩下的那个人在最初的位置。 关键词 递归&a…

HCIP-HarmonyOS Application Developer 习题(四)

1、以下哪个Harmonyos的AI能力可以提供文档翻拍过程中的辅助增强功能? A.文档检测矫正 B.通用文字识别 C.分词 D.图像超分辨率 答案&#xff1a;A 分析&#xff1a;文档校正提供了文档翻拍过程的辅助增强功能&#xff0c;包含两个子功能&#xff1a; 文档检测&#xff1a;能够…

基于单片机人体反应速度测试仪系统

** 文章目录 前言概要设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…

kubernetes基础操作(pod生命周期)

pod生命周期 一、Pod生命周期 我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期&#xff0c;它主要包含下面的过程&#xff1a; ◎pod创建过程 ◎运行初始化容器&#xff08;init container&#xff09;过程 ◎运行主容器&#xff08;main container&#xff…

【Redis入门到精通九】Redis中的主从复制

目录 主从复制 1.配置主从复制 2.主从复制中的拓扑结构 3.主从复制原理 4.主从复制总结 主从复制 在分布式系统中为了解决单点问题&#xff0c;通常会把数据复制多个副本部署到其他服务器&#xff0c;满⾜故障恢复和负载均衡等需求。Redis 也是如此&#xff0c;它为我们提…

kafka基本概念以及用法

kafka基本概念以及用法目录 文章目录 kafka基本概念以及用法目录一、什么是kafka&#xff1f;二、为什么要使用kafka?三、kafka的基本概念四、安装kafka(windows版本)五、命令行控制kafka生产消费数据&#xff0c;创建 删除topic六、java操作kafka消费生产 提示&#xff1a;以…

Ubuntu操作系统版本服务支持时间(更新到24.04)

文章参考链接 以下是解释&#xff1a; 开发代号&#xff1a;Ubuntu的每个版本都有一个开发代号&#xff0c;例如“Mantic Minotaur”。 版本命名&#xff1a;Ubuntu的版本号是根据发布年份和月份来命名的。例如&#xff0c;Ubuntu 23.10是在2023年10月发布的。 LTS版本&…

Windows 11 24H2正式发布

微软最近正式发布了Windows 11 24H2&#xff0c;这是Windows 11的最新功能更新&#xff0c;带来了多项新特性和改进。 主要新功能&#xff1a; 人工智能增强&#xff1a;此次更新特别强调AI能力&#xff0c;推出了如Windows Copilot的增强版本。Copilot的界面得到了改善&#…

【微服务】注册中心 - Eureka(day3)

CAP理论 P是分区容错性。简单来说&#xff0c;分区容错性表示分布式服务中一个节点挂掉了&#xff0c;并不影响其他节点对外提供服务。也就是一台服务器出错了&#xff0c;仍然可以对外进行响应&#xff0c;不会因为某一台服务器出错而导致所有的请求都无法响应。综上所述&…

关于Mybatis框架操作时注意的细节,常见的错误!(博主亲生体会的细节!)

目录 1.在对DB进行CRUD时&#xff0c;除了查&#xff0c;其余的操作都要进行事务的提交否则不成功。 2.用sqlSession原生方法时&#xff0c;第一个参数方法名&#xff0c;是xml文件中定义的id名&#xff0c;底层找的是你这个接口所定义的方法名。 3.以包为单位引入映射文件 …

第三节-类与对象(2)默认成员函数详解

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类&#xff08;空类大小为1&#xff09;。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;…