mysql identity sql_SQL Server中identity(自增)的用法详解

一、identity的基本用法

1.含义

identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错

2.语法

列名 数据类型 约束 identity(m,n)

m表示的是初始值,n表示的是每次自动增加的值

如果m和n的值都没有指定,默认为(1,1)

要么同时指定m和n的值,要么m和n都不指定,不能只写其中一个值,不然会出错

3.实例演示

不指定m和n的值

create table student1

(

sid int primary key identity,

sname nchar(8) not null,

ssex nchar(1)

)

insert into student1(sname,ssex) values ('张三','男');

insert into student1 values ('李四','女');--可以省略列名

insert into student1 values ('王五','女');

7eb6490d4cb441688ccfb165cdc0eb27.png

指定m和n的值

create table student2

(

sid int primary key identity(20,5),

sname nchar(8) not null,

ssex nchar(1)

)

insert into student2(sname,ssex) values ('张三','男');

insert into student2 values ('李四','女');--可以省略列名

insert into student2 values ('王五','女');

242ef0c24a2974a50b69f2bf9c0a92bf.png

4.删除一条记录接着插入

把sid为2的记录删除,继续插入,新插入的记录的sid不是2,而是3

create table student3

(

sid int primary key identity,

sname nchar(8) not null,

ssex nchar(1)

)

insert into student3(sname,ssex) values ('张三','男');

insert into student3 values ('李四','女');

delete from student3 where sid=2;--把sid为2的记录删除

insert into student3 values ('王五','女');

f2c57a907b9acd6a8ffac3be24f73a02.png

二、重新设置identity的值

1.语法

dbcc checkident(表名,reseed,n);

n+1表示的是表中identity字段的初始值(n的值可以为0)

也就是说:如果插入的是id为2的记录,则n的值是1

2.实例演示

create table student4

(

sid int primary key identity,

sname nchar(8) not null,

ssex nchar(1)

)

insert into student4(sname,ssex) values ('张三','男');

insert into student4 values ('李四','女');

delete from student4 where sid=2;--把sid为2的记录删除

dbcc checkident('student4',reseed,1);--把student4表中identity字段的初始值重新设置为1

insert into student4 values ('王五','女');

03007c316f5678324a3aaba78d06943a.png

三、向identity字段插入数据

1.语法

set identity_insert 表名 on;

insert into 表名(列名1,列名2,列名3,列名4) values (数据1,数据2,数据3,数据4);

set identity_insert 表名 off;

注意:插入数据时必须得指定identity修饰的字段的名字

2.实例演示

create table student5

(

sid int primary key identity(20,5),

sname nchar(8) not null,

ssex nchar(1)

)

insert into student5(sname,ssex) values ('张三','男');

insert into student5 values ('李四','女');

insert into student5 values ('王五','女');

set identity_insert student5 on;

/*

insert into student5 values ('黑六','男');--error

insert into student5 values (21,'黑六','男');--error

*/

insert into student5(sid,sname,ssex) values (21,'黑六','男');

set identity_insert student5 off;

/*

insert into student5 values (22,'赵七','女');--error

insert into student5(sid,sname,ssex) values (22,'赵七','女');--error

*/

insert into student5 values ('赵七','女');

c8ec38b0f3a3d063fe2ae4c807036284.png

补充知识:SQL Server 添加与删除主键约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。

主键约束操作包含了添加约束和删除约束,修改约束其实是添加约束或者删除约束。

添加主键约束比较 简单,但是删除一个没有约束名的主键约束则比较复杂,如果不是很不了解SQL Server的话则比很难实现该功能。

主键约束操作基本语句

如果是在新建表的时候添加主键约束比较简单,直接在列名后加入primary key即可,标准的添加主键约束的SQL脚本如下:

create table 表名 ( 字段名1 int not null, ...,

[constraint 约束名] primary key (字段名1, …)

)

其中约束名可选(建议选择,否则系统会分配随机临时名称)。这种方法可以任意添加多个或一个主键约束。

对已有表添加主键约束,与上面的脚本类似,如下:

alter table 表名 [add constraint 约束名] primary key(字段名1,... )

其中约束名与上相同,可选,建议指定。

SQL Server删除主键约束与MySQL不同,需要主键的约束名称才能删除,SQL Server标准的删除主键的脚本如下:

ALTER TABLE 表名DROP CONSTRAINT 约束名

当然该语句只能删除已知约束名的主键约束。

删除未知主键约束名的约束

根据之前的语句判断,这个约束名如果之前已经指定了那还好,否则此次就没有办法删除了,重点在于如何获取表中的主键约束名,既然可以根据约束名,那么就说明约束名是存储在数据库中的,当然是存储在系统表中的,运行下SELECT * FROM SYS.OBJECTS 语句看看查询结果,数据库中所有的约束都 在里面了,name项以PK大头的都是主键约束,看看它的type_desc是不是PRIMARY_KEY_CONSTRAINT或者type是不是 PK?(当然指定的名称没使用PK前缀另当别论)。

既然已知表名,而且也知道主键约束存储位置,关键就是二者如何关联起来,使得使用表名就可以查询到主键 约束名称,这其中沟通的桥梁便是parent_object_id。

这里给出的只是object_id,那么又如何找出表的object_id呢?再仔细 看看刚才的搜索结果,原来数据库中的相关信息全在里面,表,函数等都在里面,而且有自身的object_id。

接下来整合下上面的思路,根据表名查询表ID,根据表ID找到主键约束名称,采用级联方式查询就可以查询出来。可以构造如下的查询语句:

SELECT NAME from SYS.OBJECTS WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND

PARENT_OBJECT_ID = (SELECT OBJECT_ID

FROM SYS.OBJECTS WITH(NOLOCK) WHERE NAME = '表名')

然后NAME就是我们需要的约束名称了。然后在构造一个上面的删除约束的SQL语句执行就可以了,典型的SQL如下:

ALTER TABLE 表名 DROP CONSTRAINT NAME(约束名)

其他约束都可以采用这种方法进行删除。

以上这篇SQL Server中identity(自增)的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

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

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

相关文章

C# CSV文件读取(带换行单元格中内容处理)

//读取内容StringBuilder sbContent new StringBuilder();using (StreamReader sr new StreamReader(Application.StartupPath "/content.txt")){string line;while ((line sr.ReadLine()) ! null){//双引号开头,中间处理换行if (line.Length > 0 …

上传文件至数据库并下载

