数据库讲解---(SQL语句--表的使用)【MySQL版本】

news2024/11/27 13:27:45

零.前言

数据库讲解(MySQL版)(超详细)【第一章】-CSDN博客

数据库-ER图教程_e-r图数据库-CSDN博客

数据库讲解(MySQL版)(超详细)【第二章】【上】-CSDN博客

一.SQL概述

1.1SQL简介

SQL关系数据库的标准语言,也称“结构化查询语言”,它介于“关系代数”和“元组演算”之间的语言

1.2SQL的特点

  • 高度非过程化”:用户只需要提出“做什么”,无须指明“怎么做”
  • 功能完备并且一体化”:使用SQL可以完成绝大部分数据库的操作
  • 统一的语法结构”:SQL可以用于所有用户模型
  • 语言简洁,易学易用”:SQL功能很强,并且语言简洁

1.3SQL体系结构

SQL支持“外模式、模式、内模式”三级结构:

二.SQL的定义和功能

2.1表结构的定义

SQL创建基本表的语法结构:

CREATE TABLE <表名>
(
    <列名1> <数据类型> [列约束条件],
    <列名1> <数据类型> [列约束条件],
    <列名1> <数据类型> [列约束条件],
    .....,
    [表级完整性约束条件]
);

不同数据的数据类型是不同的,例如:“MySQL”与“Oracle”之间的数据类型就是不完全相同

常见的“完整性约束条件”有:

  • NOT NULL”:非空约束,即该属性值不能为空
  • UNIQUE”:唯一性约束,即该属性值只能出现一次
  • PRIMARY KEY”:主键约束
  • FOREIGN KEY .... REFERENCE ...”:外键约束

主键”的作用主要是:“唯一的标识某个属性为整个表的特征值,即该属性的值必须是唯一且非空的

而“非空约束” + “唯一性约束”组合在一起实现的作用为“属性的值必须是唯一且非空的

这个“组合”与“主键”的“作用基本一致,但是不能混淆在一起使用

一个表只能定义一个主键”,而“非空约束”+“唯一性约束”组合可以无限定义!!

2.1.1下面是一个创建普通“学生”表的例子:

2.1.2下面是一个“课程”表,其中“课程号”为主关键字:

在这里的“课程号”属性中,没必要添加约束:“NOT NULL”和“UNIQUE”,因为“课程号”本身是一个“主键”了

2.1.3下面是一个“学习”表,其中使用多个“属性”作为主关键字:

当我们的“主键”只有一个属性时,可以在“对应属性之后作为列约束添加”也可以在“表完整性约束中添加

但当我们的“主键”拥有多个属性时,只能在“表完整性约束中添加

2.1.4外部关键字的定义

我们假设表B的某个关键字是表A的外键

外部关键字的定义与“主键”的定义方式一样,都有两种定义方式:

  • “外部关键字只有一个属性”:直接在对应属性名之后使用“REFERENCE <表名> [属性]
  • “外部关键字有多个属性”:在表完整性约束中使用“FOREGIN KEY [表A属性] REFERENCE <表B名字> [表B属性]

2.1.5建立一个“学习”表,学号和课程是“主键”也是“外键”,分别参照学生表中的学号和课程表中的课程号

注意:“我们使用了两组FOREGIN KEY来分别对应两个外键属性!!

2.1.6为表中属性指定默认值

我们在定义表时,可以给表中某个属性一个“默认值

使用方法

<属性名> (数据类型) DEFAULT [默认值]

例如,创建一个学生表:

CREATE TABLE 学生
(
    学号 CHAR(8),
    排名 CHAR(8),
    性别 CHAR(4) DEFAULT '男',
    年龄 SAMLLINT DEFAULT 19
);

2.2表的修改

当我们创建好一张“”后,我们可能需要对表中的某些属性约束进行修改,或者删除/添加属性

为此,我们需要学习表修改的语法:

