当前位置:首页 » 数据仓库 » mysql主键自增如何配置
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

mysql主键自增如何配置

发布时间: 2023-01-06 19:23:49

A. mysql怎么设置自动递增从1开始

如果希望在每次插入新记录时,自动地创建主键字段的值。可以在表中创建一个 auto-increment 字段。MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。默认地AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。

主键又称主关键字,主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。

B. mybatis mysql 主键自增加怎么配置

mybatis自增主键配置:


mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql 自增主键。主要说明下在mybatis中对于自增主键的配置。


1、不返回自增主键值:

如果考虑到插入数据的主键不作为其他表插入数据的外键使用,可以考虑这种方式。


Oracle Sequence 配置

<sqlid='TABLE_NAME'>TEST_USER</sql>
<sqlid='TABLE_SEQUENCE'>SEQ_TEST_USER_ID.nextval</sql>
<!--注意这里直接调用sequence的nextval函数-->
<insertid="insert"parameterType="User">
insertinto<includerefid="TABLE_NAME"/>(ID,NAME,AGE)
values(<includerefid="TABLE_SEQUENCE"/>,#{name},#{age})
</insert>


当插入语句如上配置时,那么针对如下语句

Useruser=newUser();
user.setName("test");
user.setAge(24);
userMapper.insert(user);
System.out.println(user.id);//user.id为空

user.id为空,也就是说如上的配置并不能在完成插入操作后将插入时的主键值存放到保存的对象中。


2、Mysql自增主键配置

由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,不指定插入ID字段即可。主键的自增交由Mysql来管理。

<sqlid='TABLE_NAME'>TEST_USER</sql>

<!--注意这里的插入SQL中是没有指明ID字段的!-->
<insertid="insert"parameterType="User">
insertinto<includerefid="TABLE_NAME"/>(NAME,AGE)
values(#{name},#{age})
</insert>


同样,针对Mysql如此配置myts,插入完成后user.id为空。


插入后获取自增主键值:


上述的情况能满足大部分情况,但有时候我们会遇到类似一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用mybatis提供的<selectKey />来单独配置针对自增逐渐的处理。


1、Oracle Sequence 配置:

<sqlid='TABLE_NAME'>TEST_USER</sql>
<sqlid='TABLE_SEQUENCE'>SEQ_TEST_USER_ID.nextval</sql>
<!--注意这里需要先查询自增主键值-->
<insertid="insert"parameterType="User">
<selectKeykeyProperty="id"resultType="int"order="BEFORE">
select<includerefid="TABLE_SEQUENCE"/>fromal
</selectKey>
insertinto<includerefid="TABLE_NAME"/>(ID,NAME,AGE)
values(#{id},#{name},#{age})
</insert>


当使用了<selectKey />后,在实际的插入操作时,mybatis会执行以下两句SQL:

selectSEQ_TEST_USER_ID.nextvalfromal;//语句1
insertinto(ID,NAME,AGE)values(?,?,?);//语句2

在执行插入语句2之前,会先执行语句1以获取当前的ID值,然后mybatis使用反射调用User对象的setId方法,将语句1查询出的值保存在User对象中,然后才执行语句2这样就保证了执行完插入后

Useruser=newUser();
user.setName("test");
user.setAge(24);
userMapper.insert(user);
System.out.println(user.id);//user.id不为空

user.id是有值的。


2、Mysql自增主键配置

针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键,

<sqlid='TABLE_NAME'>TEST_USER</sql>
<insertid="insert"useGeneratedKeys="true"keyProperty="id"parameterType="User">
insertinto<includerefid="TABLE_NAME"/>(NAME,AGE)
values(#{name},#{age})
</insert>

当然,由于Mysql的自增主键可以通过SQL语句

selectLAST_INSERT_ID();

来获取的。因此针对Mysql,Mybatis也可配置如下:

<sqlid='TABLE_NAME'>TEST_USER</sql>
<!--注意这里需要先查询自增主键值-->
<insertid="insert"parameterType="User">
<selectKeykeyProperty="id"resultType="int"order="BEFORE">
SELECTLAST_INSERT_ID()
</selectKey>
insertinto<includerefid="TABLE_NAME"/>(ID,NAME,AGE)
values(#{id},#{name},#{age})
</insert>

只不过该中配置需要额外的一条查询SQL


小结

当数据插入操作不关心插入后数据的主键(唯一标识),那么建议使用不返回自增主键值的方式来配置插入语句,这样可以避免额外的SQL开销.

当执行插入操作后需要立即获取插入的自增主键值,比如一次操作中保存一对多这种关系的数据,那么就要使用插入后获取自增主键值的方式配置.

C. mysql自动增长主键怎么设置

解决方案:

首先我们用MySQL自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为“XXX”的那项,实际上我写的代码并没有重复也会弹出此报错,下面我们看一下我自己的解决方案。

双击红框中选项,填好相应配置,进入后点击如图所示先创建数据库(此操作必须在MySQL已经启动情况下)左下角SCHEMAS底下就是你的数据库名字,先双击拉出TABLE,在TABLE上右键创建新表。

D. 如何设置mysql 主键自动增长

如果你数据库已经建立 用这个方法:

ALTER TABLE `test` CHANGE `id` `id` INT(11) NOT NULL AUTO_INCREMENT;

如果你数据库没有建立 就用CREATE :

如果你用的数据库软件 比如Navicat for MySQL。 那么在设计表选项里有设置自动增长的,打上勾

E. MySql 设置ID主键自增,从0开始,请问怎么设

就我所知这个好像无法实现,就算你自己编译mysql恐怕也很难。因为last_insert_id()这个内置的函数返回最近一次插入的自增长ID,当没有符合条件的ID时,它返回0,所以如果自增长从0开始的话,这个返回值就很难判定到底是插入了一条自增长ID为0的记录还是没有符合条件的记录了。

F. 如何将一个mysql中的表的主键设置为自增长

如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;
具体:
1.创建数据库
create table if not exists userInfo (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(50) NOT NULL,
password varchar(50) NOT NULL
);1234512345

2.插入数据记录
insert into userInfo values(1,'aaa','1212');11

当数据表中有自增长主键时,当用SQL插入语句中插入语句带有ID列值记录的时候;

如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值;
也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;
这种情况在进行插入的时候,两种解决方法:
①可以把id的值设置为null或者0,这样子mysql都会自己做处

G. mysql怎么设置自增主键

navicat里面设置自增

H. mysql如何设置自增主键

1.主键语法
①创建时:create table sc (
studentno int,
courseid int,
score int,
primary key (studentno) );
②修改时:ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名);
前提是原先没有设置主键。
2.外键语法
①创建时:create table sc (
studentno int,
courseid int,
score int,
foreign key (courseid) );
②修改时:
ALTER TABLE news_info[子表名] ADD CONSTRAINT FK_news_info_news_type[约束名] FOREIGN KEY (info_id)[子表列] REFERENCES news_type[主表名] (id)[主表列] ;
3.使用组合主键
如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式
①创建时:create table sc (
studentno int,
courseid int,
score int,
primary key (studentno,courseid) );
②修改时:alter table tb_name add primary key (字段1,字段2,字段3);
前提是原来表中没有设置主键,若原先已有主键则会报错。

I. mysql的设置主键自增

DROP TABLE IF EXISTS `messages`;
CREATE TABLE `messages` (
chatId int unsigned NOT NULL auto_increment,
toUserName varchar(50) DEFAULT NULL,
fromUserName` varchar(50) DEFAULT NULL,
message varchar(50) NOT NULL,
sendDate datetime DEFAULT NULL,
PRIMARY KEY (`chatId`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

J. 通过dbeaver创建mysql表时,如何设置主键和主键自增。不适用sql语句,仅通过dbeaver可视化操作来创建。

在创建表的时候可以设置,方法如下,用一下sql语句。

create table tableName(

id int identity(1,1) primary key,

data varchar(50))

解释:其中identity(1,1)代表自增,第一个1代表从1开始计数,第二个1代表每次增长1。

(10)mysql主键自增如何配置扩展阅读:

语言特点

1、一体化:SQL集数据定义DDL、数据操纵DML和数据控制DCL于一体,可以完成数据库中的全部工作。

2、使用方式灵活:它具有两种使用方式,即可以直接以命令方式交互使用;也可以嵌入使用,嵌入到C、C++、FORTRAN、COBOL、JAVA等主语言中使用。

3、非过程化:只提操作要求,不必描述操作步骤,也不需要导航。使用时只需要告诉计算机“做什么”,而不需要告诉它“怎么做”。

4、语言简洁,语法简单,好学好用:在ANSI标准中,只包含了94个英文单词,核心功能只用6个动词,语法接近英语口语。