【WEEK5】 【DAY5】DML语言【中文版】

2024.3.29 Friday

目录

  • 3.DML语言
    • 3.1.外键(了解)
      • 3.1.1.概念
      • 3.1.2.作用
      • 3.1.3.添加(书写)外键的几种方法
        • 3.1.3.1.创建表时直接在主动引用的表里写(被引用的表的被引用的部分)
        • 3.1.3.2.先创建表后修改表以添加外键
        • 3.1.3.3.以上操作都是物理外键,数据库级别的外键,不建议使用 -> 避免数据库过多
      • 3.1.4.删除
    • 3.2.DML语言(Data Manipulation Language)
      • 3.2.1.数据库意义
      • 3.2.2.管理数据库数据方法
      • 3.2.3.DML语言:数据操作语言
      • 3.2.4.添加
      • 3.2.5.修改
      • 3.2.6.删除

3.DML语言

3.1.外键(了解)

3.1.1.概念

  • 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
  • 在实际操作中,将一个表的值放入第二个表来表示关联,所使用的值是第一个表的主键值(在必要时可包括复合主键值)。此时,第二个表中保存这些值的属性称为外键(foreign key)。

3.1.2.作用

保持数据一致性完整性,主要目的是控制存储在外键表中的数据,约束。使两张表形成关联,外键只能引用外表中的列的值或使用空值。

3.1.3.添加(书写)外键的几种方法

3.1.3.1.创建表时直接在主动引用的表里写(被引用的表的被引用的部分)

本例中grade是被引用(主表)的表,student是主动引用(从表)的表

-- 第三大部分添加外键 法1 --
CREATE TABLE `grade`(`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (`gradeid`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (`studentno` INT(4) NOT NULL COMMENT '学号',`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',#这行不是为了连接表‘grade’,但表示“要引用”`gradeid` INT(10) DEFAULT NULL COMMENT '年级',`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',`borndate` DATETIME DEFAULT NULL COMMENT '生日',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',PRIMARY KEY (`studentno`),KEY `FK_gradeid` (`gradeid`),		-- 其中FK_是默认的名字,(定义外键的)目的是引用grade表的graididCONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)#给外键添加约束,并引用到另外一张表中的某个具体字段
) ENGINE=INNODB DEFAULT CHARSET=utf8

点击设计表student打开外键则能看到如下
在这里插入图片描述

3.1.3.2.先创建表后修改表以添加外键

注意:和上一种方法不同的都在从表,从表第一次书写时除了第104行和外键有关的也需要保留以外,其他都不用写(放在后来的添加中写(最后2行))

