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

荐 2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引

程序员文章站 2022-04-10 19:33:32
文章目录2.3.2 创建表结构索引(INDEX)聚集索引非聚集索引2.3.3 查看表结构2.3.4 修改表结构2.4.1 向表中插入数据2.4.2 修改表中数据常用字符串函数2.3.2 创建表结构数据库中文件组、文件、表之间的关系:创建“完整”表的相关工作:(1)确定表名;(2)确定字段基本信息:包括字段名、字段类型、字段长度、是否允许为空值;(3)确定字段附加信息:默认值、标识符、计算列、主键、外键、CHECK约束条件等;(4)确定主件组;(5)确定索引;(6)确定触发器;(7)添...

2.3.2 创建表结构

数据库中文件组、文件、表之间的关系:
荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引
创建“完整”表的相关工作:

  • (1)确定表名;
  • (2)确定字段基本信息:包括字段名、字段类型、字段长度、是否允许为空值;
  • (3)确定字段附加信息:默认值、标识符、计算列、主键、外键、CHECK约束条件等;
  • (4)确定主件组;
  • (5)确定索引;
  • (6)确定触发器;
  • (7)添加数据。

方法:

  • 使用SQL Server Management Studio
    • 主外键的设置
    • 标识列(自动增长列)的添加
    • 默认值的添加
    • 计算列的添加
    • 索引的添加
  • 使用SQL的语句

使用SQL语句

  • 语法:
create table table_name
({column_name datatype
[not null|null]})
[on filegroup_name]

标识符的类型选择:

数据类型 优点 缺点
整型 简单,存储量少 分布式系统合并表时,内容肯能重复
GUID 不会重复 复杂(128位的16进制数字标识符),存储量大;不适合建立索引

默认值的内容:
1.该数据类型的一个常量。
2.该数据类型的一个函数:

数据类型 函数
日期时间 getdate()
整型 identity()
GUID newid()

计算列持久化的选择:

持久化 对计算结果进行保存 能否创建索引 查询效率

(默认)

(在查询时显示结果,不占用磁盘空间)
是(占据磁盘空间) 低(如果建立索引,效率比非持久化列高)

荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引
荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引
荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引

创建数据库和表的标准格式:

use master   
go
create database A
…………
go
use A
go
create table B
…………
go
…………

SQL中错误的类型:

  1. 语法错误
  2. 执行过程错误
  3. 执行结果错误
  4. 语法报错,但执行无措

索引(INDEX)

  • 定义:索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度
  • 内容:索引包含由表或视图中的一列或多列生成的键(键存储在一个B树中)。
  • 分类:
    • 聚集索引
    • 非聚集索引
    • 唯一索引
    • 包含性列索引
聚集索引

聚集索引:确定表中数据的物理顺序(存储顺序),根据数据行的键值在表或视图中排序和存储数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。如果表没有聚集索引,则其数据行存储在一个无序的堆结构中。

说明:

  1. 检索效率比其他索引高;
  2. 在插入、修改和删除数据时要花费较多的时间(数据和索引都要随之变动);
  3. 在表中建立主键后,系统会在主键字段自动添加聚集索引(也可以在其他字段上建立聚集索引)。
非聚集索引

非聚集索引:非聚集索引包含非聚集索引键值(并按内容进行排序,称为逻辑顺序),并且每个键值项都有指向包含该键值的数据行的指针
说明:

  1. 非聚集索引建立后表中数据的物理顺序不变;
  2. 查询效率不如聚集索引;
  3. 在插入、修改和删除数据时影响较小;
  4. 非聚集索引可以有多个;
  5. 只能手动创建

聚集索引和非聚集索引的对比⭐

索引类型 个数 索引对应字段的值 索引对应字段值的顺序 效率 建立方法
聚集索引 0或1个 可以唯一,也可以不唯一 升序或降序 检索效率较高,更新效率较低 建立主键后自动生成,或手动建立
非聚集索引 0、1或多个 可以唯一,也可以不唯一 与索引建立前的顺序一致 检索效率较低,更新效率较高 手动建立

