数据库中的表都有哪些 作用有什么

数据库中的表都有哪些 作用有什么,第1张

ws注册表是帮助Windows控制硬件、软件、用户环境和Windows界面的一套数据文件,注册表包含在Windows目录下两个文件systemdat和userdat里,还有它们的备份systemda0和userda0。通过Windows目录下的regeditexe程序可以存取注册表数据库。在以前,在windows的更早版本(在Win95以前),这些功能是靠winini,systemini和其他和应用程序有关联的ini文件来实现的

在windows *** 作系统家族中,systemini和winini这两个文件包含了 *** 作系统所有的控制功能和应用程序的信息,systemini管理计算机硬件而winini管理桌面和应用程序。所有驱动、字体、设置和参数会保存在ini文件中,任何新程序都会被记录在ini文件中。这些记录会在程序代码中被引用。因为受winini和systemini文件大小的限制,程序员添加辅助的INI文件以用来控制更多的应用程序。举例来说,微软的Excel有一个excelini文件,它包含着选项、设置、缺省参数和其他关系到Excel运行正常的信息。在systemini和winini中只需要指出excelini的路径和文件名即可。

早在Dos和Win3x的时代,大部分的应用程序都是采用了 ini 文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等。systemini和winini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好。随着应用程序的数量和复杂性越来越大,则需要在ini文件中添加更多的参数项。这样下来,在一个变化的环境中,在应用程序安装到系统中后,每个人都会更改ini文件。然而,没有一个人在删除应用程序后删除ini文件中的相关设置,所以systemini和winini这个两个文件会变的越来越大。每增加的内容会导致系统性能越来越慢。而且每次应用程序的升级都出现这样的难题:升级会增加更多的参数项但是从来不去掉旧的设置。而且还有一个明显的问题,一个ini文件的最大尺寸是64KB。为了解决这个问题,软件商自己开始支持自己的ini文件,然后指向特定的ini文件如winini和systemini文件。这样下来多个ini文件影响了系统正常的存取级别设置。如果一个应用程序的ini文件和WININI文件设置起冲突,究竟是谁的优先级更高呢?

注册表最初被设计为一个应用程序的数据文件相关参考文件,最后扩展成对于32位 *** 作系统和应用程序包括了所有功能下的东东。注册表是一套控制 *** 作系统外表和如何响应外来事件工作的文件。这些“事件”的范围从直接存取一个硬件设备到接口如何响应特定用户到应用程序如何运行等等。注册表因为它的目的和性质变的很复杂,它被设计为专门为32位应用程序工作,文件的大小被限制在大约40MB。利用一个功能强大的注册表数据库来统一集中地管理系统硬件设施,软件配置等信息,从而方便了管理,增强了系统的稳定性。最直观的一个实例就是,为什么windows下的不同用户可以拥有各自的个性化设置,如不同的墙纸,不同的桌面。这就是通过注册表来实现的。

由此可见,注册表(Registry)是Windows9x/Me/NT/2000 *** 作系统、硬件设备以及客户应用程序得以正常运行和保存设置的核心“数据库”;是一个巨大的树状分层的数据库。它记录了用户安装在机器上的软件和每个程序的相互关联关系;它包含了计算机的硬件配置,包括自动配置的即插即用的设备和已有的各种设备说明、状态属性以及各种状态信息和数据等。

二、注册表都做些什么?

注册表是为Windows NT和Windows95中所有32位硬件/驱动和32位应用程序设计的数据文件。16位驱动在Windows NT下无法工作,所以所有设备都通过注册表来控制,一般这些是通过BIOS来控制的。在Win9x下,16位驱动会继续以实模式方式设备工作,它们使用systemini来控制。16位应用程序会工作在NT或者Win9x 下,它们的程序仍然会参考winini和systemini文件获得信息和控制。

在没有注册表的情况下, *** 作系统不会获得必须的信息来运行和控制附属的设备和应用程序及正确响应用户的输入。

在系统中注册表是一个记录32位驱动的设置和位置的数据库。当 *** 作系统需要存取硬件设备,它使用驱动程序,甚至设备是一个BIOS支持的设备。无BIOS支持的设备安装时必须需要驱动,这个驱动是独立于 *** 作系统的,但是 *** 作系统需要知道从哪里找到它们,文件名、版本号、其他设置和信息,没有注册表对设备的记录,它们就不能被使用。