-- 第三大部分添加外键 法2 --
CREATE TABLE `grade`(`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',PRIMARY KEY (`gradeid`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;-- 学生信息表 (学号,姓名,性别,年级,手机,地址,出生日期,邮箱,身份证号)
CREATE TABLE `student` (`studentno` INT(4) NOT NULL COMMENT '学号',`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',`sex` TINYINT(1) DEFAULT '1' COMMENT '性别',`gradeid` INT(10) DEFAULT NULL COMMENT '年级',`phoneNum` VARCHAR(50) NOT NULL COMMENT '手机',`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',`borndate` DATETIME DEFAULT NULL COMMENT '生日',`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',PRIMARY KEY (`studentno`)		-- 作为括号内最后一行时不能加逗号
) ENGINE=INNODB DEFAULT CHARSET=utf8ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`gradeid`);
3.1.3.3.以上操作都是物理外键,数据库级别的外键,不建议使用 -> 避免数据库过多

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据(外键)–> 改成用程序实现

3.1.4.删除

删除具有主外键关系的表时,要先删子表,后删主表,否则无法删除主表
以删除上例grade表为例:
在这里插入图片描述

3.2.DML语言(Data Manipulation Language)

3.2.1.数据库意义

数据存储、数据管理

3.2.2.管理数据库数据方法

  • 通过Navicat、SQLyog等管理工具管理数据库数据
  • 通过DML语句管理数据库数据

3.2.3.DML语言:数据操作语言

  • 用于操作数据库对象中所包含的数据
  • 包括 :
    • INSERT (添加数据语句)
    • UPDATE (更新数据语句)
    • DELETE (删除数据语句)

3.2.4.添加

-- 插入语句(添加)--
INSERT INTO 表名([字段名1, 字段名2, 字段名3, ...]) VALUES ('value1'), ('value2'), ('value3'), ('value4'), ...)或为('value1', 'value2', 'value3',...的形式)
  1. 最简单的情况:该表只有一个字段,本质上写不写(`gradename`)都会自动把值添加到这一列
INSERT INTO `grade` (`gradename`) VALUES ('undergraduate')

在这里插入图片描述

  1. 如果要同时添加多行同一字段的数据,则每个数据都要单独用括号和逗号分开
-- 如果要同时添加多行同一字段的数据,则每个数据都要单独用括号和逗号分开
INSERT INTO `grade` (`gradename`) VALUES ('sophomore'), ('junior')

在这里插入图片描述(对应id4~5)

  1. 如果同时添加的是同一行不同字段的数据,则不需要把每个数据用括号分开,但需注意数据和字段名的一一对应关系
-- 如果同时添加的是同一行不同字段的数据,则不需要把每个数据用括号分开,但需注意数据和字段名的一一对应关系,如下
INSERT INTO `student` (`studentname`, `phoneNum`) VALUES ('DL','1234567')
INSERT INTO `student` (`studentno`, `studentname`, `phoneNum`, `borndate`) VALUES ('1','DL','9876','1021')
INSERT INTO `student` (`studentno`, `studentname`, `phoneNum`, `borndate`) VALUES ('2','DL','9876','2222-10-21')

在这里插入图片描述

  1. 注意
  • 字段或值之间用英文逗号隔开
  • ’ 字段1,字段2…’ 该部分可省略,但添加的值务必与表结构,数据列,顺序相对应,且数量一致
  • 可同时插入多条数据 , values 后用英文逗号隔开

3.2.5.修改

-- 修改语句 --
UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];
  1. 不指定条件则会把该字段中的所有数据都更改
-- 不指定条件则会把该字段中的所有数据都更改
UPDATE `student` SET `studentname` = 'momo'

在这里插入图片描述

  1. 选择某特殊字段的值作为filter,修改那一行的字段的值
-- 选择某特殊字段的值作为filter,修改那一行的字段的值
UPDATE `student` SET `studentname` = 'DL' where `studentno` = 1;

在这里插入图片描述

  1. 修改多个字段的属性,直接在SET后多跟几个赋值即可
-- 修改多个字段的属性,直接在SET后多跟几个赋值即可
UPDATE `student` SET `studentname` = 'QW', `address` = 'quagmire' where `studentno` = 2;

在这里插入图片描述

  1. 通过多个条件定位数据
-- 通过多个条件定位数据
UPDATE `student` SET `studentname` = 'dl' WHERE studentno = 0 AND phoneNum = 1234567;

在这里插入图片描述

  1. 插入当前时间
-- 插入当前时间
UPDATE `student` SET `borndate` = CURRENT_TIMESTAMP WHERE studentno = 0 OR phoneNum = 1234567;

在这里插入图片描述

  1. 注意
  • column_name 为要更改的数据列
  • value 为修改后的数据 , 可以为变量 , 具体指 , 表达式或者嵌套的SELECT结果
  • condition 为筛选条件 , 如不指定则修改该表的所有列数据
  1. Where条件语句
    在这里插入图片描述
    如:
UPDATE `student` SET `studentname` = 'as', `address` = 'quagmire' WHERE studentno BETWEEN 0 AND 2;

在这里插入图片描述

3.2.6.删除

  1. DELETE
DELETE FROM 表名 [WHERE condition];

condition为筛选条件,如不指定则删除该表的所有列数据
如:

-- 删除语句 --
-- 不建议这样写,是全部删除
DELETE FROM `student`
-- 有选择性地删除
DELETE FROM `student` WHERE studentno = 1;

在这里插入图片描述

  1. TRUNCATE
TRUNCATE [TABLE] table_name;

作用:用于完全清空表数据,但表结构、索引、约束等不变
如:

TRUNCATE `student`
  1. DELETE和TRUNCATE的区别
  • 相同 : 都能删除数据 , 不删除表结构 , 但TRUNCATE速度更快
  • 不同 :
    • 使用TRUNCATE TABLE 会重新设置AUTO_INCREMENT计数器
    • 使用TRUNCATE TABLE不会对事务有影响
  1. 测试
-- 测试
CREATE TABLE `test`(`id` INT(4) NOT NULL AUTO_INCREMENT,`coll` VARCHAR(20) NOT NULL,PRIMARY KEY(`id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;#插入测试数据
INSERT INTO `test`(`coll`) VALUES('row1'),('row2'),('row3');
#删除表数据
DELETE FROM test;
#再插入,看id不是从1而是从4开始
INSERT INTO `test`(`coll`) VALUES('row1'),('row2'),('row3');TRUNCATE TABLE test;
#再插入,看id不是从7而是从1开始
INSERT INTO `test`(`coll`) VALUES('row1'),('row2'),('row3');
结论:truncate删除数据,自增当前值会恢复到初始值重新开始;不会记录日志.
同样使用DELETE清空不同引擎的数据库表数据.重启数据库服务后,使用不同的数据引擎:
InnoDB : 自增列从初始值重新开始 (因为是存储在内存中,断电即失)
MyISAM : 自增列依然从上一个自增数据基础上开始 (存在文件中,不会丢失)

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

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

相关文章

《系统架构设计师教程(第2版)》第8章-系统质量属性与架构评估-02-系统架构评估

文章目录 1. 一些重要概念1.1 敏感点 (Sensitivity Point)1.2 权衡点 (Tradeoff Point)1.3 风险承担者 (Stakeholders)1.3.1 系统生产者1.3.2 系统消费者1.3.3 系统服务人员1.3.4 其它人员 1.4 场景 (scenarios) 2. 系统架构评估方法2.1 基于场景的架构分析方法(SAA…

漏洞-CORS跨域资源共享JSONP回调

CORS跨域资源共享 Cors漏洞详解 - FreeBuf网络安全行业门户 响应标头中 当Access-Control-Allow-Origin字段为*时&#xff0c;就代表任意域都可以访问&#xff0c;就导致了Cors漏洞的产生 构造poc <!DOCTYPE> <html> <script type"text/javascript&quo…

什么是智慧公厕?智慧城市下的智慧公厕有什么功能和特点?

随着科技的不断进步和城市化的加快发展&#xff0c;智慧城市已经成为我们生活中的一部分。而在智慧城市的建设中&#xff0c;智慧公厕作为城市基础设施的重要组成部分发挥着重要的作用。那么什么是智慧公厕&#xff1f;智慧公厕是针对公共厕所的日常使用、运行、管理、运营等过…

分析:两种不同的函数模板写法,其中一种为何不行

接上篇&#xff1a; 利用类型&#xff0c;做函数模板的“重载”-CSDN博客 比较两种模板的写法 为什么左边不可行&#xff1a; 注意&#xff0c;左边的写法的第二个模板参数&#xff0c;是默认参数的形式。为何这里采取了默认参数的形式呢&#xff0c;本意是想让编译器来走sfi…

Java学习之类和对象、内存底层

目录 表格结构和类结构 表格的动作和类的方法 与面向过程的区别 具体实现 对象和类的详解 类的定义 属性&#xff08;field 成员变量&#xff09; 方法 示例--编写简单的学生类 简单内存分析(理解面向对象) 构造方法(构造器 constructor) 声明格式&#xff1a; 四…

super关键字的使用总结

一、super关键字的使用1. 为什么需要super&#xff1f;举例1&#xff1a;子类继承父类以后&#xff0c;对父类的方法进行了重写&#xff0c;那么在子类中&#xff0c;是否还可以对父类中被重写的方法进行调用&#xff1f; 可以&#xff01;举例2&#xff1a;子类继承父类以后&a…

一个页面实现两个滚动条【前端】

一个页面实现两个滚动条【前端】 前言版权推荐一个页面实现两个滚动条最后 前言 2024-4-2 12:54:46 以下内容源自《【前端】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net …

【zlm】音视频流与音频流合并的设计

目录 设想一 设想二 方案三 关键技术 测试语句 测试脚本 参考文档 设想一 //开始录制_option.mp4_save_path custom_path;_option.mp4_max_second max_second;vector<Track::Ptr> mytracks getTracks();auto src MediaSource::find( DEFAULT_VHOST, "1&quo…

练习14 Web [极客大挑战 2019]Upload

phtml格式绕过&#xff0c;burp修改content-type绕过&#xff0c;常见的文件上传存放目录名 题目就叫upload&#xff0c;打开靶机 直接上传一个图片格式的一句话木马&#xff0c;返回如下&#xff1a; 提交练习5和9中的两种可以执行图片格式php代码的文件&#xff0c;修改con…

生成式人工智能对信息安全的挑战及解决方案

概念 生成式人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;基于训练数据以及用户提示词创建新内容的能力&#xff0c;在教育、娱乐、巡检、医疗保健和科学研究等多个领域提供变革潜力&#xff0c;激发起前所未有的关注度和创造力浪潮&#xff0c;引发…

25.死锁

一个线程如果需要同时获取多把锁&#xff0c;就容易产生死锁。 t1线程获得A对象锁&#xff0c;接下来想获取B对象的锁。 t2线程获得B对象锁&#xff0c;接下来想获取A对象的锁。 /*** 死锁demo* param args*/public static void main(String[] args) {Object a new Object(…

如何使用【知乎引流软件工具】进行有效引流

知乎&#xff0c;这个内容平台&#xff0c;无疑是品牌和创作者们的乐园。 品牌能在这里找到目标关键词&#xff0c;而创作者们的内容则可以吸引流量&#xff0c;助力各种项目。 别被那些所谓的爆粉秘籍迷惑了&#xff0c;真正的成功往往来自于扎实的内容和策略&#xff0c;而非…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;最初由Google设计和开发&#xff0c;现在由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

IPC 进程间通信

IPC InterProcess Communication The concept of IPC Each process has a differnt user addess space,and local variables 各自看不见,so 进程间通信 need kernel(内核), so a buffer is opened in the kernel,process 1 copies data from user space to this buffer,and …

Linux:运营商在网络中扮演的角色

文章目录 ip目前的问题ip目前的几种解决方案私有ipVS公有ip运营商再谈ip划分运营商的角度看ip 本篇总结的是运营商在网络中扮演的角色 ip目前的问题 在目前看来&#xff0c;ip最大的问题是ip号不够用了&#xff0c;那这个问题如何解决呢&#xff1f; 在之前的内容中有子网掩…

朗之万方程,机器学习与液体中的粒子运动

目录 一、说明二、朗之万方程的诞生2.1 牛顿力学2.2 流体中的随机运动 三、小质量物体布朗运动方程四、布朗运动的Python代码五、稳定性讨论5.1 波尔兹曼分布5.2 梯度下降算法 六、随机梯度下降&#xff08;SGD&#xff09;和小批量梯度下降七、机器学习与物理&#xff0c;作为…

加密软件VMProtect教程:使用脚本-功能

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

最大连续1的个数||

又用到滑动窗口&#xff0c;关键在于要维持窗口内0的数量在k内 #include<stdio.h> #include<string.h>int Max(int a,int b){return (a>b)?a:b; }int findMaxConsecutiveOnes(int* nums,int numsSize,int k){int left 0;int right 0;int flag 0;//记录包含…

系统设计理念:满足设计要求

在今天的文章中,我们将层层剥离并深入探讨系统设计要求的本质。 让我们了解系统设计的支柱以及如何创建强大且有弹性的应用程序。 什么是好的设计? 在我们深入讨论技术细节之前,让我们先讨论一下什么是好的设计。 当我们谈论系统架构中的良好设计时,我们关注几个关键原则:…

初始C语言最后一章《编译、链接与预处理详解》

前言 感谢老铁们的陪伴和支持&#xff0c;初始C语言专栏在本章内容也是要结束了&#xff0c;这创作一路下来也是很不容易&#xff0c;如果大家对 Java 后端开发感兴趣&#xff0c;欢迎各位老铁来我的Java专栏&#xff01;当然了&#xff0c;我也会更新几章C语言实现简单的数据结…