美文网首页
SQL Server 操作数据表

SQL Server 操作数据表

作者: 御承扬 | 来源:发表于2019-05-19 20:43 被阅读0次

    操作数据表


    一、数据表基础

    1、基本数据类型

    1.1、Character 字符串:

    数据类型 描述 存储
    char(n) 固定长度的字符串。最多 8,000 个字符。 n
    varchar(n) 可变长度的字符串。最多 8,000 个字符。
    varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。
    text 可变长度的字符串。最多 2GB 字符数据。

    1.2、Unicode 字符串:

    数据类型 描述 存储
    nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。
    nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。
    nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。
    ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。

    1.3、Binary 类型:

    数据类型 描述 存储
    bit 允许 0、1 或 NULL
    binary(n) 固定长度的二进制数据。最多 8,000 字节。
    varbinary(n) 可变长度的二进制数据。最多 8,000 字节。
    varbinary(max) 可变长度的二进制数据。最多 2GB 字节。
    image 可变长度的二进制数据。最多 2GB。

    1.4、Number 类型:

    数据类型 描述 储存
    tinyint 允许从 0 到 255 的所有数字。 1 字节
    smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节
    int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节
    bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节
    decimal(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 5-17 字节
    numeric(p,s) 固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。 p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。 s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。 5-17 字节
    smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节
    money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节
    float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。 参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节
    real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

    1.5、Date 类型:

    数据类型 描述 存储
    datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes
    datetime(2) 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes
    smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes
    date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes
    time 仅存储时间。精度为 100 纳秒。 3-5 bytes
    datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 bytes
    timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。

    1.6、其他数据类型:

    数据类型 描述
    sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。
    uniqueidentifier 存储全局标识符 (GUID)。
    xml 存储 XML 格式化数据。最多 2GB。
    cursor 存储对用于数据库操作的指针的引用。
    table 存储结果集,供稍后处理。

    2、用户自定义数据类型

    • 在SQL Server Management Studio的对象资源浏览器中,数据库->选择指定数据库->可编程性->类型->用户自定义数据类型,选中“用户自定义数据类型”右键在弹出的菜单中选中“新建用户定义的数据类型”,在打开的窗口中设置用户自定义数据类型的名称、依据的系统数据类型以及是否允许NULL值等。

    • 在sql脚本中使用sp_addtype创建用户自定义数据类型,语法如下:

      sp_addtype[@typename=]type,[@phystype=]system_data_type[,[@nulltype=]'null_type'][,[@owner=]'owner_name']
      参数说明:
      [@typename=]type:指定待创建的用户自定义数据类型的名称,用户自定义数据类型名称必须遵守标识符的命名规则,而且在数据库唯一。
      [@phystype=]system_data_type:指定用户定义数据类型所依赖的系统数据类型。
      [@nulltype=]'null_type':指定用户定义数据类型的可空属性,即用户自定义数据类型处理空值的方式,取值为NULL、NOT NULL或NONULL。
      例:
      use TEST
      EXEC sp_addtype 'postalcode','char(10)','not null','null'在sql脚本中使用sp_addtype创建用户自定义数据类型,语法如下:
      
    • 根据需要,可以使用系统储存过程sp_droptype从systypes中删除别名数据类型

    3、数据表完整性

    • 表列中除了具有数据类型和大小属性之外,还有其他属性。其他属性是保证数据完整性和表的引用完整性的重要部分。
    • 数据完整性是指列中每个事件都有正确的数据值。引用完整性指示表之间的关系得到正确维护。

    3.1、空值与非空值

    • 允许空值(NULL):默认情况下,列允许空值,即允许用户在添加数据时省略该列的值。
    • 不允许空值(NOT NULL):不允许在没有指定列默认值的情况下省略该列的值。

    3.2默认值

    • 如果再插入行时没有指定值,那么默认值将指定列中所使用的值。默认值可以是任何取值为常量的对象。
    • 在CREATE TABLE中使用DEFAULT关键字创建默认定义,将常量表达式指派为列的默认值。这是标准方法。
    • 使用CREATE DEFAULT语句创建默认对象,然后使用sp_bindefault系统储存过程将它绑定到列上,这是一个向前兼容的功能。

    3.3 、特定标识属性(IDENTITY)

    • 数据表中如果某列被指派特定标识属性,系统将自动为表中插入的新行生成连续递增的编号,因为标识值通常唯一,因而标识列通常定义为主键。IDENTITY属性适用于INT、SMALLINT、TINYINT、DECIMAL(p,0)、UMERIC( p,0)数据类型的列。
    • 一个列不能同时具有NULL属性和IDENTITY属性,二者只能选其一

    3.4、约束

    • 约束是用来定义Microsoft SQL Server自动强制数据库完整性的方式。
    1、非空(NOT NULL):
    • 使用户必须在表中的指定列输入一个值。
    2、检查(check):
    • 用来指定一个布尔操作,限制输入到表中的值。
    3、唯一性(Unique)
    • 使用户的应用程序必须向列中输入一个唯一的值,值不能重复但可以为空。
    4、主键(Primary Key)
    • 建立一列或多列的组合以唯一标识表中的每一行。主键可以保证实体的完整性,一个表只能有一个主键,同时主键中的列不接受空值。
    5、外键(Foreign Key)
    • 用于建立和加强两个表数据之间的链接的一列或多列,当一个表中作为主键的一列被添加到另一个表中时,链接就形成,主要目的是用于控制储存在外键表中的数据。

    二、数据表创建和管理

    1、以界面方式方式操作数据表

    1.1、创建数据表

    • 在SQL Server Management Studio的对象资源浏览器中,数据库->选择指定数据库->表,选中“表”右键,在弹出的菜单中选择“新建表”命令,进入“添加表”对话框,在列表框里填写所需要的字段名以及对应的数据类型,最后填写表名保存。

    1.2、修改数据表

    • 在SQL Server Management Studio的对象资源浏览器中,数据库->选择指定数据库->表,选中“表”右键,在弹出的菜单中选择“设计”命令,进入“表设计”对话框,在该对话框对数据表进行修改后单击保存。

    1.3、删除数据表

    • 在SQL Server Management Studio的对象资源浏览器中,数据库->选择指定数据库->表展开,选择将要删除的数据表右键,在弹出的菜单中选择“删除”命令,在“删除对象”对话窗口点击“确定”。

    2、使用脚本操作数据表

    2.1、使用CREATE TABLE语句创建数据表

    • CREATE TABLE语句的基本语法如下:

      CREATE TABLE
      [database_name.[schema_name].|schema_name.].table_name
      ({<column_definition> | <computer_column_definition> | <column_set_definition>}[<table_constraint>][,...n])
      <column_definition>::=
      column_name<data_type>
      [FILESTRENM]
      [COLLATE collation_name]
      [NULL | NOT NULL]
      [
          [CONSTRAINT constrainT_name] DEFUALT constant_expression]
          | [IDENTITY [(seed,increment)][NOT FOR REPLICATION]
      ]
      [ROWGUIDCOL] [<column_constraint>[,...n]]
      [SPARSE]
      <computer_column_definition>::=
      column_name AS computer_column_expression
      [PERSISTED [NOT NULL]]
      [
          [CONSTRAINT constrainT_name]
          {PRIMARY KEY | UNIQUE}
            [CLUSTERED | NONCLUSTERED]
          [
              WITH FILLFACTOR = fillfactor
              | WITH(<index_option>[,...n])
          ]
          | [FOREIGN KEY]
            REFERENCES referenced_table_name [(ref_column)]
            [ON DELETE {NO ACTION | CASCADE}]
            [ON UPDATE {NO ACTION}]
            [NOT FOR REPLICATION]
          | CHECK [NOT FOR REPLICATION] (logical_expression)
          | ON {partition_scheme_name (partition_column_name) | filegroup | "default"}
      ]
      <column_set_definition>::=
      column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
      <table_constraint>::=
      [CONSTRAINT constraint_name]
      {
        {
            {PRIMARY KEY | UNIQUE}
                [CLUSTERED | NONCLUSTERED]
                    (column [ASC | DESC][,...n])
                      [
                          WITH FILLFACTOR = fillfactor
                          | WITH (<index_option>[,...n])
                      ]
                      [ON {partition_scheme_name (partition_column_name) | filegroup | "defualt"}]
                | FOREIGN KEY
                            (column [,...n])
                    REFERENCES referenced_table_name [(ref_column [,...n])]
                    [ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT}]
                    [ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT}]
                    [NOT FOR REPLICATION]
                | CHECK [NOT FOR REPLICATION] (logical_expression)
        }
      }
      
    参数 描述
    database_name 在其中创建表的数据库的名称。database_name必须指定现有数据库的名称,如果未指定,则database_name默认为当前数据库。
    schema_name 新表所属架构的名称。
    table_name 新表的名称,表名必须遵循标识符规则。除了本地临时表名(以单个数字符(#)为前缀的名称不能超过116个字符,table_name最多可以包含128个字符。
    <column_definition> 列定义
    column_name 表中列的名称,列名必须遵循标识符规则且在表中是唯一的。
    computer_column_expression 定义计算列的值的表达式
    PERSISTED 指定在sql server数据库引擎将在表中屋里储存计算值,而且,当计算列依赖的任何其他列发生更新时对这些计算值进行更新。
    ON {<partition_scheme> |filegroup|"default"} 指定储存表的分区架构或文件组。
    <table_constraint> 表约束
    CONSTRAINT 可选关键字,表示PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY或CHECK约束定义的开始。
    constraint_name 约束的名称,约束名称必须在表所属的架构中唯一
    NULL | NOT NULL 确定列中是否允许空值
    PRIMARY KEY 是通过唯一索引对给定的一列或多列强制实体完整性的约束。每个表只能创建一个PRIMARY KEY约束
    UNIQUE 一个约束,该约束通过唯一索引为一个或多个指定列提供实体完整性。一个表可以有多个UNIQUE约束
    CLUSTERED | NONCLUSTERED 指示为PRIMARY KEY或UNIQUE约束创建聚集索引还是非聚集索引。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认NONCLUSTERED。
    column 用括号括起来一列或多列,在表约束中表示这些列用在约束定义中
    [ASC | DESC] 指定加入到表约束中的一列或多列的排序顺序,默认为ASC
    WITH FILLFACTOR = fillfactor 指定数据库引擎储存索引数据时每个索引页的填充程度。用户指定的fillfactor值可以在1~100之间的任意值。如果未指定值,则默认为零。
    partition_scheme_name 分区架构的名称,该分区架构定义要将已分区表的分区映射到的文件组。数据库中必须存在该分区架构
    [partition_cloumn_name] 指定对已分区的表进行分区所依据的列
    FOREIGN KEY REFERENCES 为列中的数据提供引用完整性的约束。FOREIGN KEY约束要求列中的每个值在所引用的表中对应的被引用的列中都存在。
    (ref_column [,...n]) 是FOREIGN KEY约束所引用的表中的一列或多列
    ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT} 指定如果已创建表中的行具有引用关系,并且被引用行已从父表中删除,则对这些行采取的操作。默认值为NO ACTION
    NO ACTION 数据库引擎将引发错误,并回滚到对父表中相应行的删除操作。
    CASCADE 如果从父表中删除一行,则将从引用表中删除相应行
    SET NULL 如果父表对应的行被删除,则组成外键的所有值将设置为NULL,若要执行次约束,外键列必须可为空值
    SET DEFAULT 如果父表对应的行被删除,则组成外键的所有值将设置为默认值,若要执行次约束,所有外键列必须有默认定义。
    ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT} 指定在发生更改的表中,如果行引用关系且引用的行在父表中被更新,则对这些行采取什么操作,默认为NO ACTION
    CHECK 一个约束,该约束通过限制可输入一列或多列中的可能值来强制实现域完整性。计算列上的CHECK约束也必须标记为PERSISTED
    logical_expression 返回TRUE或FALSE的逻辑表达式,别名数据类型不能作为表达式的一部分
    NOT FOR REPLICATION 在CREATE TABLE语句中,可为IDENTITY属性、FOREGIN KEY约束和CHECK约束指定NOT FOR REPLICATION子句。
    • 例:

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

      结果:

    1.PNG

    2.2使用ALTER TABLE语句修改数据表结构

    • 其语法如下:

      ALTER TABLE[database_name.[schema_name].|schema_name.]table_name
      {
        ALTER COLUMN column_name
          {
            [type_schema_name.]type_name[({precision[,scale] | max | xml_schema_collection})]
            [COLLATE collation_name]
            [NULL | NOT NULL]
            |{ ADD | DROP}
            {ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE}
          }
          |[WITH {CHECK | NOCHECK}]
          | ADD
          {
            <column_definition> | <computer_column_definition> | <table_constraint> | <column_set_definition>
          }[,...n]
          | DROP
          {
            [CONSTRAINT]constraint_name
            [WITH(<drop_clustered_constraint_option>[,...n])]
            | COLUMN column_name
          }
      }[,...n]
      
      • ALTER TABLE函数参数说明

        参数 描述
        database_name 创建表时所在的数据库的名称
        schema_name 表所属的架构的名称
        table_name 要更改表的名称
        ALTER COLUMN 指定要更改的命名列
        column_name 要更改、添加或删除的列的名称
        [type_schema_name.]type_name 更改后的列的新数据类型或添加的列数据类型
        Precision 指定的数据类型的精度
        scale 指定的数据类型的小数位数
        max 仅应用于varchar、nvarchar和varbinary数据类型
        xml_schema_collection 仅应用于xml数据类型
        COLLATE<collation_name> 指定更改后列的新排序规则
        NULL | NOT NULL 指定列是否接受空值
        [{ADD | DROP} ROWGUIDCOL] 指定在指定列中添加或删除ROWGUIDCOL属性
        [{ADD | DROP}PERSISTED] 指定在指定列中添加或删除PERSISTED属性
        DORP NOT FOR REPLICATION 指定当复制代理执行插入操作时,标识列中的值将增加
        SPARSE 指示列为稀疏列。稀疏列已对NULL值进行了储存优化,不能将稀疏列指定为NOT NULL
        WITH CHECK | WITH NOCHECK 指定表中的数据是否用新添加的或重新启用FOREIGN KEY或CHECK约束进行验证
        ADD 指定添加一个或多个列定义、计算列定义或表约束
        DROP{[CONSTRAINT] constraint_name | COLUMN column_name} 指定从表中删除constraint_name或column_name,可以列出多个列或约束
        WITH<drop_clustered_constraint_option> 指定设置一个或多个删除聚集约束选项
        • 例子:

          USE TEST1
          ALTER TABLE Agent
          DROP COLUMN sex
          

    2.2、使用DROP TABLE删除数据表

    • 语法如下:

      DROP TABLE[database_name.[schema_name].| schema_name.]table_name[,...n][;]
      database_name:要在其中删除数据表的数据库的名称。
      schema_name:表所属架构的名称。
      table_name:要删除的表的名称。
      例:
      USE TEST1
      DROP TABLE num
      

    3、管理数据

    3.1、使用INSERT语句添加数据

    • INSERT语句可以实现向表中添加新记录的操作,该语句可以向表中插入一条新记录或者插入一个结果集。语法如下:

      INSERT[INTO]
      table_or_view_name
      VALUES
      (expression)[,...n]
      table_or_view_name:要接收数据的表或视图的名称
      VALUES:引入要插入的数据值的列表
      expression:一个常量、变量或表达式,表达式不能包含SELECT或EXECUTE语句。
      例:
      USE TEST1
      INSERT INTO Agent(ID,Agent_Name,Sex,Age)VALUES(1,'御承扬','男',22)
      或者:
      USE TEST
      INSERT INTO Tb_student VALUES(3163,'御承扬','男','1999-9-7',22,'数学院','信息与计算科学','广东省',1,NULL,'516500')
      
      • 使用右键选择要查看的数据表,在弹出的菜单中选中“选择前100行”的命令就可以查看数据表中的情况。

    3.2、使用 UPDATE语句修改数据

    • 语法如下:

      UPDATE table_or_view_name
      [FROM{<table_source>}[,...n]]
      SET
      {column_name={expression | DEFAULT | NULL}}
      [WHERE <search_condition>]
      
      参数 描述
      table_or_view_name 要更新的表或视图的名称。
      FROM<table_source> 指定表、视图或派生表用于为更新操作提供条件
      expression 返回单个值的变量、文字值、表达式或嵌套select语句(加括号)
      DEFAULT 指定用为列定义的默认值替换列中的现有值
      WHERE 指定条件来限制所更新的行。根据所用的WHERE子句的形式,现有两种更新形式。(1)搜索更新指定搜索条件来限定要更新的行。(2)定位更新实用CURRENT FOR子句确定游标,更新操作发生在游标的当前的位置
      <search_condition> 为要更新的行指定要满足的条件,搜索条件也可以是连接所基于的条件。对所搜索条件中可以包含的谓词数量没有限制
      • 例:

        指定某一列进行更新:
        USE TEST
        UPDATE Tb_student
        SET 年龄=年龄+2
        指定某一行进行更新:
        UPDATE Tb_student
        SET 年龄=年龄-2
        WHERE 学生编号=3161
        
        

    3.3、使用DELETE语句删除数据

    • 语法如下:

      DELETE
      [FROM<table_source>[,...n]]
      [WHERE{<serach_condition>}]
      
      
      参数 描述
      FROM 指定表、视图或派生表源用于为删除操作提供条件
      WHERE 指定条件来限制删除行数的条件。如果没有提供WHERE子句,则DELETE删除表中所有的行。根据所用的WHERE子句的形式,现有两种更新形式。(1)搜索更新指定搜索条件来限定要删除的行。(2)定位更新实用CURRENT FOR子句确定游标,更新操作发生在游标的当前的位置。这比使用WHERE serach_condition子句限定要删除的行的搜索DELETE语句更为精确。如果搜索条件不唯一标识单行,则搜索DELETE语句删除多行
      <serach_condition> 指定删除行的限定条件,对搜索条件中可以包含的谓词数量没有限制。
      • 例:

        USE TEST
        DELETE FROM Tb_student WHERE 学生编号=3162
        
        

    相关文章

      网友评论

        本文标题:SQL Server 操作数据表

        本文链接:https://www.haomeiwen.com/subject/rktczqtx.html