当一个用户准备运行一个应用程序,注册表提供应用程序信息给 *** 作系统,这样应用程序可以被找到,正确数据文件的位置被规定,其他设置也都可以被使用。

注册表保存关于缺省数据和辅助文件的位置信息、菜单、按钮条、窗口状态和其他可选项。它同样也保存了安装信息(比如说日期),安装软件的用户,软件版本号和日期,序列号等。根据安装软件的不同,它包括的信息也不同。

然而,一般来说,注册表控制所有32位应用程序和驱动,控制的方法是基于用户和计算机的,而不依赖于应用程序或驱动,每个注册表的参数项控制了一个用户的功能或者计算机功能。用户功能可能包括了桌面外观和用户目录。所以,计算机功能和安装的硬件和软件有关,对所以用户来说项都是公用的。

有些程序功能对用户有影响,有些时作用于计算机而不是为个人设置的,同样的,驱动可能是用户指定的,但在很多时候,它们在计算机中是通用的。

注册表控制用户模式的例子有:

★控制面板功能;

★桌面外观和图标;

★网络参数;

★浏览器功能性和特征。

这些功能中的某些是和用户无关的,有些是针对用户的。

计算机相关控制项基于计算机名,和登陆用户无关。控制类型的例子是安装一个应用程序,不管是哪个用户,程序的可用性和存取是不变的,然而,运行程序图标依赖于网络上登陆的用户。网络协议可用性和优先权基于计算机,但是当前连接和用户信息相关。

这里是在注册表中基与计算机控制条目的一些例子:

★存取控制;

★登陆确认;

★文件和打印机共享;

★网卡设置和协议;

★系统性能和虚拟内存设置。

没有了注册表,Win9x和Windows NT 就不太可能存在。它们实在太复杂了,以致于用过去的ini文件无法控制,它们的扩展能力需要几乎无限制的安装和使用应用程序,注册表实现了它。然而,注册表比ini文件更复杂,理解它如何工作,它做什么和如何用它来做是有效管理系统的关键。

在系统中注册表控制所有32位应用程序和它们的功能及多个应用程序的交互,比如复制和粘贴,它也控制所有的硬件和驱动程序。虽然多数可以通过控制面板来安装和设置,理解注册表仍是做Windows NT和Win9x系统管理基本常识。

概括起来,注册表中存放着各种参数,直接控制着 Windows 的启动、硬件驱动程序的装载以及一些 Windows 应用程序的运行,从而在整个系统中起着核心作用。它包括:

(1)软、硬件的有关配置和状态信息,注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据。

(2)联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性。

(3)性能记录和其它底层的系统状态信息,以及其它数据。

如果注册表受到了破坏,轻者使 Windows 的启动过程出现异常,重者可能会导致整个系统的完全瘫痪。因此正确地认识、使用,特别是及时备份以及有问题时恢复注册表,对Windows用户来说就显得非常重要。学会了注册表的知识以及相关应用,便能使你的电脑 *** 作更加得心应手!从而成为一位名副其实的电脑高手!

三、与注册表有关的术语:

①、注册表:是一个树状分层的数据库(如图1)。从物理上讲,它是Systemdat和Userdat两个文件;从逻辑上讲,它是用户在注册表编辑器中看到的配置数据。

②、HKEY :“根键”或“主键”,它的图标与资源管理器中文件夹的图标有点儿相像。Windows98将注册表分为六个部分,并称之为 HKEY_name,它意味着某一键的句柄。(图2)

③、key(键):它包含了附加的文件夹和一个或多个值。

④、subkey(子键):在某一个键(父键)下面出现的键(子键)。

⑤、branch(分支):代表一个特定的子键及其所包含的一切。一个分支可以从每个注册表的顶端开始,但通常用以说明一个键和其所有内容。

⑥、value entry(值项):带有一个名称和一个值的有序值。每个键都可包含任何数量的值项。每个值项均由三部分组成:名称,数据类型,数据。(如图3)

