001+limou+MySQL的基础命令

news2024/12/23 9:34:10

0.前言

您好,这里是limou3434的一篇个人博文,感兴趣的话您也可以看看我的其他文章。本博文是借鉴于李小威前辈所著的书籍《SQL 基础教程》所成的博文笔记,这本书真的很适合新手学习数据库相关的内容。本次我想给您带来的是关于MySQL的一些基础知识和基本操作,比如:“何为数据库、何为字段、何为主键?怎么创建数据库/数据表/字段?”此类的问题。而关于如何下载和配置MySQL服务和环境,待我之后再出一篇博文给您端上罢。

1.数据库基础

数据库由一批数据构成的有序的集合,这些数据被存储在结构化的数据表里,数据表之间相互关联,反映了客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。

1.1.普通数据库

1.1.1.数据库概念

数据库(DataBase,DB)这个概念有两方面的理解:

  • 是保存数据的仓库:数据库是一个长期存储在计算机内、有组织、有共享、统一管理的数据集合。
  • 是数据管理的方法和技术:数据库是一个按数据结构来存储和管理数据的计算机软件系统。

1.1.2.数据库发展

人工管理阶段->文件系统阶段->数据库系统阶段->高级数据库阶段

1.1.3.数据库种类

不同种类的数据库需要按照不同的数据结构来联系和组织,数据库主要分为

  • 层次式数据库
  • 网络式数据库
  • 关系式数据库(本次的学习重点)

1.1.4.数据库特点

  • 实现数据共享
  • 减少数据冗余
  • 采用特定的数据类型
  • 具有较高的数据独立性
  • 具有统一的数据控制功能

1.2.关系数据库(本次学习重点)

1.2.1.关系数据库的重要特征:具有坚实的数学理论基础

  • 包括“关系数据库设计的理论基础/数据依赖与规范化理论”
  • 包括“数据库查询的实现与优化理论”

1.2.2.关系系统是何?和非关系系统有什么区别

  • 关系数据库是基于关系系统的,关系系统有以下几个方面:
    • 结构化方面,数据库中的数据对于用户来说是数据表,也只能是数据表
    • 完整性方面,数据库中的额数据表需要满足一点的完整性约束
    • 操作方面,用户可以使用操作符来进行数据表操作
  • 关系系统与非关系系统区别
    • 关系系统的用户把数据看作数据表,而且只能是数据表
    • 非关系系统的用户则把数据看作其他数据结构,代替或拓展关系系统中的数据表结构

1.2.3.关系和属性的关系

  • 关系是关系系统的核心,是汇集在表数据中的行和列的集合
  • 每个关系由一个或者多个属性(列)组成,属性将类型相似的数据归纳在一起
  • 属性和关系直接相关,数据以元组(行)的形式存储在关系中,每个元组代表相关数据的一个记录

1.3.数据表

数据表实际上是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构,由行和列构成

  • 行叫做“记录”
  • 列叫做“字段”

1.4.数据类型

每一个字段都指定某类属性

  • 整数数据类型
  • 浮点数数据类型
  • 精确小数数据类型
  • 二进制数据类型
  • 日期/时间数据类型
  • 字符串数据类型

1.5.主键/主码

用于唯一标识表中的每一个记录,可以定义一列或多列为主键,主键列上不能有两行相同的值,这将抛出错误,因此有些列天生就不适合当主键

2.数据库技术构成

2.1.数据库系统

  • 有三个主要的组成部分
    • 数据库:用于存储数据的地方
    • 数据库管理系统:用于管理数据库的软件
    • 数据库应用程序:为了提高数据库系统的处理能力所使用的管理数据库的软件补充
  • 数据库系统图解
    在这里插入图片描述

2.2.SQL语言

  • 数据定义语言(DDL)
  • 数据操作语言(DML)
  • 数据查询语言(DQL)
  • 数据控制语言(DCL)

2.3.数据库访问接口

