欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据表

程序员文章站 2022-04-03 23:45:04
...

数据库的两个主要文件(mdf、ldf),一般情况下无法进行移动、删除、复制。

重要:

分离附加

分离数据库不是删除数据库,它只是将数据库从服务器中分离出去。下面介绍如何分离数据库“MRKJ”,具体操作步骤如下:
(1)启动SQL Server Management Studio,并连接到SQL Server 2012中的数据库,在“对象资源管理器”中展开“数据库”节点。
(2)鼠标右键单要分离的数据库“mrkj”,在弹出的快捷菜单中选择“任务”/“分离”命令,弹出“分离数据库”窗体。
数据表数据表

(3)在“分离数据库”窗体中,“删除连接”表示是否断开与指定数据库的连接;“更新统计信息”表示在分离数据库之前是否更新过时的优化统计信息。这里选择“删除连接”和“更新统计信息”选项。
(4)单击“确定”按钮,完成数据库的分离操作。

与分离对应的就是附加操作,它可以将分离的数据库重新附加到数据库中,也可以附加其它服务器组中分离的数据库,但在附加数据库时,必须指定主数据文件(MDF 文件)的名称和物理位置。
下面附加数据库“mrkj”,具体操作步骤如下:
(1)启动SQL Server Management Studio,并连接到SQL Server 2012中的数据库。
(2)鼠标右键单击数据库,在弹出的快捷菜单中选择“附加”命令,弹出“附加数据库”窗体,在“附加数据库”窗体中单击“添加”按钮,弹出“定位数据库文件”窗体,在该窗体中可以选择要附加数据库的位置。

数据表
(3)单击“确定”按钮,返回到“附加数据库”窗体。

数据表数据表

(4)单击“确定”按钮,完成数据库的附加操作。

备份还原

备份:

完整备份:“完整备份”包括特定数据库(或者一组特定的文件组或文件)中的所有数据,以及可以恢复这些数据的足够的日志。
差异备份:“差异备份”基于数据的最新完整备份。这称为差异的“基准”或者差异基准。差异基准是读/写数据的完整备份。差异备份仅包括自建立差异基准后发生更改的数据。通常,建立基准备份之后很短时间内执行的差异备份比完整备份的基准更小,创建速度也更快。因此,使用差异备份可以加快进行频繁备份的速度,从而降低数据丢失的风险。
文件备份:可以分别备份和还原数据库中的文件。使用文件备份能够只还原损坏的文件,而不用还原数据库的其余部分,从而加快了恢复速度。

“备份数据库”任务可执行不同类型的 SQL Server 数据库备份(完整备份、差异备份和文件备份)。
下面以备份数据库“MRKJ”为例介绍如何备份数据库。具体操作步骤如下。
(1)启动SQL Server Management Studio,并连接到SQL Server 2012中的数据库。在“对象资源管理器”中展开“数据库”节点。
(2)鼠标右键单击要备份的数据库“MRKJ”,在弹出的快捷菜单中选择“任务”/“备份”命令。

数据表
(3)进入“备份数据库”窗体。在“常规”选项卡中设置备份数据库的数据源和备份地址。

数据表

(4)单击“确定”按钮,返回到“备份数据库”窗体。单击“选项”选项卡,如图12.40所示。这里在“覆盖媒体”区域中选择“备份到现有媒体集”/“追加到现有备份集”选项,把备份文件追加到指定媒体上,同时保留以前的所有备份。

数据表

(5)单击“确定”按钮,系统提示备份成功的提示信息。单击“确定”按钮后即可完成数据库的完整备份。
数据表

恢复:

恢复模式旨在控制事务日志维护。有三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式。通常,数据库使用完整恢复模式或简单恢复模式。
(1)简单恢复:允许将数据库恢复到最新的备份。

(2)完全恢复:允许将数据库恢复到故障点状态。

(3)大容量日志记录恢复:允许大容量日志记录操作。