★ 名称:不包括反斜杠的字符、数字、代表符、空格的任意组合。同一键中不可有相同的名称。

★ 数据类型:包括字符串、二进制、双字三种。

字符串(REG_SZ):顾名思义,一串ASCII码字符。如“Hello World”,是一串文字或词组。在注册表中,字符串值一般用来表示文件的描述、硬件的标识等。通常它由字母和数字组成。注册表总是在引号内显示字符串。

二进制(REG_BINARY):如 F03D990000BC ,是没有长度限制的二进制数值,在注册表编辑器中,二进制数据以十六进制的方式显示出来。

双 字(REG_DWORD):从字面上理解应该是Double Word ,双字节值。由1-8个十六进制数据组成,我们可用以十六进制或十进制的方式来编辑。如 D1234567 。

★ 数据: 值项的具体值,它可以占用到64KB。

⑦、 Default(缺省值):每一个键至少包括一个值项,称为缺省值(Default),它总是一个字串。

四、注册表的内部组织结构及相互关系

计算机配置和缺省用户设置的注册表数据在Windows NT中被保存在下面这五个文件中:DEFAULT,SAM,SECURITY,SOFTWARE,SYSTEM,NTUSERDAT。而 Windows9x/Me/2000将所有注册表文件存入2个文件中:Systemdat和Userdat。它们是二进制文件,不能用文本编辑器查看。它们存在于Windows目录下,具有隐含、系统、只读属性。 Systemdat包含了计算机特定的配置数据,Userdat包含了用户特定的数据。Userdat文件的位置在以某个用户名登录时,其位于C:\Windows\profiles\用户名目录下,系统同时在C:\Windows目录下保留了一个缺省的Userdat文件,以备新用户使用。内部组织结构是一个类似于目录管理的树状分层的结构(如图1)。

WINDOWS的注册表有六大根键,相当于一个硬盘被分成了六个分区。

在“运行”对话框中输入RegEdit,然后单击“确定”按钮,则可以运行注册表编辑器。

图1左窗格显示的是注册表的根键,这样的根键共六个。这些根键都是大写的,并以HKEY_为前缀,这种命令约定是以Win32 API的Registry函数的关键字的符号变量为基础的。

虽然在注册表中,六个根键看上去处于一种并列的地位,彼此毫无关系。但事实上,HKEY_CLASSES_ROOT和HKEY_CURRENT_CONFIG中存放的信息都是HKEY_LOCAL_MACHINE中存放的信息的一部分,而HKEY_CURRENT_USER中存放的信息只是HKEY_USERS存放的信息的一部分。HKEY_LOCAL_MACHINE包括HKEY_CLASSES_ROOT和HKEY_CURRENT_USER中所有的信息。在每次系统启动后,系统就映射出HKEY_CURRENT_USER中的信息,使得用户可以查看和编辑其中的信息。

实际上,HKEY_LOCAL_MACHINE\SOFTWARE\Classes就是HKEY_CLASSES_ROOT,为了用户便于查看和编辑,系统专门把它作为一个根键。同理,HKEY_CURRENT_CONFIG\SY-STEM\Current Control就是HKEY_LOCAL_MACHINE\SYSTEM\Current Control。

HKEY_USERS中保存了默认用户和当前登录用户的用户信息。HKEY_CURRENT_USER中保存了当前登录用户的用户信息。

HKEY_DYN_DATA保存了系统运行时的动态数据,它反映出系统的当前状态,在每次运行时都是不一样的,即便是在同一台机器上。

根据上面的分析,注册表中的信息可以分为HKEY_LOCAL_MACHINE和HKEY_USERS两大类,这两大类的详细内容请看后面的介绍。

五、六大根键的作用