ALTER TABLE <表名>
[
    ADD <新列名> (数据类型) [完整性约束],
    DROP <列名> [完整性约束],
    DROP COLUMN <列名>,
    ALTER COLUMN <列名> (数据类型)
];
  • ADD”:可用于增加新列和新的完整性约束条件
  • DROP”:可用于删除指定的属性或者完整性约束条件
  • ALTER”:可用于修改原有的列定义(包括列名、数据类型、完整性约束

2.2.1在学生表中增加“年龄”属性,类型为SAMLLINT

ALTER TABLE 学生 ADD COLUMN 年龄 SMALLINT;

2.2.2在学生表中删除“年龄”属性

ALTER TABLE 学生 DROP COLUMN 年龄;

2.2.3在学生表中将“学号”属性的主键约束删除

ALTER TABLE 学生 DROP 学号 PRIMARY KEY;

2.2.4在学生表中修改“课程”属性的数据类型为“CHAR”,长度为“40”位

ALTER TABLE 学生 ALTER COLUMN 课程 CAHR(40);

2.2.5在学生表中向“学号”属性添加主键约束

ALTER TABLE 学生 DROP PRIMARY KEY;
ALTER TABLE 学生 ADD PRIMARY KEY(学号);

注意:

  • 先删除原有主键,再添加一个主键
  • “当修改某一列属性的属性值长度时,修改后的长度不能小于修改前
  • 向一个属性添加非空约束或者唯一性约束时,该属性值中不能出现空值或者重复值
  • “添加一个主键时,该表不能已存在主键

2.3表的删除

当我们创建了一张“表”之后,不想要这张“表”了,我们就可以删除它:

DROP TABLE <表名> [RESTRICT|CASCADE];

RESTRICT”和“CASCADE”分别表示:“如果有视图存在或作为参照表时,禁止删除”,“将该表与设计的对象一起删除

CASCADE”的使用应该是谨慎的,因为CASCADE会将与该表相关联的表一起删除!

而使用“RESTRICT”时,如果该表有关联对象,那么就会发出提醒,不会删除!

三.索引的建立与删除

3.1索引的介绍

当我们想要从数据库中获得数据时,数据库有两种检索数据的方式:“顺序检索”、“索引检索

顺序检索”:需要SQL检查数据库中的每一个数据项,效率很低,但它是确定记录准确位置的唯一方法

索引检索”:使用索引检索可以快速查找到某个数据。索引实际上是对数据分类,特征相同的属性摆放在一起,从而形成一个树状结构的文件

3.2索引的建立

建立方法:

CREATE [UNIQUE][CLUSTER] INDEX <索引名字> ON <表名> (<列名> [次序],<列名> [次序],.....)
  • “UNIQUE”:“每个索引值对应唯一的数据记录”
  • “CLUSTER”:“表示建立聚簇索引,即索引项的顺序与表中记录的物理顺序一致的索引组织”

ps:一般常用“UNIQUE”

3.2.1为学生、课程和学习表建立索引

CREATE UNIQUE INDEX STU_IDX_SNO ON 学生 (学号);
CREATE UNIQUE INDEX COU_IDX_CNO ON 课程 (课程号);
CREATE UNIQUE INDEX SC_IDX_SNO_CNO ON 学习 (学号 ASC,课程号 DESC);
  • ASC”:升序排序
  • DESC”:降序排序

3.3索引的删除

删除方法:

DROP INDEX <索引名>;

3.3.1删除“STU_IDX_SNO”、“COU_IDX_CNO”、“SC_IDX_SNO_CNO”索引

DROP INDEX STU_IDX_SNO;
DROP INDEX COU_IDX_CNO;
DROP INDEX SC_IDX_SNO_CNO;

注意:

在实际使用中,想要删除某个索引,需要先进入到某个“”中才能删除该“”中某“”的索引

3.4索引的使用技巧

  1. 小表无需使用索引
  2. 索引列中有较多不同数据项时,使用索引之后,性能会有极大提高
  3. 查询返回数据较少时,使用索引辅助查询会优化速度(一般少于全部数据25%)
  4. 索引会占用数据库空间
  5. 不要对经常需要“更新”或“修改”的属性添加索引,会增加系统开销
  6. 不要将索引与表存在一个磁盘上,可能会产生访问冲突

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

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

相关文章

FaceForensics++数据库下载(一步步解析过程)

FaceForensics数据库下载&#xff08;超详细版教程&#xff09; 相信很多做deepfake相关研究的朋友&#xff0c;在对模型进行测试或者对潜前人的研究进行复现时&#xff0c;都需要下载一系列数据库并进行预处理等操作&#xff0c;而FaceForensics数据库是一个由数千个使用不同…

地又接错了?又冒烟了吧?

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;原创文章欢迎点赞分享&#xff01; 作为一名硬件工程师&#xff0c;理解地的概念是至关重要的…

大数据之搭建Hive组件

声明&#xff1a;所有软件自行下载&#xff0c;并存放到统一目录中 1.Hive组件的安装配置 1.1实验环境 服务器集群3 个以上节点&#xff0c;节点间网络互通&#xff0c;各节点最低配置&#xff1a;双核 CPU、8GB 内存、100G 硬盘运行环境CentOS 7.4服务和组件完成前面章节实验…

redis的简单操作

redis中string的操作 安装 下载可视化软件&#xff1a;https://gitee.com/qishibo/AnotherRedisDesktopManager/releases。 Mac安装redis&#xff1a; brew install redisWindows安装redis: 安装包下载地址&#xff1a;https://github.com/tporadowski/redis/releases 1.…

内存管理new and delete(C++)

在本篇中&#xff0c;将会较为详细的介绍在 Cpp 中的两个新操作符 new 和 delete&#xff0c;将会介绍其中的底层原理&#xff0c;以及这两个操作符的使用方法。其中还介绍了 new/delete 操作符使用的细节&#xff0c;还扩展了一些有关定位 new 表达式的知识点。最后总结了 mal…

C++练级之路——类和对象(上)

1、类的定义 class 类名{//成员函数 //成员变量}; class为定义的关键字&#xff0c;{ }内是类的主体&#xff0c;注意后面的 ; 不要忘了 类体中的内容成为类的成员&#xff0c;类中的变量为成员变量或类的属性&#xff0c;类中的函数为成员函数或类的方法&#xff0c; 类的两种…

Prompt最佳实践|大模型也喜欢角色扮演?

在OpenAI的官方文档中已经提供了Prompt Enginerring的最佳实践&#xff0c;目的就是帮助用户更好的使用ChatGPT 编写优秀的提示词我一共总结了9个分类&#xff0c;本文讲解第2个分类&#xff1a;要求模型扮演角色 提供更多的细节要求模型扮演角色使用分隔符指定任务步骤提供样…

OPC UA遇见chatGPT

最近opc 基金会将召开一个会议&#xff0c;主题是”OPC UA meets IT“。由此可见&#xff0c;工业自动化行业也开始研究和评估chatGPT带来的影响了。 本文谈谈本人对OPC UA 与chatGPT结合的初步实验和思考。 构建OPC UA 信息模型 chatGPT 的确非常强大了&#xff0c;使用自然…

前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住

固定列fixed滚动条被固定列盖住 效果图前言解决方案 效果图 前言 在使用fixed固定列的时候会出现滚动条被盖住的情况 解决方案 改变el-table固定列的计算高度即可 .el-table {.el-table__fixed-right,.el-table__fixed {height:auto !important;bottom:15px !important;}}

安装cuda后只在root用户下可见,非root不可见问题

0. 安装cuda和nvidia driver步骤可以参考这篇&#xff1a; https://blog.csdn.net/mygugu/article/details/137474101?spm1001.2014.3001.5502 1.问题记录&#xff1a; 这里记录下安装cuda后遇到的一个奇葩问题&#xff0c;因为安装过程需要root权限&#xff0c;安装后发现…

k8s部署efk

环境简介&#xff1a; kubernetes: v1.22.2 helm&#xff1a; v3.12.0 elasticsearch&#xff1a; 8.8.0 chart包&#xff1a;19.10.0 fluentd: 1.16.2 chart包&#xff1a; 5.9.4 kibana: 8.2.2 chart包&#xff1a;10.1.9 整体架构图&#xff1a; 一、Elasticsearch安装…

Git入门实战教程之创建版本库

一、Git简介 Git是一个分布式版本控制系&#xff0c;分层结构如下&#xff1a; Git分为四层&#xff1a; 1、工作目录 当前正在工作的项目的实际文件目录&#xff0c;我们执行命令git init时所在的地方&#xff0c;也就是我们执行一切文件操作的地方。 2、暂存区 暂存区是…

字符串2s总结

4.字符串 字符串理论基础 什么是字符串 字符串是若⼲字符组成的有限序列&#xff0c;也可以理解为是⼀个字符数组&#xff0c;但是很多语⾔对字符串做了特殊的规定&#xff0c;接下来我来说⼀说C/C中的字符串。 在C语⾔中&#xff0c;把⼀个字符串存⼊⼀个数组时&#xff0c…

前端开发学习笔记 3 (Chrome浏览器调试工具、Emmet语法、CSS复合选择器、CSS元素选择模式、CSS背景)

文章目录 Chrome浏览器调试工具Emmet语法CSS复合选择器后代选择器子选择器并集选择器伪类选择器 CSS元素选择模式元素选择模式概述CSS块标签CSS行内标签CSS行内块标签CSS元素显示模式转换 CSS背景CSS背景颜色CSS背景图片CSS背景图片平铺CSS背景图片位置CSS背景图片固定CSS背景复…

如何高效学习Python编程语言

理解Python的应用场景 不同的编程语言有不同的发展历史和应用场景,了解Python主要应用在哪些领域对于学习它会有很大帮助。Python最初是一种通用脚本语言,主要用于系统级任务自动化。随着时间的推移,它逐步成为数据处理、科学计算、Web开发、自动化运维等众多领域的主要编程语…

第4章 Redis,一站式高性能存储方案,笔记问题

点赞具体要实现功能有哪些&#xff1f; 可以点赞的地方&#xff1a;对帖子点赞&#xff0c;对评论点赞点一次是点赞&#xff0c;再点一次是取消赞统计点赞的数量&#xff08;计数&#xff0c;string&#xff09;&#xff0c;帖子被点赞的数量&#xff0c;某个用户被点赞的数量…

8.java openCV4.x 入门-Mat之多维元组(Tuple)

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

【深度学习基础】

打基础日常记录 CNN基础知识1. 感知机2. DNN 深度神经网络&#xff08;全连接神经网络&#xff09;DNN 与感知机的区别DNN特点&#xff0c;全连接神经网络DNN前向传播和反向传播 3. CNN结构【提取特征分类】4. CNN应用于文本 RNN基础1. RNN的本质 词向量模型word2Vec1. 自然语言…

CentOS系统的小小基础

CentOS系统的小小基础 1、基础命令查看系统查看显存 2、常见问题创建文件后出现 E325: ATTENTION Found a swap file by the name ".文件名.swp"自己创建了方便的脚本共所有用户使用yum换源清楚僵尸进程 Linux 使用Anacondapip换源下载安装 NVIDIA Driver 1、基础命令…

语音特征的反应——语谱图

语谱图的横坐标为时间&#xff0c;纵坐标为对应时间点的频率。坐标中的每个点用不同颜色表示&#xff0c;颜色越亮表示频率越大&#xff0c;颜色越淡表示频率越小。可以说语谱图是一个在二维平面展示三维信息的图,既能够表示频率信息,又能够表示时间信息。 创建和绘制语谱图的…