索引使用的技巧和注意事项:

  1. 非索引列在查询时无法使用索引;
  2. 建立索引的列值重复率越低越好;
  3. 在外键所在列上建立索引;
  4. 聚集索引要建立在查询频率最高的列上;
  5. 非聚集索引并不是越多越好;
  6. 建立复合索引时,将查询频率最高的列放于最左边。
  7. 在创建非聚集索引之前,先创建聚集索引;在删除聚集索引之前,先删除非聚集索引;
  8. 索引碎片:
    ①产生原因:表中数据的长期频繁修改;
    ②影响:当索引碎片量过多时,降低查询性能;
    ③解决方法:重建索引(碎片量超过40%时)。

索引的功能总结:

  • 加快检索(不止是单一的索引项查询,还包括排序、分组、连接等查询)速度;⭐
  • 加快参照完整性的维护速度;
  • 约束索引所在列的数据取值:是否唯一;
  • 改变数据的存储顺序(聚集索引)。

2.3.3 查看表结构

※方法:

  • 使用SQL Server Management Studio
  • 使用SQL语句
    • 语法:sp_helo [表名]

荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引
※修改的风险(表中已经存放数据):

  • 宽度的减少     —— 数据部分丢失
  • 类型的变化     —— 数据整体丢失
  • 字段名的改变 —— 数据不一致、引用的SQL语句需修改
  • 字段的删除     —— 数据丢失、表间关系的破坏
  • 宽度的增加     —— 无风险
  • 字段的增加     —— 无风险
  • 非空→非空     —— 无风险

※使用SQL语句

  • 语法:
alter table table_name
{ {add 列名{列的描述}}
| {alter column 列名{列的描述}}
| {drop column 列名}
}

※修改对象名
sp_rename ‘原名’,‘姓名’ [,‘类型’]
■ 类型:

  • 和其他对象:省略
  • 数据库:database
  • 列:column
  • 索引:index

2.3.4 修改表结构

※方法:
■ 使用SQL Server Management Studio
■ 使用SQL语句

  • 语法:drop table table_name
  • 注意:不能删除系统表。

2.4.1 向表中插入数据

※方法:
■ 使用SQL Server Management Studio
■ 使用SQL语句

  • 语法:
    insert [into] 表名[(列名)]
    values(数据)

荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引
注意:

  1. 输入数据的顺序和数据类型必须与表中列的顺序和数据类型一致。
  2. 字符型和日期型数据需要用单引号引起来。
  3. 没有赋值的列必须是可以为空或能自动写入数据的列。
  4. 数据必须满足所在列的约束规则:
    (1)实体完整性规则
    (2)参照完整性规则
    (3)自己定义的完整性规则
  5. 尽量不要添加内容完全相同的行。
    荐
                                                        2.3 数据库表结构的创建和修改|数据库索引、默认值、计算列|聚集索引、非聚集索引

2.4.2 修改表中数据

※方法:
■ 使用SQL Server Management Studio
■ 使用SQL语句

  • 语法:
    update 表名
    set 列名1 = 表达式1,列名2 = 表达式2,……
    [where 条件]

常用字符串函数

  1. 求字符串长度
    len(字符串)
  2. 取子串
    (1)left(目标字符串,长度
    (2)right(目标字符串,长度
    (3)substring(目标字符串,起始位置,长度
  3. 字符串填充
    stuff(目标字符串,起始位置,替换长度,替换字符串
  4. 字符串连接 +
  5. 去除空格
    (1)ltrim(字符串
    (2)rtrim(字符串
    (3)ltrim(rtrim(字符串))
  6. 返回字符串中子串的开始位置
    charindex( 子串,字符串 [,开始查找位置]

本文地址:https://blog.csdn.net/diviner_s/article/details/107247212