注册表采用“关键字”及其“键值”来描述登录项及其数据。所有的关键字都是以“HKEY”作为前缀开头。打个比喻来说,关键字更象Windows9X下的浏览器里的目录下的文件,每个文件都会有自己特有的内容和属性。我们可以在注册表编辑器下很方便地添加、修改、查询和删除注册表的每一个关键字。关键字可以分为两类:一类是由系统定义,一般叫做“预定义关键字”;另一类是由应用程序定义的,根据应用软件的不同,登录项也就不同。在注册表中,所有的数据都是通过一种树状结构以键和子键的方式组织起来,十分类似于目录结构。每个键都包含了一组特定的信息,每个键的键名都是 和它所包含的信息相关的。如果这个键包含子键,则在注册表编辑器窗口中代表这个键的文件夹的左边将有“+”符号,以表示在这个文件夹中有更多的内容。如果这个文件夹被用户打开了,那么这个“+”就会变成“-”。 下面我们对系统预定义的六大根键简单地介绍一下。

1HKEY_USERS

该根键保存了存放在本地计算机口令列表中的用户标识和密码列表,即用户设置。每个用户的预配置信息都存储在HKEY_USERS根键中。HKEY_USERS是远程计算机中访问的根键之一。其内容取决于计算机是否激活了用户配置文件,若未激活用户配置文件,则可以看到称为DEFAULT的单一子键,该子键包括和所有用户相关的各种设置,并且和\Windows下的USERDAT文件相配合。若激活了用户配置文件并且正确地执行了登录,则还有一个“用户名”的子键,该用户名为用户登录的名称。

2HKEY_CURRENT_USER

该根键包含本地工作站中存放的当前登录的用户信息,包括用户登录用户名和暂存的密码(注:此密码在输入时是隐藏的)。用户登录Windows 98时,其信息从HKEY_USERS中相应的项拷贝到HKEY_CURRENT_USER中。HKEY_CURRENT_USER下面有7个子关键字。其中除RemoteAccess”外,其余6个都为系统预定义。

AppEvents 这个子键里登记已注册的各种应用事件。

ControlPanel 它里面涉及到控制面板设置有关的内容。

InstallLocationsMRU windows安装路径的有关信息。

Keyboardlayout 关于键盘设置的信息。

Network 有关网络设置的信息。

RemoteAccess 安装IE 时建立的子关键字,包含该应用程序的有关信息。

Software 软件的有关信息。

3HKEY_CURRENT_CONFIG

该根键存放着定义当前用户桌面配置(如显示器等)的数据,最后使用的文档列表(MRU)和其他有关当前用户的Windows 98中文版的安装的信息。

4HKEY_CLASSES_ROOT

该键由多个子键组成,具体可分为两种:一种是已经注册的各类文件的扩展名,另一种是各种文件类型的有关信息。左栏中的子键就是各种已经注册的文件扩展名。 注册表内己经登记的文件扩展名中,有系统默认和应用程序自定义的扩展名。应用程序只有把自定义的扩展名在注册表中登记,系统才能识别和关联使用有关的文档,但只有经过注册的扩展名,系统才能自动关联。根据在Windows 98中文版中安装的应用程序的扩展名,该根键指明其文件类型的名称。

在第一次安装Windows 98中文版时,RTF(Rich Text Format)文件与写字板(WordPad)联系起来,但在以后安装了中文Word 60后,双击一个RTF文件时,将自动激活Word。存放在SYSTEMDAT中的HKEY_CLASSES_ROOT,将替代WININI文件中的[Extensions]小节中的设置项,它把应用程序与文件扩展名联系起来,它也替代了Windows 3x中的Regdat文件中的相似的设置项。

5HKEY_LOCAL_MACHINE

注册表的核心,计算机的各种硬件和软件的配置均存在于此。它包括以下八个部分:Config配置、Driver驱动程序、Enum即插即用、Hardware硬件、Network网络、Security安全、Software软件、System系统。每部分中又包括许多子键。该根键存放本地计算机硬件数据,此根键下的子关键字包括在SYSTEMDAT中,用来提供HKEY_LOCAL_MACHINE所需的信息,或者在远程计算机中可访问的一组键中。该根键中的许多子键与Systemini文件中设置项类似。

6HKEY_DYN_DATA

该根键存放了系统在运行时动态数据,此数据在每次显示时都是变化的,因此,此根键下的信息没有放在注册表中。

在Windows 10 *** 作系统中,依次选择开始|所有应用|Microsoft Office|Microsoft Access2010命令,便可以启动Access2010。žAccess数据库的窗口如右图。