执行数据库备份的目的是便于进行数据恢复。如果发生机器错误、用户操作错误等,用户就可以对备份过的数据库进行恢复。
下面以恢复数据库“MRKJ”为例介绍如何恢复数据库。具体操作步骤如下。
(1)启动SQL Server Management Studio,并连接到SQL Server 2012中的数据库。在“对象资源管理器”中展开“数据库”节点。
(2)鼠标右键单击要恢复的数据库“MRKJ”,在弹出的快捷菜单中选择“任务”/“还原”/“数据库”命令。
数据表
(3)进入“还原数据库”对话框,在该对话框的“常规”选项卡中设置还原的目标和源数据库,在该对话框中保留默认设置即可。

数据表

(4)单击“选项”选项卡,设置还原操作时采用的形式以及恢复完成后的状态。如图12.44所示。这里在“还原选项”区域中选择“覆盖现有数据库”复选框,以便在恢复时覆盖现有数据库及其相关文件。
数据表
(5)单击“确定”按钮,系统提示还原成功的提示信息。单击“确定”按钮后即可完成数据库的还原操作。
数据表

创建表

USE db_2012 				--打开数据库
GO
CREATE TABLE [dbo].[mingri](		--创建表	
	[ID] [int] NOT NULL,		--字段ID,int型,不能为空
	[Name] [varchar](50) ,		--Name字段,varchar类型
	[Age] [int]			--Age字段 int类型		
)

约束

什么是约束?
数据库—由若干张数据表组成(理解为一个类库)
数据表—由行和列组成的一个二维表(理解为一个类)
列—字段(理解为表中对象的一个属性)
行—理解为表中的一个对象
约束是数据库中保证数据完整性的方法
1.实体完整性
例如:每个表中有一个必须要指定的字段
2.区域完整性
针对表中的某个字段进行特殊化限制
3.参照完整性
表与表之间的一种特殊化关联限制

约束类型(6种)

1.主键约束(Primary KEY)

确定表中的标识列,(主键字段不能为空,必须唯一)
标识:确定一个对象的唯一表现

①约束唯一标识数据库表中的每条记录
②主键必须包含唯一的值
③主键列不能为空
④每个表都应该有个主键,但只能有一个主键

2.外键约束(Foreign key)

确定表与表之间的联系方式,一般情况下通过从表的标识列进行确定
主表:给哪张表添加约束哪张表就是主表,辅助表为从表

①一个表中的foreign key 指向另一个表的primary key
​ ②foreign key约束用于预防破坏表之间连接的动作
​ ③foreign key约束也能防止非法数据插入外键列,因为它必须是指向的那个表的值之一
​ ④语法:

	1.foreign key key (column_name) references 主表名(主键列名)     创建column_name为主表名的外键
3.唯一约束(unique)

确定这个字段中的数据必须是唯一

①约束唯一标识数据库表中的每条记录
②unique和primary key都为数据提供了唯一性约束
③primary key 拥有自动定义的Unique约束
④注意:每个表中只能有一个primary key约束,但是可以有多个Unique约束

4.非空约束(not null)

确定这个字段中的数据必须不能为空

5.检查约束(CHECK)

设置这个字段中的数据的特性

①check约束用于限制列中的值的范围
②如果对个单个列做check约束,那么该列只可以输入特定数值
③如果一个表定义check约束,那么此约束会在特定的列对值进行限制

6.默认约束(default)

​ ①default约束用于向列中插入默认值
​ ②如果没有规定其他的值,那么会将默认值添加到所有的新记录中
​ ③语法:
1.name varchar(10) default ‘张三’ name默认插入张三的名字
​ 2.systime date default gatedate() 插入时间的默认值 getetime()函数为时间的默认值
​ 3.alter table table_name add 列名 set default ‘数值’ 向已有列名中插入默认值
​ 4.alter table table_name drop constraint 约束名 删除默认约束

