【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列

news2025/1/11 19:03:31

系列文章目录

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


文章目录

  • 系列文章目录
  • 前言 🍃
  • 一、实体对象更新
    • 1.1 单条与批量
    • 1.2 不更新某列
    • 1.3 只更新某列
    • 1.4 NULL列不更新
    • 1.5 无主键/指定列
    • 1.6 更新添加条件
    • 1.7 大数据更新
    • 1.8 重新赋值1:list中的值修改
    • 1.9 重新赋值2: 列中的值+1
  • 二、根据表达式更新(像SQL)
    • 2.1 指定多个字段更新
    • 2.2 一个字段更新
    • 2.3 字段+1更新
    • 2.4 Set语法是支持多个的
    • 2.5 批量更新IN
    • 2.6 表达式无实体更新
    • 2.7 表达式分页更新
  • 三、根据字典更新
  • 四、根据DataTable更新
  • 五、匿名、Object、接口更新
  • 六、更多功能
    • 6.1 更新主键
    • 6.2 联表更新
    • 6.3 调用实体内方法
    • 6.4 高性能更新
    • 6.5 导航更新
    • 6.6 默认值(系统时间)
  • 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


前言 🍃

前面的章节介绍了各种 SqlSugar 各种场景的 查询 操作,接下来将介绍 SqlSugar 增、删、改 相关操作。数据库 插入 数据的方法包括:使用 SQL 插入语句、通过 ORM 框架、使用 批量插入 技术、利用 存储过程

一、实体对象更新

所谓按实体对象更新就是:db.Updateable (参数对象) 有参数的重载。

db.Updateable(实体或者集合).ExecuteCommand()

1.1 单条与批量

根据实体更新需要给实体配置主键,参考文档实体配置:

函数说明
ExecuteCommand返回受影响行数 , update where 如果没找到那么就会返回 0
ExecuteCommandHasChange返回bool ,等同于 bool isChange= ExecuteCommand()>0
//根据主键更新单条 参数 Class
var result= db.Updateable(updateObj).ExecuteCommand();//实体有多少列更新多少列
 
 
//批量更新参数 List<Class>
var result= db.Updateable(updateObjs).ExecuteCommand();
//分页更新 5.1.4.129+ 低版本 存在 UpateColumns设置无效
db.Updateable(List<实体>).PageSize(1000).ExecuteCommand() 
 
 
var updateObj=new Class(){Id=1 }; //主键要有值
//只更新修改字段 (5.1.4.59支持了批量)
db.Tracking(updateObj);//创建跟踪
updateObj.Name = "a1" + Guid.NewGuid();//只改修改了name那么只会更新name
db.Updateable(updateObj).ExecuteCommand();//因为每条记录的列数不一样,批量数据多性能差,不建议用
//可以清空
db.ClearTracking();//5.1.4.108-preview30+
 
  
//大数据批量更新  适合列多数据多的更新  
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList());
 
//联表更新看标题6.2

1.2 不更新某列

🌰不更新 TestIdCreateTime

var result=db.Updateable(updateObj).IgnoreColumns(it => new { it.CreateTime,it.TestId }).ExecuteCommand()
 
//也可以用特性
[SugarColumn(IsOnlyIgnoreUpdate=true)]
public DateTime UpdateDate{get;set;}

1.3 只更新某列

🌰只更新 NameCreateTime

var result=db.Updateable(updateObj).UpdateColumns(it => new { it.Name,it.CreateTime }).ExecuteCommand();

🎯注意:5.1.4.62 版本支持了多个 UpdateColumn 叠加,之前版本不支持。

🌰 追加AOP赋值列 5.1.4.106-preview19+

//例如:AOP修改 Price那么更新的列就是 Price Name Creatime 加了true就追加了一列
var result=db.Updateable(updateObj)
.UpdateColumns(it => new { it.Name,it.CreateTime },true)//true表示追加AOP赋值列
.ExecuteCommand();

1.4 NULL列不更新

🎯注意:高版本支持批量 ,用该方法批量性能差些,因为列不同所以没必然用批量语法。

//更新忽略null字段
db.Updateable(data).IgnoreColumns(ignoreAllNullColumns:true).ExecuteCommand();
 
//更新忽略null并且忽略默认值 (比如int默认值是0就不更新)
db.Updateable(data).
 IgnoreColumns(ignoreAllNullColumns:true,ignoreAllDefaultValue:true).ExecuteCommand();

1.5 无主键/指定列

🆚用法同上唯一区别就是用 WhereColumns 指定条件:

var result= db.Updateable(updateObj).WhereColumns(it=>new { it.Id}).ExecuteCommand();//更新单 条根据ID
var result= db.Updateable(updateObjs).WhereColumns(it=>new { it.Id}).ExecuteCommand();//更新集合根据ID by id

可以多列:

WhereColumns(it=>new { it.Id,it.Name}) //条件列不会被更新,只会作为条件

1.6 更新添加条件

🎯注意:单条操作都支持 ,批量只支持部分库,多库考虑批量操作不建议用这个方法。

db.Updateable(updateObj).Where(it=>it.Id==1).ExecuteCommand()
//如果是集合操作请更新到5.0.4版本之前版本禁止使用, 并且只有部分库支持

1.7 大数据更新

👑大数据更新,适合大数据更新,可以处理百万级, 5.0.4.5+

//大数据更新,适合大数据更新,可以处理百万级
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList());//特色功能:吊打所有框架N倍,30列100万8秒更新完

1.8 重新赋值1:list中的值修改

 //单个字段
 db.Updateable(updateObj)
   .ReSetValue(it=> { it.Name = it.Name+"a";})//updateObj.Name值的基础上在处理
   .ExecuteCommand()
    
  //多个字段          
 db.Updateable(updateObj)
   .ReSetValue(it=> { 
                it.Name = it.Name+"a";
                it.CreateTime = DateTime.Now;
              })   
     .ExecuteCommand()
             
 

🎯注意:该功能是在 UpdateObj 参数上修改,如果是在数据库字段+1 看1.9和2.3

1.9 重新赋值2: 列中的值+1

  1. SET=字段+固定变量 SqlSugarCore 5.1.4.72 +

  var result67 =
          db.Updateable(updateObjs)
          //批量更新单独处理num列 set num=num+1
          .PublicSetColumns(it => it.Num, it => it.Num+ 1)
          .ExecuteCommand();
  //该功能默认是更新整个LIST,如果只更新一个字段需要加UpdateColumn指定一下      
           
  //2.3也有该功能不过是针对表达式方式更新,不是通过实体方式

🎯注意:该功能默认是更新整个LIST,如果只更新一个字段需要加 UpdateColumn 指定一下。

  1. SET=字段+集合变量 SqlSugarCore 5.1.4.77 preview02 +
 db.Updateable(list)
   .PublicSetColumns(it => it.Price, "+") //set price=price+list[i].price
   .ExecuteCommand();//MYSQL如果用到float表要设置精度
   //该功能默认是更新整个LIST,如果只更新一个字段需要加UpdateColumn指定一下

🎯注意:该功能默认是更新整个LIST,如果只更新一个字段需要加 UpdateColumn 指定一下。

二、根据表达式更新(像SQL)

🗒️表达式更新比较像SQL而不是对象。

var result=db.Updateable<Student>()
          .SetColumns(it => new Student() { Price=it.Price+1,CreateTime=DateTime.Now}) 
          .Where(it => it.Id >11)
          .ExecuteCommand();
//是不是很像SQL

2.1 指定多个字段更新

🌰更新 name, createtime 条件 id=11

var result= db.Updateable<Student>()
.SetColumns(it => new Student() { Name="a",CreateTime=DateTime.Now})//类只能在表达示里面不能提取
.Where(it => it.Id == 11)
.ExecuteCommand();
//表达式写2列更新2列,其他不会更新

2.2 一个字段更新

🌰只更新 name 条件 id=1

var result= db.Updateable<Student>()
.SetColumns(it => it.Name == "jack")//SetColumns是可以叠加的 写2个就2个字段赋值
.Where(it => it.Id == 1)
.ExecuteCommand();
 
// Sql 
// Update Student  set Name='jack' where id=1 
 
//如果需要获取数据库时间我们可以用 SqlFunc.GetDate()

🎯注意:如果需要获取数据库时间我们可以用 SqlFunc.GetDate()

2.3 字段+1更新

//实现在原有字段+1
var result= db.Updateable<Student>()
.SetColumns(it => it.Num == it.Num+1)
.Where(it => it.Id == 1)
.ExecuteCommand();
// update Studentset iNum=iNum+1 where id=1

2.4 Set语法是支持多个的


var result71 = db.Updateable<Order>()
               //生成 [name]=name
              .SetColumns(it => it.Name == it.Name)//加一个必须更新条件防止SETIF没有列
              //第一条件为true 生成 createtime=变量 
              .SetColumnsIF(p!=null ,it => it.CreateTime == p.Value)
               //第一条件为true 生成 X=变量 
              .SetColumnsIF(X!=null ,it => it.X== X)
              .Where(it => it.Id == 11).ExecuteCommand();

