Mysql,SqlServer,Oracle主键自动增长的设置

参考文献

http://blog.csdn.net/andyelvis/article/details/2446865

1、把主键定义为自动增长标识符类型

MySql

在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如:

create table customers(id int auto_increment primary key not null, name varchar(15));
insert into customers(name) values("name1"),("name2");
select id from customers;

以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值。最后查询表中id字段,查询结果为:

由此可见,一旦把id设为auto_increment类型,mysql数据库会自动按递增的方式为主键赋值。

Sql Server

在MS SQLServer中,如果把表的主键设为identity类型,数据库就会自动为主键赋值。例如:

create table customers(id int identity(1,1) primary key not null, name varchar(15));
insert into customers(name) values('name1'),('name2');
select id from customers;

注意:在sqlserver中字符串用单引号扩起来,而在mysql中可以使用双引号。

查询结果和mysql的一样。

由此可见,一旦把id设为identity类型,MS SQLServer数据库会自动按递增的方式为主键赋值。identity包含两个参数,第一个参数表示起始值,第二个参数表示增量。

PS:2012-7-13

以前经常会碰到这样的问题,当我们删除了一条自增长列为1的记录以后,再次插入的记录自增长列是2了。我们想在插入一条自增长列为1的记录是做不到的。今天跟同事讨论的时候发现可以通过设置SET IDENTITY_INSERT <table_name> ON;来取消自增长,等我们插入完数据以后在关闭这个功能。实验如下:

复制代码
use TESTDB2
--step1:创建表
create table customers(id int identity primary key not null,name varchar(15)
);--step2:执行插入操作
insert into customers(id,name) values(1,'name1');
--报错:An explicit value for the identity column in table 'customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.--step3:放开主键列的自增长
SET IDENTITY_INSERT customers ON;--step4:插入两条记录,主键分别为1和3。插入成功
insert into customers(id,name) values(1,'name1');
insert into customers(id,name) values(3,'name1');--step5:再次插入一个主键为2的记录。插入成功
insert into customers(id,name) values(2,'name1');--step6:插入重复主键,
--报错:Violation of PRIMARY KEY constraint 'PK__customer__3213E83F00551192'. Cannot insert duplicate key in object 'dbo.customers'.
insert into customers(id,name) values(3,'name1');--step7:关闭IDENTITY_INSERT
SET IDENTITY_INSERT customers OFF;
复制代码

2、从序列中获取自动增长的标识符

Oracle

在Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符,把它赋值给主键。例如一下语句创建了一个名为customer_id_seq的序列,这个序列的起始值为1,增量为2。

create sequence customer_id_seq increment by 2 start with 1

一旦定义了customer_id_seq序列,就可以访问序列的curval和nextval属性。

  • curval:返回序列的当前值
  • nextval:先增加序列的值,然后返回序列值

以下sql语句先创建了customers表,然后插入两条记录,在插入时设定了id和name字段的值,其中id字段的值来自于customer_id_seq序列。最后查询customers表中的id字段。

create table customers(id int primary key not null, name varchar(15));
insert into customers values(customer_id_seq.nextval, 'name1');
insert into customers values(customer_id_seq.nextval, 'name2');
select id from customers;

如果在oracle中执行以上语句,查询结果为:

通过触发器自动添加id字段

从上述插入语句可以发现,如果每次都要插入customer_id_seq.nextval的值会非常累赘与麻烦,因此可以考虑使用触发器来完成这一步工作。

创建触发器trg_customers

create or replace
trigger trg_customers before insert on customers for each row 
begin 
select CUSTOMER_ID_SEQ.nextval into :new.id from dual; 
end;

插入一条记录

insert into customers(name) values('test'); 

这是我们会发现这一条记录被插入到数据库中,并且id还是自增长的。

 

 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/06/08/2542277.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter 3 Phenomenon——19

His unfriendliness intimidated me. 他的不友好恐吓到了我。 My words came out with less severity than Id intended. 我说出来的言辞比我打算的要不严厉一些。 我说出的话远远没有达到我所想要的充满火药味的效果。 "You owe me an explanation," I reminded him…

Javascript 面向对象编程(一):封装

Javascript是一种基于对象&#xff08;object-based&#xff09;的语言&#xff0c;你遇到的所有东西几乎都是对象。但是&#xff0c;它又不是一种真正的面向对象编程&#xff08;OOP&#xff09;语言&#xff0c;因为它的语法中没有class&#xff08;类&#xff09;。 那么&am…

【ArcGIS Pro微课1000例】0016:ArcGIS Pro 2.8浮雕效果地图制图案例教程

ArcGIS Pro制作地图时可以制作出很多很炫的效果,比如地图阴影、地图晕渲效果、浮雕效果、三维效果等等。本实验讲解在ArcGIS Pro 2.8中制作浮雕效果地图,效果如下所示: 【参考阅读】:ArcGIS实验教程——实验四十四:ArcGIS地图浮雕效果制作完整案例教程 1. 加载矢量数据 …

用正则实现多行文本合并,从而保存为csv文件

有如下文本&#xff0c;想实现每三行合并为一行&#xff0c;最终生成csv文件 分数 人数 累计人数 661及以上 23 23 660 3 26 659 5 31 658 5 36 657 9 45 656 10 55 655 4 59 654 6 65 653 15 80查找项&#xff1a; ^(.) ^(.) ^(.)替换项&#xff1a; $1,$2,$3替换结果&…

聊一聊 C# 后台GC 到底是怎么回事?