不同的程序设计语言会有各自不同的数据库访问接口,程序语言会通过这些接口执行SQL语句,进行数据库管理,而主要的数据库访问接口有以下四个:

  • ODBC
    Open Database Connectivity(开发数据库互连)技术为访问不同的SQL数据库提供了一个共同的接口
  • JDBC
    Java Data Base Connectivity(Java数据库连接)用于Java应用程序连接数据库的标准方法,是一种用于执行SQL语句的Java API
  • ADO.NET
    ADO.NET是微软在.NET框架下开发设计的一组用于数据源进行交互的面向对象类库
  • PDO
    PHP Data Object为PHP访问数据库定义了一个轻量级、一致性的接口
  • 其他语言
    MySQL也对其他语言提供了不同的数据库访问连接驱动,可以去其官网看看

3.数据库基本操作

3.1.查看

3.1.1.查看当前拥有的数据库

SHOW DATABASES;

3.1.2.查询当前数据库拥有的数据表

SHOW TABLES;

3.1.3.查询当前数据库支持的存储引擎

SHOW ENGINES;

在这里插入图片描述

3.2.创建

CREATE DATABASE 数据库名字;

创建数据库是在系统磁盘上划分一块区域,用于数据的存储和管理,如果管理员在设置权限的时候为用户创建了数据库,就可以直接使用,否则就需要自己创建数据库

3.3.删除

DROP DATABASE 数据库名字;

3.4.修改

RENAME DATABASE 旧数据库名 TO 新数据库名;

4.数据表基本操作

数据表是在数据库中创建的,数据表属于数据库,在使用数据表前,需要指明是哪一个数据库,使用以下语法

USE 已有的数据库名字; #然后显示database changed“数据库已更改”

4.1.查看

下指令可以查看数据表的字段

DESCRIBE 表名;//或者简写为DESC
 +--------+-------------+------+-----+---------+-------+ 
 | Field  | Type        | Null | Key | Default | Extra | 
 +--------+-------------+------+-----+---------+-------+
  • NULL表示该字段是否可以存储NULL值
  • Key表示该字段是否已编制索引
  • Default表示该字段是否有默认值,如果有则显示值
  • Extra表示可以获取与给点字段有关的附加信息

4.2.创建

mysql> CREATE TABLE 表名
    -> (
    ->  字段名1 数据类型 列级别约束条件 默认值,
    ->  字段名2 数据类型 列级别约束条件 默认值,
    ->  字段名3 数据类型 列级别约束条件 默认值,
    ->  字段名4 数据类型 列级别约束条件 默认值,
  	->	…
  	->  表级别约束条件 #这个之后讲
    -> );

4.3.删除

4.3.1.删除没有被关联的数据表

DROP TABLE 数据表名; #注意是永久删除数据表以及所有数据,且无法撤销该命令
DROP TABLE IF EXISTS 数据表名; #IF EXISTS的使用是可选的,可以帮助检查是否存在该数据表,避免尝试删除不存在的表并且导致出现错误

4.3.2.删除数据表的外键约束

ALTER TABLE 数据表名 DROP FOREIGE KEY 外键约束名

4.3.3.删除被其他表关联的主表

一般情况下,直接删除这个主表会出现错误,原因是:直接删除将会破坏表的参照完整性。因此要删除这个主表有两个办法:

  • 先删除从表,再删除主表
  • 先解除从表的外键约束,然后再删除主表

4.4.修改

4.4.1.修改数据表名字

这个仅仅是修改数据表名字,不改变数据表的结构,注意新数据表名要保证是唯一的

ALTER TABLE 旧表名 RENAME [TO] 新表名; #TO是可选的只是为了加强语法完整性。alter“修改”,rename“改变名字”

4.4.2.更改表的存储引擎

  • MySQL支持的存储引擎(前面有这个指令可以查看)
  • 更改表的存储结构
ALTER TABLE 表名 ENGINE=更改后的存储引擎名;

5.字段基本操作

5.1.创建(以及添加约束条件)

5.1.1.主键约束