2.5 批量更新IN


var ids=new int[]{1,2,3};
var result71 = db.Updateable<Order>()
             .SetColumns(it => it.Name == "a")
            .Where(it => ids.Contains(it.Id)).ExecuteCommand();
            // in (1,2,3)

2.6 表达式无实体更新

db.Updateable<object>()
         .AS("Order")
         .SetColumns("name", 1)
         .Where("id=1").ExecuteCommand();
                 
  //SQL:
  //UPDATE [Order]  SET
  //         [Name]=@Const0  WHERE id=1
   
    
//新功能  5.1.4.143+
db.Updateable<object>()//需要升到5.1.4.143
 .AS("UserInfo001")
 .SetColumns(it=>SqlFunc.MappingColumn<string>("price"),it=>SqlFunc.MappingColumn<string>("price+1"))
 .Where("price=1")
 .ExecuteCommand();
     
  //UPDATE [UserInfo001]  SET
  //        [price]=price+1   WHERE price=1

2.7 表达式分页更新

var q=db.Queryable<Order>()
    .Take(10).Skip(10).OrderByDescending(it => it.CreateTime) 
    .Select(it => it.Id);//只能是Select单个字段
     
db.Updateable<Order>().SetColumns(it => new Order()
    {
        CreateTime = DateTime.Now
    })
    .In(it => it.Id,q).ExecuteCommand();

三、根据字典更新

//设置字典
var dt = new Dictionary<string, object>();
            dt.Add("id", 1);
            dt.Add("name", null);
            dt.Add("createTime", DateTime.Now);
var t66 = db.Updateable(dt).AS("student").WhereColumns("id").ExecuteCommand();
 
//字典集合
var dtList = new List<Dictionary<string, object>>();
dtList.Add(dt);
dtList.Add(dt2);
var t666 = db.Updateable(dtList).AS("student").WhereColumns("id").ExecuteCommand();
 

四、根据DataTable更新

datatable 转成字典集合插入

List<Dictionary<string,object>> dc= db.Utilities.DataTableToDictionaryList(dataTable);//转成字典
var t666 = db.Updateable(dc).AS("student").WhereColumns("id").ExecuteCommand();

五、匿名、Object、接口更新

匿名对象:https://www.donet5.com/Home/Doc?typeId=2423

Object、接口和抽象类:

//这个object必须真实类对象,比如反射的Object 或者接口接收的类对象
db.UpdateableByObject(object).ExecuteCommand();
 
//更多功能 :动态建类等
https://www.donet5.com/Home/Doc?typeId=2562

六、更多功能

6.1 更新主键

🎯注意:ORM 默认不支持修改主键,这种需求有2种方案:

  1. 删除当前记录,然后在添加一条新记录(因为主键都可以更新,说明没有外部引用,可以直接删掉在加)

  2. 新建一个没有主键的实体,指定表名用 Wherecolumns 更新

6.2 联表更新

//多库兼容
var t17 = db.Updateable<Student>()
        .SetColumns(it =>new Student()
        { 
          SchoolId=SqlFunc.Subqueryable<School>().Where(s=>s.Id ==it.SchoolId).Select(s=>s.Id), 
           Name = "newname"  
         })
         .ExecuteCommand();
      //也可以在Where加条件
      //.Where(it => SqlFunc.Subqueryable<School>().Where(s => s.Id == it.SchoolId).Any())
  
       
//优雅写法:MySql PgSql SqlServer Oracle 达梦、金仓  
//其中Oracle和达梦只支持2表    
 var t= db.Updateable<Order>()
        .InnerJoin<Custom>((x, y) => x.CustomId == y.Id)
          .SetColumns((x, y) => new Order() { Name = y.Name, Price = y.Id })
          .Where((x, y) => x.Id == 1)
          .ExecuteCommand();

🤖生成 sql


UPDATE [STudent]  SET            
[SchoolId] = (SELECT TOP 1 [Id] FROM [School] WHERE ( [Id] =[STudent].[SchoolId] )) ,             
[Name] = @Const0   
WHERE ( [ID] = @Id1 )

6.3 调用实体内方法

 db.Insertable(new UnitInsertMethod() { ...... })
 .CallEntityMethod(it=>it.Create()).ExecuteCommand();
  
 db.Updateable(new UnitInsertMethod() { ..... })
 .CallEntityMethod(it => it.modify("admint")).ExecuteCommand();
 