USE DB_InLettStudent04
  GO
  --添加非空约束
  ALTER TABLE StudentInfor
  ALTER COLUMN ID INT NOT NULL
  GO
  --添加主键约束
  ALTER TABLE StudentInfor
  ADD CONSTRAINT PK_ID
  PRIMARY KEY (ID)
  GO
  --添加唯一约束
  ALTER TABLE StudentInfor
  ADD CONSTRAINT QU_NAME
  UNIQUE ([NAME])
  GO
  --添加检查约束
  ALTER TABLE StudentInfor
  ADD CONSTRAINT CK_AGE
  CHECK (AGE>0 AND AGE<200)
  
  ALTER TABLE StudentInfor
  ADD CONSTRAINT CK_SEX
  CHECK (SEX IN ('男','女'))
  --CHECK (SEX='男' OR SEX='女')
  
  --添加外键约束
    --外键约束FromID
    ALTER TABLE tb_MessageList
    ADD CONSTRAINT FK_FromID
    FOREIGN KEY(FromID) REFERENCES tb_USER(ID)
    
  --添加默认约束
  MessageTime DATETIME DEFAULT GetDate()【默认时间】

批量插入

--批量插入
  INSERT INTO StudentInfor
  SELECT '小明','男',20 UNION
  SELECT '小红','女',20 UNION
  SELECT '王五','男',20	
  
添加、查询、删除、修改
--添加数据
  INSERT INTO dbo.StudentInfor
  VALUES('张霞','女',22)
  INSERT INTO dbo.StudentInfor([NAME])
  VALUES('猪猪')
  INSERT INTO dbo.StudentInfor
  VALUES('林海','男',24)
  INSERT INTO dbo.StudentInfor
  VALUES('王晴','女',18)
  
  --查询一张表ID大于等于10001的信息
  SELECT * FROM dbo.StudentInfor WHERE ID>=10001
  --查询一张表ID等于10000的姓名,学号的信息
  SELECT [NAME],ID FROM dbo.StudentInfor WHERE ID=10000
  
  --删除信息
  DELETE dbo.StudentInfor WHERE [NAME]='林海'
  INSERT INTO dbo.StudentInfor
  --添加数据
  VALUES('张艺兴','男',28)
  --删除ID等于10000的信息
  DELETE StudentInfor WHERE ID=10000
  --添加数据
   INSERT INTO dbo.StudentInfor
  VALUES('戚哥','男',35)
  --修改数据
  UPDATE StudentInfor SET SEX='女'
查询一张表的所有信息
SELECT * FROM dbo.StudentInfor

SQLServer中char、varchar、nchar、nvarchar的区别:
(1) 定义:

char: 固定长度,存储ANSI字符,不足的补英文半角空格。

nchar: 固定长度,存储Unicode字符,不足的补英文半角空格

varchar: 可变长度,存储ANSI字符,根据数据长度自动变化。

nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化。

nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。

varchar[(n)]:长度为 n 个字节的可变长度且非 Unicode的字符数据。n 必须是一个介于 1 和 8,000之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。

注意: ANSI主要是以单字节来存储数据,一般适合英文。而我们常用的汉字需要用两个字节来存储,所以就要使用unicode的数据类型,不然读取出来的数据可能会乱码。

(2)区别:

  ①从存储方式上,nvarchar是按字符存储的,而 varchar是按字节存储的;

  ②从存储量上考虑, varchar比较节省空间,因为存储大小为字节的实际长度,而 nvarchar是双字节存储;

  ③在使用上,如果存储内容都是英文字符而没有汉字等其他语言符号,建议使用varchar;含有汉字的使用nvarchar,因为nvarchar是使用Unicode编码,即统一的字符编码标准,会减少乱码的出现几率;

④ 如果你做的项目可能涉及不同语言之间的转换,建议用nvarchar。

(3)优缺点:

Nvarchar优点:判断字符串的时候可以不需要考虑中英文两种字符的差别,可以避免程序中乱码的问题。

       缺点:存储英文字符会增大一倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的,效率没有varchar高。

(4)为什么要用nvarchar?

有n前缀的,n表示Unicode字符,即所有字符都占两个字节,nchar,nvarchar

字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

(5)有关var的简单介绍:

有var前缀的,表示是实际存储空间是变长的,varchar,nvarchar

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

(6)如何使用这些类型?

如果你肯定存储的数据长度,而且不包中文的,可以选择char类型。

如果肯定存储的数据长度,但可能包括中文,可以选择nchar类型。

如果不确定存储的数据长度,存储只有英文、数字的最好用varchar

如果不确定存储的数据长度,也有可能有中文,可以选择nvarchar类型,在SQL Server2005中也是比较常用的字符数据类型。

相关标签: 数据表