5.1.1.1.单字段主键

  • 直接再列表中定义主键
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 PRIMARY KEY, 
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );
  • 列末尾指定主键
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型, 
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  ->  PRIMARY KEY(上面定义的某个字段名)
  -> );

mysql> 约束名 PRIMARY KEY 字段名
  • 定义完所有列后再指定主键
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型, 
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );
mysql> ALTER TABLE 数据表名 ADD PRIMARY KEY (某个字段名字); #注意要加上括号

5.1.1.2.多字段联合主键

mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型, 
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  ->  PRIMARY KEY(字段1, 字段2, 字段3, …)
  -> );

5.1.2.外键约束

  • 外键可以用来在两个表的数据之间建立连接,可以是一个字段或者多个字段
  • 一个表可以有一个或多个外键,外键对应的是引用完整性
  • 一个表的外键可以是空值,若不为空值,则每个外键值必须等于等于另外一个表中主键的某个值
  • 定义外键后不允许删除另外一个表中具有关联关系的行,外键的作用是保持数据的一致性、完整性
  • 对于两个具有关联关系的表,相关联字段中主键所在的那个表即主表(父表),外键所在的那个表即从表(子表)
  • 一个外键还拥有一个外键名
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 PRIMARY KEY,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );

mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  CONSTRAINT 外键约束名 FOREIGN KEY(外键名) REFERENCES 父表(字段名1), 
  ->  …  
  -> );

5.1.3.使用非空约束

值字段的值不能为空,对于设置了非空月约束的字段,如果用户在添加数据的时候没有指定值,那么数据库系统将会报错

mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 NOT NULL,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );

5.1.4.使用唯一性约束

要求该列唯一,并且允许为空,但是只能出现一个空值,唯一约束可以确保一列或者几列不出现重复值

  • 在定义列的时候指定唯一约束
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 UNIQUE,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );
  • 在列的末尾指定唯一约束
mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  ->  CONSTRAINT STH UNIQUE(上面定义的某个字段)
  -> );

5.1.5.使用默认约束

默认约束指定某列的默认值,在插入数据的时候即使没有为这个字段赋值,系统也会为这个字段赋默认值

mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 DEFAULT 要设置的默认值,
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );

5.1.6.设置表的属性值自动增加

一个表只能有一个字段使用AUTO_INCREMENT约束,并且该字段必须为主键的一部分,而且该字段可以是任何整数类型(TINYINT、SMALLINT、INT、BIGINT等)

mysql> CREATE TABLE 表名 
  -> ( 
  ->  字段名1 数据类型 PRIMARY KEY AUTO_INCREMENT, #这个属性值就会自动增加
  ->  字段名2 数据类型, 
  ->  字段名3 数据类型, 
  ->  字段名4 数据类型, 
  ->  …  
  -> );

5.2.添加

5.2.1.末尾添加字段

ALTER TABLE 表名 ADD 新字段名 数据类型 之前对单字段的约束语法; #最后一项必须有

5.2.2.第一列添加字段

ALTER TABLE 表名 ADD 新字段名 数据类型 之前对单字段的约束语法 FIRST; #最后一项可选

5.2.3.指定列添加字段

ALTER TABLE 表名 ADD 新字段名 数据类型 AFTER 数据表中已存在的数据段 #这个语句会在这个已存在的字段后面创建一个新的字段

5.3.删除

ALTER TABLE 表名 DROP 字段名; #一般在使用之前都会使用DESC指令查看要删除的字段

5.4.修改

5.4.1.修改字段名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型; #后面的新数据类型可以省略,这条指令可以替代上一条指令

5.4.2.修改字段数据类型(包含字段名)

ALTER TABLE 表名 MODIFY 字段名 数据类型; #alter“修改”,modify“修改”

5.4.3.修改字段排列顺序

  • 修改为表的第一个字段
ALTER TABLE 数据表 MODIFY 数据类型 FIRST; #数据类型必须加上
  • 修改为表的指定列之后