//实体 
public class UnitInsertMethod
{
    [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime Time { get; set; }
    [SqlSugar.SugarColumn(IsNullable =true)]
    public string UserId { get; set; }
  
    public void Create()
    {
        this.Time = DateTime.Now;
        this.UserId = "1";
    }
    public void modify(string a)
    {
        this.Time = DateTime.Now;
        this.UserId = a;
    }
} 

6.4 高性能更新

适合超大数据更新


db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList());//更新 吊打所有框架N倍,30列100万8秒更新完

6.5 导航更新

https://www.donet5.com/Home/Doc?typeId=2432

6.6 默认值(系统时间)

方式1 (5.1.3.42-preview01):通过特性指定默认值

  //更新取数据库当前时间 支持多库
  //UpdateServerTime =true 更新的时候取服务器时间
  //IsOnlyIgnoreInsert =true 插入的时候不插入该列(可用可不用根据需求来)
  [SugarColumn(UpdateServerTime =true,IsOnlyIgnoreInsert =true)]// getdate() now() sysdate
  public DateTime UpdateTime { get; set; }
   
   
  //更新根据SQL进行插入 
   [SugarColumn(UpdateSql  = "getdate()")] //生成   getdate()
   public DateTime UpdateTime2 { get; set; }
  
   [SugarColumn(UpdateSql  = "''")] // 生成  ''
   public string  Str { get; set; }
    
   [SugarColumn(UpdateSql  = "0")]// 生成  0
   public string  Str { get; set; }
    
   [SugarColumn(UpdateSql  = "num+1")]// 生成  num+1
     public string  num { get; set; }

🎯注意:

  • 表达更新:SetColumns(it=>new class{ name=it.name},true) 如果用到 SetColumn 需要加个true。
  • 实体更新:无需任何操作。
  • 方式2:通过 AOP 实现,文档搜索:AOP , 看标题2。
  • 注意:方式1和方式2不要冲突了。

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀

【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体配置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事务】.NET开源 ORM 框架 SqlSugar 系列
【连接池】.NET开源 ORM 框架 SqlSugar 系列
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【配置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
​【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
【查询返回结果类型】.NET开源ORM框架 SqlSugar 系列
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
【SqlSugar雪花ID常见问题】.NET开源ORM框架 SqlSugar 系列


在这里插入图片描述

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

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

相关文章

征战越南电商直播,SD - WAN 专线赋能企业带货新征程

在当今数字化商业浪潮中&#xff0c;越南电商市场正经历着蓬勃发展与激烈变革。根据 Sapo Technology Joint Stock Company 对全国 15,000 名卖家的深度调查&#xff0c;2024 年零售业务的直播领域呈现出多元竞争态势。Facebook Live 强势占据多渠道或仅在线销售卖家总直播会话…

Android Studio创建新项目并引入第三方jar、aar库驱动NFC读写器读写IC卡

本示例使用设备&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1bbW3AUC&ftt&id615391857885 一、打开Android Studio,点击 File> New>New project 菜单&#xff0c;选择 要创建的项目模版&#xff0c;点击 Next 二、输入项目名称…

创业企业如何吸引投资?-中小企实战运营和营销工作室博客

创业企业如何吸引投资&#xff1f;-中小企实战运营和营销工作室博客 创业企业吸引投资需要从多个方面入手&#xff0c;包括打磨自身项目、做好商业展示、拓展融资渠道、有效对接资本等&#xff0c;以下是具体的方法&#xff1a; 一&#xff1a;打磨创业项目 1&#xff0c;明…

donet (MVC)webAPI 的接受json 的操作

直接用对象来进行接收&#xff0c;这个方法还不错的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json数据录入错误信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…

备战蓝桥杯 链表详解

目录 链表概念 静态单链表的实现 静态双链表的实现 循环链表 算法题练习&#xff1a; 1.排队顺序 2.单向链表 3.队列安排 4.约瑟夫问题 链表概念 上一次我们用顺序存储实现了线性表&#xff0c;这次我们用链式存储结构实现的线性表就叫链表 链表每个节点包含数据本身…

灵活运用事务回滚,快捷处理多张数据表格

各位编程宝子们&#xff08;尤其是对MySQL了解不多的宝子们&#xff09;在使用关系表处理时&#xff0c;有时候会希望简单一次性解决多张表的数据处理&#xff0c;但又有时候无从下手。其实有时候掌握数据的事务和回滚便可以简单解决这些事情&#xff0c;接下来我将以一个学生信…

