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,一经查实,立即删除!

相关文章

上传文件至数据库并下载

在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: "第三节…

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

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

前端学习(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这隐藏功能太良心了!真后悔发现太晚...

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

前端学习(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…

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

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

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

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

linux 自动安装mysql_linux安装mysql教程

1.系统约定安装文件下载目录:/data/softwareMysql目录安装位置:/usr/local/mysql数据库保存位置:/data/mysql日志保存位置:/data/log/mysql执行如下命名:#mkdir /data/software#cd /data/software--下载安装包--建议&a…

密钥

【AES】 一种对称加密算法,DES的取代者。 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA 【代码】 代码比较多,有一部分非本文章内容代码,具体自己看吧。 [java] view plaincopy print?package…

mysql复制安全性_从MySQL复制功能中得到一举三得实惠

在MySQL数据库中,支持单项、异步复制。在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。如下图所示。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录…

自定义安装mysql linux_linux下 安装mysql 问题

展开全部因为32313133353236313431303231363533e4b893e5b19e31333365633934mysql程序在启动的时候 非常依赖my.cnf里面的配置,而my.cnf文件中的配置,在执行mysql初始化的时候就可以手动指定。如果mysql不是使用yum安装,而是将mysql安装到自定…

前端学习(2244):计算器显示问题

<!DOCTYPE html> <html><head><meta charset"utf-8" /><title>奥里给&#xff01;</title><style type"text/css">.a {height: 100px;width: 450px;border: 3px solid black;background-color: beige;font-size…

MySQL索引原理及慢查询优化

MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上看到诸…

C语言沉浸式刷题【C语言必刷题】

1.猜凶手 某地发生了一起谋杀案&#xff0c;警察通过排查确定杀人凶手必为四个嫌疑犯的一个&#xff0c;以下是4个嫌犯的供词。已知&#xff08;请编写代码找出凶手&#xff09; A说&#xff1a;不是我。 B说&#xff1a;是C。C说&#xff1a;是D。D说&#xff1a;C再胡说。 程…