一&#xff1a;背景 写这一篇的目的主要是因为.NET领域内几本关于阐述GC方面的书&#xff0c;都是纯理论&#xff0c;所以懂得人自然懂&#xff0c;不懂得人也没法亲自验证&#xff0c;这一篇我就用 windbg 源码 让大家眼见为实。二&#xff1a;为什么要引入后台GC 1. 后台GC到…

【BIM入门实战】Revit中的墙体层次以及常见问题解答

一、Revit墙体的层次 1. Revit墙体的层次如图 Revit绘制墙体时,要先选择定位线,可以选核心层中心线,也可以选墙中心线,当墙体为对称时,核心层中心线与墙中心线会重合。 2. 具体层次 1)结构[1]:必须在核心边界内 2)衬底[2]:其他材质基础的材料,如胶合板或石膏板 3…

Spring Boot 使用Redis

转载自&#xff1a;http://www.cnblogs.com/ityouknow/p/5748830.html Redis支持更丰富的数据结构&#xff0c;例如hashes, lists, sets等&#xff0c;同时支持数据持久化。除此之外&#xff0c;Redis还提供一些类数据库的特性&#xff0c;比如事务&#xff0c;HA&#xff0c;主…

工具链接

OmniGraffle Pro 7.0.2 Mac中文破解版 | 史蒂芬周的博客        http://www.sdifenzhou.com/omnigrafflepro702.html 转载于:https://www.cnblogs.com/wfwenchao/p/6393097.html

FlashCache初体验

FlashCache初体验 注意&#xff1a; 测试用的是CentOS6.5 内核版本2.6.32-431.el6.x86_64 步骤&#xff1a; 上传CentOS6.5做本地yum源&#xff0c;安装以下包。 yum install gcc yum install *kernel* yum install perl 将flashcache master打包下载至测试机上&#xff0c;可以…

用python将指定目录下的所有json文件合并成一个csv文件

#!/usr/bin/env python # -*- encoding: utf-8 -*-import sys import json import os import pandas as pd import csv""" 获取文件名列表 """ def list_file_names(folder):exist_files os.listdir(folder)file_list []for f in exist_files:…

【系统设计】分布式键值数据库

键值存储 ( key-value store )&#xff0c;也称为 K/V 存储或键值数据库&#xff0c;这是一种非关系型数据库。每个值都有一个唯一的 key 关联&#xff0c;也就是我们常说的 键值对。常见的键值存储有 Redis, Amazon DynamoDB&#xff0c;Microsoft Azure Cosmos DB&#xff0c…

keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)...

引自&#xff1a;http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文档&#xff1a;http://keras-cn.readthedocs.io/en/latest/ 官方文档&#xff1a;https://keras.io/ 文档主要是以keras2.0。 . . Keras系列&#xff1a; 1、keras系列︱Sequential与Mo…

【BIM入门实战】Revit建筑墙体:构造、包络、叠层图文详解

本文主要讲解Revit建筑墙体:构造、包络、叠层。 一、基本墙 第一步: 选择菜单栏的【建筑】选项卡中的【墙】下拉菜单→【属性】面板中切换至基本墙→点击属性面板中的【编辑类型】,弹出如下墙体对话框。 第二步: 选择【复制】按钮→重新进行编辑名称,命名为“外墙-1F-2…

win11 恢复win10开始菜单及任务栏

Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "Start_ShowClassicMode"dword:00000001 "TaskbarSi"dword:00000000将上述代码存为reg文件&#xff0c;双击导入注册表。 任务栏…

CentOS安装Tomcat

1. 下载Tomcat安装包&#xff1a; Tomcat官网 解压下载下来的tar.gz至任意目录下&#xff0c;执行命令&#xff1a; Java代码 tar -xzf apache-tomcat-7.0.56.tar.gz 解压后如图&#xff1a; 如果是在windows上&#xff0c;则直接解压zip包到任意目录&…

【BIM+GIS】ArcGIS Pro2.8如何打开Revit模型,BIM和GIS融合?

ArcGIS Pro2.8中,可以直接打开Revit模型(.rvt)项目文件,实现了从数据格式方面BIM与GIS的有机融合,具体操作如下所示: 1. Revit2018模型绘制 打开Revit2018软件,选择【建筑样板】,打开标高1楼层平面,新建一个简单的户型:包括四面墙体、2个门和一扇窗户,如下图所示。…

Edge 开发者沙龙|一小时精通Edge扩展开发

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun微软 Reactor 为帮助广开发者&#xff0c;技术爱好者&#xff0c;更好的学习 .NET Core, C#, Python&#xff0c;数据科学&#xff0c;机器学习&#xff0c;AI&#xff0c;区块链, IoT 等技术&#xff0c;将…

tomcat 开启远程debug

1、linux服务器上tomcat配置startup.sh 文件末尾添加&#xff08;不换行&#xff09;&#xff1a;declare -x CATALINA_OPTS"-server -Xdebug -Xnoagent -Djava.compilerNONE -Xrunjdwp:transportdt_socket,servery,suspendn,address9876"2、eclipse配置&#xff1a;…

公历还是很简单的

1 import java.util.*;2 class CalendarTest3 {4 /*先输出提示语句&#xff0c;并接受用户输入的年、月。5 根据用户输入的年&#xff0c;先判断是否是闰年。6 根据用户输入的年份来判断月的天数。7 用循环计算用户输入的年份距1900年1月1日的总天数。8 用…

【测绘程序设计】坐标反算神器V1.0(附C/C#/VB源程序)

【拓展阅读】:【测绘程序设计】坐标正算神器V1.0(附C/C#/VB源程序) 一、坐标反算原理 ​坐标反算:已知两点坐标,反求边长和方位角,称为坐标反算。 原理坐标系: 计算公式: 二、C#程序实现 1. 界面设计 2