在FineReport中,会出现希望直接将txt、excel等文件整个保存在数据库中进行备份,并且希望通过FineReport制作报表将这些文件下载下来的情况。 上传:使用文件控件上传文件,以二进制流保存至数据库字段中(字段类型必须是用…

前端学习(2235):react的列表渲染

import React from react; import ReactDOM from react-dom;class Welcome extends React.Component {constructor(props) {super(props)this.state {list: [{title: "第一节课",content: 时间}, {title: "第一节课",content: 时间}, {title: "第三节…

URL参数解析方法

这几天遇到这样一个需求,需要在不同页面之前传递参数,一般我们都是通过URL来传递,如下 window.open(test.html?id123&name456) 然后在新窗口的时候我们再用window.location.search方法获取?后面的参数内容,但是拿到的内容是…

webview代码实例化_WebView常用类和基本方法详解

上一篇文章我们实现了一个简单的WebView,并且能够在程序中的不调用浏览器进行网页的展示和浏览,Android给WebView提供了一些子类,其子类下的方法能够让我们的WebView功能更加完善、性能更加的强大,接下来我们就一起来学习WebView常…

TFS2010 删除工作区(同时删除工作区中所有的目录映射)

删除工作区 tf workspace /delete 工作区名;创建的用户 /server:TFS服务器 例tf workspace /delete WHQ-PC;whq /server:http://192.168.0.12:8080/tfs/defaultcollection注:该操作会同时删除工作区中所有的目录映射,所有项目需要重新映射。

Android pop3与imap方式接收邮件(javamail)

需要下载3个jar包&#xff1a;mail.jar/ activation.jar/ additionnal.jar 1.pop3 /*** 以pop3方式读取邮件&#xff0c;此方法不能读取邮件是否为已读&#xff0c;已经通过测试* */private void getEmail() {List<Map<String, Object>> list new ArrayList…

前端学习(2236):react的列表渲染二

import React from react; import ReactDOM from react-dom;class Welcome extends React.Component {constructor(props) {super(props)this.state {list: [{title: "第一节课",content: 时间}, {title: "第一节课",content: 时间}, {title: "第三节…

win10 radmin远程不了_不用QQ也能电脑远程,win10这隐藏功能太良心了!真后悔发现太晚...

在工作中&#xff0c;我们难免会遇到一些棘手的电脑问题&#xff0c;自己搞定不了&#xff1f;那就找高手帮忙吧&#xff01;假若就在身旁还能帮上忙&#xff0c;但远在天边的又是鞭长莫及&#xff0c;这该如何是好呢&#xff1f;这时候大家都会想到QQ的远程功能。但经常用QQ远…

js 获取url参数(QueryString)

/// <summary>/// 获取url参数/// 王洪岐/// </summary>function QueryString(fieldName) {var urlString document.location.search;if (urlString ! null) {var typeQu fieldName "";var urlEnd urlString.indexOf(typeQu);if (urlEnd ! -1) {var …

【dubbo】消费者Consumer搭建

一.consumer搭建&#xff08;可以web/jar&#xff09; 1.新建Maven项目&#xff0c;groupId&#xff1a;com.dubbo.consumer.demo artifactId:demo projectName:dubboo-consumer-demo 2.新建class &#xff1a;com.dubbo.consumer.demo.DemoAction package com.dubbo.consumer.…

js 获取某iframe中document,浏览器兼容

/// <summary>/// 获取iframe中document&#xff0c;浏览器兼容/// 王洪岐/// id:iframe的ID/// </summary>function getIFrameDOM(id) {return document.getElementById(id).contentDocument || document.frames[id].document; }

c# mysql executenonquery_C#中ExecuteNonQuery()返回值注意点分析

本文实例讲述了C#中ExecuteNonQuery()返回值注意点。对于C#数据库程序设计有一定的借鉴价值。分享给大家供大家参考之用。具体分析如下&#xff1a;首先&#xff0c;在查询某个表中是否有数据的时候&#xff0c;我们通常用ExecuteNonQuery()&#xff0c;并通过判断值是否大于0来…

前端学习(2237):react实现疫情数据

import React from react; import ReactDOM from react-dom; import jsonData from ./code.jsonconsole.log(jsonData) let provinceObj {}/* let provinceObj{"广东省":{confirm:0,suspect:0,heal:0,deal:0}} */ jsonData.data.list.forEach((item, i) > {if (p…

数据库 数据库SQL语句五

集合运算union 并集&#xff08;两个集合如果有重复部分&#xff0c;那么只显示一次重复部分&#xff09; union all 并集&#xff08;两个集合如果有重复部分&#xff0c;那么重复部分显示两次&#xff09; intersect 交集 minus 差集--查询部门号是10和20号的员工信息 select…

SQLServer windows身份验证连接字符串

server.;databaseTest;Integrated SecurityTrue;

jdbc mysql 存储过程查询数据_JDBC连接(MySql)数据库步骤,以及查询、插入、删除、更新等十一个处理数据库信息的功能。...

主要内容&#xff1a;JDBC连接数据库步骤。一个简单详细的查询数据的例子。封装连接数据库&#xff0c;释放数据库连接方法。实现查询&#xff0c;插入&#xff0c;删除&#xff0c;更新等十一个处理数据库信息的功能。(包括事务处理&#xff0c;批量更新等)把十一个功能都放在…

vue-router之路由属性配置说明

minix 是个什么东西&#xff0c; 就是混合&#xff0c;把你混合给我 浅显表述就是 你说 &#xff1a; ‘我叫李四’&#xff0c; 我说 &#xff1a; ‘我叫张三’&#xff0c; 然后把你 混合给我&#xff0c; 就成了 我说 &#xff1a; ‘我叫张三我叫李四’&#xff0c; 所…

linux shell 用sed命令在文本的行尾或行首添加字符

from&#xff1a;http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间&#xff0c;而且大部分时间都耗在了sed命令上&#xff0c;今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种&…

lambda写法(多参数)

Lambda 表达式基本形式(input parameters) > expression< XMLNAMESPACE PREFIX "[default]" httpmsdnmicrosoftcommtps NS "http://msdn2.microsoft.com/mtps" />只有在 Lambda 有一个输入参数时&#xff0c;括号才是可选的&#xff1b;否则括号是…