【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表的graidid
	
	CONSTRAINT `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=utf8

ALTER 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 : 自增列依然从上一个自增数据基础上开始 (存在文件中,不会丢失)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

接上次博客:二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义…

设计模式(9):外观模式

一.迪米特法则(最少知识原则) 一个软件实体应当尽可能少的与其他实体发生相互作用。 二.外观模式 为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用。它的核心是什么呢,就是为我们的子系统提供一个统一的入口,封装子…

IDE/VS2015和VS2017帮助文档MSDN安装和使用

文章目录 概述VS2015MSDN离线安装离线MSDN的下载离线MSDN安装 MSDN使用方法从VS内F1启动直接启动帮助程序跳转到了Qt的帮助网页 VS2017在线安装MSDN有些函数在本地MSDN没有帮助?切换中英文在线帮助文档 概述 本文主要介绍了VS集成开发环境中,帮助文档MS…

探索一致性哈希算法以及在 Dubbo 负载均衡中的应用

文章目录 负载均衡简介基于哈希算法的负载均衡策略传统哈希算法一致性哈希算法虚拟一致性哈希算法 一致性哈希在 Dubbo 中的应用ConsistentHashSelector 构造方法ConsistentHashSelector select方法 负载均衡简介 负载均衡(Load Balance,简称 LB&#x…

国产AI大模型推荐(一)

文心一言 主要功能: 各种类型的问答、各种文本创作、推理与数学计算、写代码、聊天交流、图片生成等。 链接:文心一言 讯飞星火 特点: 内容生成能力:我可以进行多风格多任务长文本生成,例如邮件、文案、公文、作文、对…

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库,它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性,Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…

使用Node.js常用命令提高开发效率

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具,可以帮助开发者更高效地开发应用程序。在日常开发中,除了Node.js本身的核心功能外,npm&#x…

蓝桥杯习题

https://www.lanqiao.cn/problems/1265/learning/ 第一题---排序 给定一个长度为N的数组A,请你先从小到大输出它的每个元素,再从大到小输出他的每个元素。 输入描述: 第一行包含一个整数N 第二行包含N个整数a1,a2,a3,...an,表…

牛客周赛 Round 38(A,B,C,D,E,F,G)

比赛链接 官方讲解(不分P不分段直接两小时怼上来是坏文明 ) 这场的题很棒,思维有难度,考察的知识点广泛,有深度,很透彻。感觉学到了很多。建议补题。 A 小红的正整数自增 思路: 签到。 可以…

k8s的pod访问service的方式

背景 在k8s中容器访问某个service服务时有两种方式,一种是把每个要访问的service的ip注入到客户端pod的环境变量中,另一种是客户端pod先通过DNS服务器查找对应service的ip地址,然后在通过这个service ip地址访问对应的service服务 pod客户端…

Python面对对象 - 类的反射机制

Python面对对象类的反射机制是面向对象编程语言中比较重要的功能,可以动态获取对象信息以及动态调用对象。通过字符串形式的类名或属性来访问对应类或属性。 一、对象的反射 1. getattr 获取指定字符串名称的对象属性、方法: 当访问的属性不存在时&#…

AtCoder Beginner Contest 347(A~D)

A - Divisible 如果序列里面的数能被k整除&#xff0c;就整除后输出 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #define debug(a) cout<<#a<…

Android ImageView 的scaleType 属性图解

目录 前言测试素材测试布局xmlscaleType前言 一、ScaleType.FIT_CENTER 默认二、ScaleType.FIT_START三、ScaleType.FIT_END四、ScaleType.FIT_XY五、ScaleType.CENTER六、ScaleType.CENTER_CROP七、ScaleType.CENTER_INSIDE八、ScaleType.MATRIX 前言 原文链接&#xff1a; A…

macOS搭建php环境以及调试Symfony

macOS搭建php环境以及调试Symfony macOS搭建php环境以及调试Symfony 古老的传说运行环境快速前置安装环境 php 的安装安装 Xdebug 来调试 php如何找到你的 php.iniXdebug 安装成功 创建并调试的 Hello world 安装 PHP Debug 安装 Symfony 安装 Composer安装 Symfony CLI 创建 …

tcpdump + wireshark 服务器抓包分析

tcpdump wireshark 服务器抓包分析 1.tcpdump安装2.tcpdump使用3.安装wireshark4.使用wireshark 本文用以总结使用tcpdump进行抓包&#xff0c;然后使用wireshark工具打开抓包出来的pacp文件进行分析。通过tcpdump可以实时监控到linux服务器中tcp和http、https等通讯的内容和信…

HarmonyOS 应用开发之FA模型访问Stage模型DataShareExtensionAbility

概述 无论FA模型还是Stage模型&#xff0c;数据读写功能都包含客户端和服务端两部分。 FA模型中&#xff0c;客户端是由DataAbilityHelper提供对外接口&#xff0c;服务端是由DataAbility提供数据库的读写服务。 Stage模型中&#xff0c;客户端是由DataShareHelper提供对外接…

【重学C语言】二、C语言简介和开发工具

【重学C语言】二、C语言简介和开发工具 C语言发展史C语言标准变迁C语言特点开发软件CLion安装步骤 VIsual Studio安装步骤 Clion 和 VS2022 绑定 VS 项目创建项目 Clion 项目(本博主主用)创建项目Clion 配置 构建类型构建模式 C语言发展史 1970年&#xff0c;美国 AT&T 公…

leetcode.209.长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3] 输出&#…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载&#xff08;点击下方官网链接&#xff09; Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载&#xff0c;我下的是jdk 11&#xff0c;JDK有安装版和解压版&#xff0c;我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

设计模式10--适配器模式

定义 案例一 案例二 优缺点