使用C# CEFSharp在WPF中开发桌面程序实现同一网站多开功能

在网络商业运营领域&#xff0c;同时运营多个淘宝店铺的现象屡见不鲜。为了满足这一需求&#xff0c;实现同一网址的多开功能变得尤为关键。这一需求虽然实用&#xff0c;但实现起来却面临诸多挑战。在这个过程中&#xff0c;技术人员们也经历了不少喜怒哀乐。 开发经历回顾 …

CompletableFuture // todo

相比较所有代码都在主线程执行&#xff0c;使用Future的好处&#xff1a;利用服务器多核、并发的优势。 不足&#xff1a; 开启没有返回值的异步线程&#xff1a; 1、runAsync 使用lambda表达式&#xff1a; 开启有返回值的异步线程&#xff1a; 1、supplyAsync 异步任务中的…

如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力

DeepSeek-V3 介绍 在目前大模型主流榜单中&#xff0c;DeepSeek-V3 在开源模型中位列榜首&#xff0c;与世界上最先进的闭源模型不分伯仲。 准备工作&#xff1a; 笔者只演示实例o1 VS DeepSeek-V3两个模型&#xff0c;大家可以自行验证结果或者实验更多场景&#xff0c;同时…

ASP.NET Core 实现微服务 - Consul 配置中心

这一次我们继续介绍微服务相关组件配置中心的使用方法。本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大&#xff0c;还是让我爱不起来。因为前面我们已经介绍了使用Consul 做为服务注册发现的组件 &#xff0c;那么干脆继续使用 Consul 来作为配置…

tdengine数据库使用java连接

1 首先给你的项目添加依赖 <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.4.0</version> <!-- 表示依赖不会传递 --> </dependency> 注意&am…

深入学习RabbitMQ的Direct Exchange(直连交换机)

RabbitMQ作为一种高性能的消息中间件&#xff0c;在分布式系统中扮演着重要角色。它提供了多种消息传递模式&#xff0c;其中Direct Exchange&#xff08;直连交换机&#xff09;是最基础且常用的一种。本文将深入介绍Direct Exchange的原理、应用场景、配置方法以及实践案例&a…

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种&#xff0c;按照数据传送方式可分为串行通信和并行通信&#xff1b; 按照通信的数据同步方式&#xff0c;可分为异步通信和同步通信&#xff1b; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…

本地手集博客id“升级”在线抓取——简陋版——(2024年终总结1.1)

我之前每每发布笔记都用csv纯文本记录&#xff0c;一个机缘巧得文章列表api实现在线整理自已的文章阅读量数据。 (笔记模板由python脚本于2025年01月10日 18:48:25创建&#xff0c;本篇笔记适合喜欢钻牛角尖的coder翻阅) 【学习的细节是欢悦的历程】 Python官网&#xff1a;htt…

高等数学学习笔记 ☞ 洛必达法则与泰勒公式

1. 洛必达法则 1. 型与型未定式&#xff08;洛必达法则&#xff09; &#xff08;1&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; &#xff08;2&#xff09;型&#xff1a;若函数同时满足以下条件&#xff1a; ①&#xff1a;当时&…

Qt官方下载地址

1. 最新版本 Qt官方最新版本下载地址&#xff1a;https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图&#xff1a; 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装&#xff0c;请转至此链接进行下载&#xff1a;https://download.qt.i…

怎么用NodeJS脚本对接TTS播报音响

怎么用NodeJS脚本对接TTS播报音响呢&#xff1f; 本文描述了使用NodeJS脚本调用HTTP接口&#xff0c;对接TTS播报音响&#xff0c;。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能语音音柱|10W统软物联2智能语音壁挂音箱|款式…

计算机存储之图解机械硬盘

问&#xff1a;机械硬盘是如何工作的&#xff1f; 答&#xff1a;请看VCR 一、机械硬盘物理结构 1.1、盘片(platter) 视频中银白色的圆盘称为盘片&#xff0c;二进制数据就是存储在盘片上&#xff0c;盘片解剖后如下图所示&#xff1a; 一圈一圈的同心圆称为磁道&#xff08;…

HTML前端从零开始

第一天 HTML部分 什么是HTML HTML&#xff08;Hypertext Markup Language&#xff09;超文本标记语言。HTML是万维网的基石。 超&#xff1a; 超字第一层意义是指最重要的标签&#xff0c;超链接标签 超越文本的意思 HTML的发展历程 HTML1990年出现&#xff0c;web之父…

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…