ALTER TABLE 数据表 MODIFY 数据段1 数据类型 AFTER 数据段2; #数据类型必须加上(数据段1将被排到数据段2后面)

6.一些重要的提醒

6.1.删除“数据库/数据表/字段”要尤为注意

删除数据库命令要十分谨慎,执行这条命令时,存储在其中的数据表也会一同执行,MySQL不会有任何的提醒,一旦删除将不能被恢复,同理数据表或者字段的删除也是一样的(在数据删除之前最好进行备份,避免造成无法挽回的后果)

6.2.数据表的主键不是必须的

并不是每一个数据表中都需要主键,一般只有在多个表进行连接操作的时候才需要用到主键,因此并不需要为每个表建立主键,甚至有些情况最好不使用主键

6.3.数据表不能随意选取存储引擎

外键约束不能跨引擎使用,如果多个数据表之间指定了不同的存储引擎,那么这些表是不能创建外键约束关联的,所以存储引擎的选择不是随意的

6.4.数据表的属性值自动增加默认从1开始

但是这个默认可以修改,在一开始插入记录时可以指定值

7.总结归纳

最后总结一下这篇博文的内容吧

  • 首先我总结了一些数据库的基础概念,尤其是关系数据库的概念,因为这是本系列(SQL系列)博文的重点,还归纳了一些关于数据技术的构成
  • 然后我针对“数据库、数据表、字段”的增删查改进行了整理,您可以跟着目录试一下这些基础的命令
  • 最后我还归纳了上述基础命令的一些提醒的要点

这就是本章博客的主要内容啦,望之后的SQL学习之路同君共勉

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

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

相关文章

网站神奇工具Viewport Resizer,支持手机、pad和电脑等不同尺寸大小

标题:Viewport Resizer:让网站适应不同设备的神奇工具! 导语: 在互联网世界中,我们常常需要在不同设备上浏览网站。为了让用户在手机、平板或电脑上都能看到美观易用的页面,网站开发者们努力优化网站的适应…

qemu-虚拟机

qemu 官网下载地址 https://www.qemu.org/ 跨平台虚拟机,类型vmware,执行效率比vmware高 官方参考文档:https://www.qemu.org/docs/master/system/introduction.html kvm,轻量级虚拟机,可以加速qemu的执行 qemu-e…

微信云开发技术架构

(仅有把抱怨环境的情绪,化为上进的力量,才是成功的保证。——罗曼罗兰) 微信云开发 官方文档 文本只用来概述微信云开发的技术架构,并结合实战场景进行说明。更详细的请直接查看微信官方文档。 背景 微信云开发是微…

Oracle11g全新讲解之游标

游标 游标的作用:处理多行数据,类似与java中的集合 1.隐式游标 一般是配合显示游标去使用的,不需要显示声明,打开,关闭,系统自定维护,名称为:sql 常用属性: sql%found:语句影响了…

快速分隔文件(split),合并文件(paste)的命令;eval(先扫描输出在执行)命令

split快速分割文件,paste快速合并文件;eval命令 split命令快速分隔文件paste命令快速合并文件eval命令 split命令快速分隔文件 语法格式: split 【选项】 参数 原始文件 拆分后文件名前缀 常用选项 -l:以行数拆分 -b&#xf…

7.对象模型

对象模型 信号和槽 信号和槽是一种用于对象之间通信的机制。信号是对象发出的通知,槽是用于接收这些通知的函数。 当对象的状态发生变化时[按钮被点击],它会发出一个信号[clicked()],然后与该对象连接的槽函数将被自动调用。 若某个信号与多…

图像分割之SAM(Segment Anything Model)

论文:Segment Anything Github:https://github.com/facebookresearch/segment-anything 论文从zero-shot主干网络的基础出发,提出了SAM(Segment Anything Model)模型。该模型有别于传统的分割模型。传统分割模型只能输…

正则表达式的一些元符号

正则表达式 正则表达式—通常用于判断语句中,用来检查某一字符串是否满足某一格式 正则表达式是由普通字符与元字符组成 普通字符包括大小写字母、数字、标点符号及一些其他符号元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字…