除了Windows10窗口的常见组成,如标题栏、功能区、快速访问工具栏(位于功能区的旁边)、最大化按钮、最小化按钮、关闭按钮、滚动条和状态栏(位于窗口底部)等外,Access2010还有一些特殊的屏幕组成。

导航窗格可以帮助您组织数据库对象,并且是打开或更改数据库对象设计的主要方式,相当于Access2010以前的Access版本的数据库窗口。

可以最小化导航窗格,也可以把它隐藏,但是不可以在导航窗格前面打开数据库对象来把它遮挡。

启动Access 2010后,可以用选项卡工作区代替数据库窗口来显示数据库对象,为了便于日常的交互使用,采用选项卡式工作区将更加方便。

使用Access 2010创建的新数据库默认显示选项卡,使用早期版本创建的数据库在默认情况下,使用数据库窗口。

在Access 2010数据库中包含着多种对象,所有查看、输入和选取数据库中的信息都是通过数据库中的对象来完成的。例如,如果要在数据库中输入数据,则首先必须有一个用来存储数据的表对象,然后通过窗体对象来完成数据的输入;而要选择这个表中的某些信息,则通过查询对象来完成;如果要把输入到表中的数据打印成报表,则应该使用报表对象。

在Access 2010数据库中,一共有七种类型的对象,它们分别是:表、查询、窗体、报表、页、宏和模块。

表是用来存储数据的基本对象,它是数据库的资源中心,是数据库最基本的组件。

数据库的每一个表都包含有关某个主题的信息,一般来说,对于数据库中的所有数据,可按照不同的属性分别设计成不同性质的数据表,存放在各个表对象类型中。

表是由列和行组成的二维结构的表格。每一列中显示某种类型的信息,这列的最上方是列标题,用来描述这个列的信息类型,也叫做字段名,在字段名下面这个类型中具体内容的数据为字段值。在同一行中的所有字段值构成一条记录。也就是说,记录由具体的字段值构成,一个记录就是一条独立的信息。

查询对象是用来 *** 作数据库中的记录对象。利用它可以按照一定的条件或准则从几个表中筛选出需要 *** 作的字段,并可以把它们集中起来,形成动态数据集。用户可以浏览、查询、打印、甚至修改这个动态数据集中的数据。

通过查询,可以查找和检索满足指定条件的数据,包括几个表中的数据。也可以使用查询同时更新或删除几个记录,以及对数据执行预定义或自定义的计算。ž使用查询可以回答有关数据的特定问题,而这些问题通过直接查看表数据很难解决。可以使用查询筛选数据,执行数据计算和汇总数据,还可以使用查询自动执行许多数据管理任务,并在提交数据更改之前查看这些更改。

查询是对数据结果、数据 *** 作或者这两者的请求。可以使用查询回答简单问题,执行计算、合并不同表中的数据,甚至添加、更改或删除表数据。用于从表中检索数据或进行计算的查询叫做选择查询,用于添加、更改或删除数据的查询叫做 *** 作查询。

还可以使用查询为窗体或报表提供数据。在设计良好的数据库中,要使用窗体或报表显示的数据通常位于几个不同的表中,通过使用查询,可以在设计窗体或报表之前组合要使用的数据。

窗体是Access数据库对象中最具灵活性的一个对象,其数据源可以是表或查询。在窗体中可以显示数据表中的数据,可以把数据库中的表链接到窗体中,利用窗体作为输入、查看和编辑表中信息的界面。通过在窗体中输入按钮,可以控制数据库程序的执行过程。可以说,窗体是数据库与用户进行交互 *** 作的最好界面。ž可以使用窗体一次一行地轻松查看、输入和更改数据,也可以使用窗体执行其它 *** 作。例如,向另一个应用程序发送数据。窗体通常包含链接到表中基础字段的控件,当打开窗体时,Access会从其中的一个或几个表中检索数据,然后用创建窗体时所选择的布局显示数据。窗体一次只侧重于一条记录,它可以显示几个表中的字段,也可以显示和其它对象。窗体可以包含一个按钮,通过单击这个按钮,可以打印报表、打开其它对象或以其它方式自动执行任务。

