主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键。一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键。

主键有两张选用策略,分为业务主键和逻辑主键。

业务主键是使用有业务意义的字段做主键,例如身份证号、银行账号等。

逻辑主键是使用没有任何业务意义的字段做主键,完全用来给程序看,是业务人员不会看的数据,推荐使用逻辑主键。

逻辑主键设置方法为将设计页面中列属性栏的表示规范切换为是即可,在输入记录时,逻辑主键字段可以不输入,系统自动匹配。当你删除了最后一条记录,它的主键为4,若新增一条记录,他会直接变为5而不是4。因为删除了的那条记录仍存在在系统表中,属于软删除。

外键(ForeignKey):外键表的某一列的值必须与主键表的主键的值一致,外键表就相当于引用了主键表的主键值。用于记录表和表的关联。一个主键可以具有多个外键。

主键选择和Guid(全球唯一标识符):SQLServer中两种常用的主键数据类型:int+标识符;或者是uniqueidentifier(Guid)。

用标识列实现字段自增可以避免并发的问题,在insert的时候不用指定主键的值,将字段的“是标识列”设置为“是”,一个表只能有一个标识列。

Guid算法是可以产生唯一标识的高效算法,他使用网卡MAC、地址、纳秒级时间、芯片ID码等算出来,保证每次生成的GUID永远不会重复,无论是同一个计算机上还是不同计算机,在公元3400年以前产生的GUID均不相同。SQLServer中生成GUID的函数的语句为newid(),而.NET中生成GUID的方法是:Guid.NewGuid(),返回值是Guid类型。

用int自增字段的优点是:占用空间小,无需开发人员干预,易读。缺点是:效率低,数据导入导出的时候很慢。

Guid的优点:效率高、数据导入导出方便。缺点是:占用空间大、不易读。

目前业界主流更倾向于使用Guid。

数据类型:

(var)char为ASCII编码,一个字符占一个字节,而当输入中文时,一个汉字占两个字节,比较适合于英文字符。而n(var)char采用的是Unicode编码,输入一个字符无论是英文还是中文都占两个字节,当输入中文时最好采用该字符串类型,因为可以匹配长度。text用于存储长文本信息,是一个指针(2G)。

2018.08.10

新手C#SQL Server使用记录2018.08.10的更多相关文章

  1. (转)新手C#SQL语句的学习2018.08.13

    1.创建数据库(create) CREATE DATABASE database-name 2.删除数据库(drop) drop database dbname 3.备份数据库 --- 创建 备份数据 ...

  2. oracle 、mysql、 sql server使用记录

    oracle .mysql. sql server使用记录 mysql常用命令: mysqld --启动mysql数据库 show databases; -- 查看数据库 use database; ...

  3. 新手C#ListView使用记录2018.08.03

    在使用C#的ListView时,感觉有一些部分需要自己注意. ListView1.Clear()这条指令在使用时,用于Click后在ListView中显示数据,应该放在输入数据的前面. 在ListVi ...

  4. 使用SQL Server Audit记录数据库变更

        最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC. ...

  5. SQL Server转发记录指针的坏味道

    什么是转发记录指针? 转发记录指针是堆表中特有的数据存储机制. 当你修改了某个数据页中的一行时,如果该行所在的数据页已经无法存放其修改后的行, SQL Server会把这行数据移动到一个新的数据页上面 ...

  6. SQL Server之记录筛选(top、ties、offset)汇总

    一.TOP 筛选 如果有 ORDER BY 子句,TOP 筛选将根据排序的结果返回指定的行数.如果没有 ORDER BY 子句,TOP 筛选将按照行的物理顺序返回指定的行数. 1. 返回指定数目的行 ...

  7. SQL Server 表,记录 死锁解决办法

    我自己的数据库表记录死锁后的 根据以下资料的 解决方案: 1. 先根据以下语句 查询 哪些表被 死锁,及 死锁的  spid SELECT request_session_id spid,OBJECT ...

  8. 【SQL Server 问题记录】A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.

    本文涉及的相关问题,如果你的问题或需求有与下面所述相似之处,请阅读本文 A network-related or instance-specific error occurred while esta ...

  9. 在SQL Server 2008上安装ArcSDE 10.1并实现远程连接

    先安装SQL Server 2008 R2 X64(SP2),创建数据库实例,安装客户端. 再安装ArcSDE 10.1,ArcGIS Desktop 10.1,一切顺利. 由于Desktop是32位 ...

随机推荐

  1. 知识点查缺补漏贴01-进程间通讯之mmap文件共享

    引文: 个人名言:“同一条河里淹死两次的人,是傻子,淹死三次及三次以上的人是超人”.经历过上次悲催的面试,决定沉下心来,好好的补充一下基础知识点.本文是这一系列第一篇:进程间通讯之mmap. 一.概念 ...

  2. java操作Excel之POI(1)

    一.新建工作簿.sheet.单元格 public static void main(String[] args) throws Exception { Workbook wb = new HSSFWo ...

  3. 关于DELL服务器如果采购散件,进行服务器升级的相关说明

    拿DELL服务器内存来说明这个情况,其他硬盘等等是 一样的: 1.DELL服务器的内存散件,从购买之日起,质保期是一年: 2.但是如果你把内存插到能兼容这个内存的服务器上去使用,请注意我的字眼,是能兼 ...

  4. MySQL 日期类型及默认设置 (除timestamp类型外,系统不支持其它时间类型字段设置默认值)

    MySQL 日期类型及默认设置 之前在用 MySQL 新建 table,创建日期类型列时遇到了一些问题,现在整理下来以供参考. MySQL 的日期类型如何设置当前时间为其默认值? 答:请使用 time ...

  5. 第3章 文件I/O(1)_标准C的I/O

    1. 标准C的I/O和FILE结构体 1.1 标准C的I/O库函数 (1)char *fgets( char *string, int n, FILE *stream );//从流中获取字符串 (2) ...

  6. C++ 无锁队列实现

    上源码 #ifndef __GLOBAL_LOCK_FREE_QUEUE_H__ #define __GLOBAL_LOCK_FREE_QUEUE_H__ #include <atomic> ...

  7. Python预编译语句防止SQL注入

    这个月太忙,最近不太太平,我的愿望是世界和平! ================================== 今天也在找python的预编译,早上写的sql是拼接来构成的.于是找了2篇文章,还 ...

  8. Python——连接操作数据库

    1.安装MySQL驱动程序.下载自动安装包,双击安装即可,非常简单. 2.连接MySQL,下面是Python示例代码. import MySQLdbconn=MySQLdb.connect(host= ...

  9. 好用的 FTP 软件之 FileZilla 技巧教程

    FTP 软件之 FileZilla教程 使用教程参考:http://163.26.161.1/~yilinteacher/wwwict/flash/FileZilla.swf (1)如何设置传输完成后 ...

  10. uva-301-枚举-组合

    题意:从A市到B市有n个站点,限制火车上搭乘的乘客数目,每个站点都从有一些乘车的订单,订单信息 从x到y,乘客m人,求解最大的收入是多少 最多7个站,22个订单 选取订单的时候没有顺序问题,所以不是全 ...