转! 主键的使用

一、产生Guid的方法

1、SqlServer中使用系统自带的NEWID函数: select NEWID()

2、C#中,使用Guid类型的NewGuid方法:

      Guid gid;
              gid = Guid.NewGuid();
              Console.WriteLine(gid);
              Console.WriteLine(Guid.NewGuid());

二、Guid与int自动增加作主键的优缺点

int自动增字段的优点:占用空间小、无需开发人员干预、易读;

  缺点:效率低,数据导入导出的时候很痛苦。

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

业界主流倾向使用Guid作主键。因为主键一般不是给外人看的,而且现在硬盘空间越来越大,不在乎这一点空间。

========================================

优点是:
同 IDENTITY 列相比,uniqueidentifier 列可以通过 NewID() 函数提前得知新增加的行 ID,为应用程序的后续处理提供了很大方便。
便于数据库移植,其它数据库中并不一定具有 IDENTITY 列,而 Guid 列可以作为字符型列转换到其它数据库中,同时将应用程序中产生的 GUID 值存入数据库,它不会对原有数据带来影响。
便于数据库初始化,如果应用程序要加载一些初始数据, IDENTITY 列的处理方式就比较麻烦,而uniqueidentifier 列则无需任何处理,直接用 T-SQL 加载即可。
便于对某些对象或常量进行永久标识,如类的 ClassID,对象的实例标识,UDDI 中的联系人、服务接口、tModel标识定义等。

缺点是:
GUID 值较长,不容易记忆和输入,而且这个值是随机、无顺序的。
GUID 的值有 16 个字节,与其它那些诸如 4 字节的整数相比要相对大一些。这意味着如果在数据库中使用 uniqueidentifier 键,可能会带来两方面的消极影响:存储空间增大;索引时间较慢。

时间: 2024-08-06 20:07:00

转! 主键的使用的相关文章

主键类型定义错了调试了半天

package com.itheima.demo1; import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table; @Entity@Table(name="u_user")public class User

2 column数据构成主键的表转化为1 column为主键的表

问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93张三 德语 null李四 语文 74李四 数学 84李四 物理 94李四 英语 80想变成(得到如下结果): 姓名 语文 数学 物理 英语 德语---- ---- ---- ----李四 74   84   94  ? 60张三 74   83   93  80 ? 这里name和course确定唯一一条记录,作为主键. 转化后只有name作为主键,另一个主键的具体值被作字段,不难理解,一个横坐

MySQL主键删除/添加

2修改数据库和表的字符集alter database maildb default character set utf8;//修改数据库的字符集alter table mailtable default character set utf8;//修改表的字符集如果您想要把表默认的字符集和所有字符列(CHAR, VARCHAR, TEXT)改为新的字符集,应使用如下语句:ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;警告:前面

Hibernate之:各种主键生成策略与配置详解

1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主键的setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免. <id name="id" column="id"> <generator class="assigned" /> </id&g

Chapter 1. 数据库概述、主键、外键

数据库 database: 存储数据的仓库,用表来分类数据 特点:海量存储:查找速度快:并发性问题的控制:安全性:数据完整性(保存在数据库中的数据是正确的真实的) 数据库软件:DBSM   database management system 常见数据库软件:MySQL  MSSQL server  Oracle  Access SQL:Structured Query Language 结构化查询语言   特点:语言简洁.易学易用. SQL Server:是一种基于网络的大型数据库软件.主要用

MyBatis+MySQL 返回插入的主键ID

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us

MyBatis insert操作返回主键

在写毕业设计的时候总是发现有一些小的细节问题,比如说...... MyBatis insert操作后怎么返回主键? 原来不懂的时候是调用一个select语句,将刚刚insert的对象再传入进去查出主键,但是这么写主键就没有意义了,什么都可以放到数据库里面去查. 在说,这样也会引起很多其他的问题.比如说你要查一下post表,在你不知道post_id的情况下你利用了post_name去查询post对象. 万一post_name有重复的呢?怎么办?所以有了这篇博客. 网上有很多大神写了很多mybati

Hibernate的主键生成策略的介绍

Hibernate主键的生成策略: 就是在配置文件中class中的配置项 <id name="id" column="id"> <generator class="increment"/> </id> native:适用于代理主键,代理主键就是没有业务含义的主键,通常用id表示,根据底层数据库对自动生成标识符的能力来选择identity.sequence.hilo identify:适用于代理主键,有底层数据库

mybatis+MySQL UUID主键生成策略

<insert id="insert" parameterType="com.gzwb.wbspm.model.SpmInvoice" > <selectKey keyProperty="invoiceId" //主键列名 resultType="string" //主键类型 order="BEFORE" //执行insert语句之前先得到主键> SELECT REPLACE(UUI

mybatis分页和主键生成

oracle 使用 mybatis的时候,主键自动生成: <insert id="createBigOrder" parameterType="BigOrder" useGeneratedKeys="true" keyProperty="id"> <selectKey resultType="int" order="BEFORE" keyProperty="i