利用报表对象可以把数据库中需要的数据提取出来进行分析、整理和计算,并把数据以格式化的方式发送到打印机。利用报表不仅可以创建计算字段,而且还可以对记录进行分组以便计算出各组数据的汇总等。在报表中,可以控制显示的字段、每个对象的大小和显示方式,还可以按照所需的方式来显示相比的内容。用户可以在一个表或查询的基础上来创建一个报表,也可以在几个表或查询的基础上来创建报表。报表具有特定的版面设置,并且可以使用图表的形式来显示数据信息。可以使用报表快速分析数据,或用某种印好的固定格式或其它格式呈现数据。

Access的宏对象是Access数据库对象的一个对象。宏是指几个 *** 作的集合,通过宏可以把几个 *** 作结合在一起,这在执行宏时就可以自动地执行几个 *** 作,从而实现执行 *** 作的自动化。

模块是把Visual Basic的声明和过程作为一个单元保存的集合,也就是程序的集合。设置模块对象的过程也就是使用VisualBasic编写程序的过程。

希望我能帮助你解疑释惑。

说明你的查询语句有问题。

查询是用来 *** 作数据库中的记录对象,利用它可以按照预先定义的不同条件从数据表或其它查询中筛选出需要 *** 作的字段,并可以把它们集中起来,形成动态数据集。用户可以浏览、查询、打印,甚至修改这个动态数据集中的数据。

通过查询,可以查找和检索满足指定条件的数据,包括几个表中的数据,也可以使用查询同时更新或删除几个记录,以及对数据执行预定义或自定义的计算。

使用查询可以回答有关数据的特定问题,而这些问题通过表很难解决。可以使用查询筛选数据、执行数据计算和汇总数据。可以使用查询自动执行许多数据管理任务,并在提交数据更改之前查看这些更改。

查询实际上也就是选取记录的条件。查询出来的数据也存储到一个临时的表中。用于从表中检索数据或者进行计算的查询称为选择查询,用于添加、更改或删除的查询叫做 *** 作查询。

m_pdatabasem_strFilter = "灯号='" + m_Lampcode +"'" ;

灯号如果是字段名的话,在SQL语句中应该带双引号,变成”灯号"=

m_pdatabasem_strFilter = "\"灯号\"='" + m_Lampcode +"'" ;

strSQL1Format("delete from Work where WID='"+%s+"'",WID);

strSQL2Format("delete from student where WID='"+%s+"'",WID);

数据库共有3种类型,为关系数据库、非关系型数据库和键值数据库。

1、关系数据库

MySQL、MariaDB(MySQL的代替品,英文维基百科从MySQL转向MariaDB)、Percona Server(MySQL的代替品·)、PostgreSQL、Microsoft Access、Microsoft SQL Server、Google Fusion Tables、FileMaker、Oracle数据库、Sybase、dBASE、Clipper、FoxPro、foshub。

几乎所有的数据库管理系统都配备了一个开放式数据库连接(ODBC)驱动程序,令各个数据库之间得以互相集成。

2、非关系型数据库(NoSQL)

BigTable(Google)、Cassandra、MongoDB、CouchDB。

3、键值(key-value)数据库

Apache Cassandra(为Facebook所使用):高度可扩展、Dynamo、LevelDB(Google)。

扩展资料:

数据库模型:对象模型、层次模型(轻量级数据访问协议)、网状模型(大型数据储存)、关系模型、面向对象模型、半结构化模型、平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)。

数据库的架构可以大致区分为三个概括层次:内层、概念层和外层。

参考资料来源:百度百科—数据库

你的意思是不是这样

客户基本资料:姓名,性别,年龄

客户A想加个所属行业在自己的资料里

但是客户B想加个婚姻情况在自己的资料里

如果是这样,就在客户基本信息变量里除了基本资料字段外,多加几个字段,保存值,然后再维护表里增加对这个字段的描述(维护表:用户id,第几个自定义字段,该字段的描述)

以上就是关于数据库中的表都有哪些 作用有什么全部的内容,包括:数据库中的表都有哪些 作用有什么、计算机Access数据库,会做的帮帮忙啊、mysql出错语法错误id int primary key auto_increment,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10146046.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存