(数字图像处理MATLAB+Python)第四节:频域高通滤波与综合案例

文章目录 一:频域高通滤波(1)理想的高通滤波器(2)巴特沃斯高通滤波器(3)指数高通滤波器(4)梯形高通滤波器 二:综合案例——人像美化(1&#xff09…

vue2实现高德地图 JSAPI 2.0海量点标记(标注和标注图层)->自定义点位->定时刷新点位

前提: 需要注册高德开放平台,之后创建应用并且开通Web端(JS API)平台,然后拿到securityJsCode和key 1. 基础抽取(还原示例) 1.1 组件代码 代码说明: 需要修改securityJsCode和key为自己的allowCollision为标注是否避让marker,默认为false不避让markers为地图上的标记数组layer…

【Axure教程】中继器表格寻找和标记数据

在系统表格中,我们想在表格中快速找到对应的数据,通常我们会用条件筛选来完成,但是用筛选的方式,其他数据就看不到了,少了两种条件之间的对比。所以如果需要数据对比的情况下,我们更多的是用标记数据的方式…

Unity学习笔记 关于Unity相机的FOV以及水平FOV和垂直FOV之间的转换

前言 关于FOV FOV 是在任何给定时间通过人眼、相机取景器或在显示屏上可见的可观察世界的范围。它指的是整个区域的覆盖范围,而不是单个固定焦点。FOV 还描述了一个人可以看到可见世界的角度。 FOV 越宽,可以看到的可观察世界就越多。它是水平、垂直和对…

vue3中使用外部字体

首先要找一个免费网站,去下载你想用的字体,推荐 DaFont - Download fonts 或者问UI要,ui在设计图的时候也会下载对应的特殊字体的包,所以问她要方便快捷 ~~ 如果是进入网站下载的话,操作步骤如下: 在官网…

MTN模型LOSS均衡相关论文解读

一、综述 MTN模型主要用于两个方面,1.将多个模型合为一个显著降低车载芯片负载。2.将多个任务模型合为一个,有助于不同模型在共享层的特征可以进行互补,提高模型泛化性能的同时,也有可能提高指标。传统的方法是直接不同任务loss相…

谷歌打响全面反击战!官宣AI重构搜索、新模型比肩GPT-4,朝着ChatGPT微软开炮

明敏 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 万众瞩目,谷歌的反击来了。 现在,谷歌搜索终于要加入AI对话功能了,排队通道已经开放。 当然这还只是第一步。 大的还在后面: 全新大语言模型PaLM 2正式亮相,谷歌声称…

vue解决跨域的几种办法

当我们遇到请求后台接口遇到 Access-Control-Allow-Origin 时,那说明跨域了。 跨域是因为浏览器的同源策略所导致,同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,同源是指&…

【C#】本地下载附件(Excel模板)

系列文章 【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

腾讯云发布金融国产化战略、《腾讯云银行核心系统分布式转型白皮书》

5月11日,在腾讯金融云国产化战略峰会上,腾讯云发布金融国产化战略:腾讯云将持续加大技术投入打造新一代国产化精品产品,并依托产品构建全栈领先的国产数字化基座。同时,腾讯云还将携手伙伴,共同构建国产数字…

PD虚拟机增加CentOS虚拟机磁盘空间

mac环境下安装了PD虚拟机,近期由于需求需要,扩容了其中一台CentOS7的磁盘空间。 做以下记录: 1.PD虚拟机操作: 2. CentOS7内部操作: 2.1 lsblk -f 查看 2.2 fdisk -f 查看,物理磁盘已增加容量 2.3 fdis…

leetcode 1035. Uncrossed Lines(不交叉的线)

把数组nums1和nums2的元素排成2行, 从左到右把相同的元素连线,但是任意2条线不能交叉。 比如Example1中,可以连2个4,也可以连2个2,但是不能同时连,因为会交叉。 找出最多的连线数。 思路: 一开…