『壹』 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開銷.
當執行插入操作後需要立即獲取插入的自增主鍵值,比如一次操作中保存一對多這種關系的數據,那麼就要使用插入後獲取自增主鍵值的方式配置.
『貳』 mysql設置主鍵的代碼是什麼
mysql設置主鍵的代碼是PRIMARY KEY (主鍵欄位)。
如:CREATE TABLE Customer (SID integer,Last_Name varchar(30),First_Name varchar(30),PRIMARY KEY (SID))。
主關鍵字(主鍵,primary key)是被挑選出來,作表的行的唯一標識的候選關鍵字。一個表只有一個主關鍵字。主關鍵字又可以稱為主鍵。
(2)用my編輯資料庫怎樣增加主鍵擴展閱讀:
永遠也不要更新主鍵。實際上,因為主鍵除了唯一地標識一行之外,再沒有其他的用途了,所以也就沒有理由去對它更新。如果主鍵需要更新,則說明主鍵應對用戶無意義的原則被違反了。
主鍵應當由計算機自動生成。如果由人來對主鍵的創建進行干預,就會使它帶有除了唯一標識一行以外的意義。一旦越過這個界限,就可能產生人為修改主鍵的動機,這樣,這種系統用來鏈接記錄行、管理記錄行的關鍵手段就會落入不了解資料庫設計的人的手中。
『叄』 MySql 設置ID主鍵自增,從0開始,請問怎麼設
就我所知這個好像無法實現,就算你自己編譯mysql恐怕也很難。因為last_insert_id()這個內置的函數返回最近一次插入的自增長ID,當沒有符合條件的ID時,它返回0,所以如果自增長從0開始的話,這個返回值就很難判定到底是插入了一條自增長ID為0的記錄還是沒有符合條件的記錄了。
『肆』 mysql 中如何給已存在的表中欄位增設置主鍵
首先你必須把name的條件改為not
null
alter
table
mytable_1
alter
column
name
char(1)
not
null
然後可以把原主鍵刪除,再重新增加主鍵。
alter
table
mytable_1
drop
constraint
PK_mytable_1(主鍵名字)
alter
table
mytable_1
add
constraint
PK_mytable_1
primary
key(id,name)
『伍』 如何用sql 添加主鍵
操作步驟如下:
1、首先我們在這個StudentNo列上用你的滑鼠右擊,然後選擇裡面的修改,進行點擊,彈出
界面。
『陸』 mybatis怎麼設置主鍵自增
設置主鍵自增,應該是設置具體的資料庫,與mybatis沒有什麼關系吧。
以mysql為例,假設主鍵為id
1.可以在創建表的時候設置主鍵
create table tb (
id bigint(20) primary key auto_increment
);
2.也可以在修改表結構的時候設置主鍵
alter table tb
modify id bigint(20) primary key auto_increment;
更多請參考http://blog.lifw.org/post/35110918
另外在自增的主鍵在mybatis中可以這么獲取
<insert id="..." useGeneratedKeys="true" keyProperty="id">
...
</insert>
『柒』 mysql 中如何給已存在的表中欄位增設置主鍵
1、打開navicat工具,連接上mysql伺服器,選擇完資料庫之後,選擇一個表右擊選擇設計表(這里為了演示測試,隨便選擇一個表即可)。