mysql自增長聯合主鍵
今天因為業務需求設計了一個數據庫表,表裡麵包含type和id兩個欄位,我期望id是根據type來自增長的,也就是說對於不同的type,id都是從1開始自增長的,所以表示這樣建立的(資料庫用的mysql):
create table mytable(type int, id int auto_increment, ..., PRIMARY KEY (`type`,`id`))ENGINE=InnoDB;
但是mysql提示錯誤,錯誤資訊如下:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
網上查了下原因,應該是儲存引擎的影響。我建立表時用的儲存引擎是InnoDB,但是InnoDB似乎要求auto_increment型別的欄位在資料庫中必須擁有獨立的索引,不能是聯合索引,所以這樣建立表也可以了:
create table mytable(type int, id int auto_increment unique, ..., PRIMARY KEY (`type`,`id`))ENGINE=InnoDB;
這樣雖然表格建立起來了,但是業務上還沒有達到我的要求,以為這樣id雖然還是自增長的,但是它不是根據type的不同從1開始,而是根據記錄的增加一直增長下去。於是為了達到需求只有換了一種儲存引擎:create table mytable(type int, id int auto_increment, ..., PRIMARY KEY (`type`,`id`))ENGINE=MyIsAM;
然後執行如下語句
insert into mytable(type) values(1);
insert into mytable(type) values(1);
insert into mytable(type) values(2);
insert into mytable(type) values(2);
檢視資料可以發現裡面的資料如期望的那樣:
最後還有一點需要注意的是自增長的欄位不要放在索引的第一列,不然還是不會隨著type的改變重新開始自增長,例如如果這樣建立表:+------+----+ | type | id | +------+----+ | 1 | 1 | | 1 | 2 | | 2 | 1 | | 2 | 2 | +------+----+
create table mytable(type int, id int auto_increment, ..., PRIMARY KEY (`id`,`type`))ENGINE=MyIsAM;
這個時候再執行上面的插入語句之後結果如下:
+------+----+
| type | id |
+------+----+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
+------+----+
可以發現自增長的方式是受索引影響的。相關推薦
mysql自增長聯合主鍵
今天因為業務需求設計了一個數據庫表,表裡麵包含type和id兩個欄位,我期望id是根據type來自增長的,也就是說對於不同的type,id都是從1開始自增長的,所以表示這樣建立的(資料庫用的mysql): create table mytable(typ
Mybatis——【親測】mybatis使用註解方式插入資料後獲取自增長的主鍵值
自己踩過的坑,查了好久,終於發現解決方法。 步驟有三: 1. 寫SQL,但不要自己插入主鍵值 2. 配置@Options(useGeneratedKeys=true, keyProperty="物
第四天學習Mybatis總結——返回自增長的主鍵|非自增長的主鍵
1.返回自增長的主鍵 第一種方法: Student.java包括id,stuNum,stuName三個屬性 資料庫中student表包含三個屬性包括id stu_num,stu_name三列,id為主鍵,自增長。 StudentMapper.xml配置檔
MySQL聯合主鍵自增分別產生遞增id
比如員工表,要在部門內遞增生成編號 ,例如 t_user表 dept user_no_name --------
mysql自增長主鍵,刪除數據後,將主鍵順序重新排序
mar drop 排序 ews 字段 name key 博文 csdn 用數據庫的時候,難免會刪除數據,會發現設置的主鍵增長不是按照正常順序排列,中間有斷隔比如這樣。 以我這個情況舉例 處理方法的原理:刪除原有的自增ID,重新建立新的自增ID。 ALTER TABLE `n
SQL Server(MySql)中的聯合主鍵(聯合索引) 索引分析
判斷 reat 系統 lap creat insert 結果 問題 select 最近有人問到這個問題,之前也一直沒有深究聯合索引具體使用邏輯,查閱多篇文章,並經過測試,得出一些結論 測試環境:SQL Server 2008 R2 測試結果與MySql聯合索引查詢機制類似,
MySQL 使用自增ID主鍵和UUID 作為主鍵的優劣比較具體過程(從百萬到千萬表記錄測試)
popu tis pack 方案 表數據 lock 進行 args ios ?測試緣由? 一個開發同事做了一個框架。裏面主鍵是uuid。我跟他建議說mysql不要用uuid用自增主鍵,自增主鍵效率高,他說不一定高,我說inn
mysql的myBatis,主鍵自增設置
nbsp ast sql ati long type 方法 bat values 方法一: insert id="insert" parameterType="Person" useGeneratedKeys="true" keyProperty="id">
MySQL 使用自增ID主鍵和UUID 作為主鍵的優劣比較詳細過程(500W單表)
一個開發同事做了一個框架,裡面主鍵是uuid,我跟他建議說mysql不要用uuid用自增主鍵,自增主鍵效率高,他說不一定高,我說innodb的索引特性導致了自增id做主鍵是效率最好的,為了說服他,所以準備做一個詳細的測試。 作為網際網路公司,一定有使用者表,而且使用
資料庫--表的約束--空屬性,預設值,列描述,主鍵,唯一鍵,自增長,外來鍵等等
表的約束 空屬性及非空屬性 預設值 列描述 zerofill 主鍵 自增長 索引 唯一鍵 外來鍵 表的約束很多,這裡主要介
MySQL 設定、新增主鍵以及自增問題
1、學習MySQL時我遇到過建立成功後,未對相關表設定主鍵的問題。現在找到解決方法與大家一起分享。(不分大小寫)2、首先對於直接在建立表時設定主鍵 create table table_name(sno int primary key,sname varchar(15)
PK資料庫 聯合主鍵和自增主鍵
主鍵:主鍵是用來幹嘛的?一般來說是為了建立唯一標識,建立索引的。 主鍵的使用目的: a.為了保證資料查詢唯一; b.提高儲存效率和索引效率。 索引:如果表的讀操作少或者沒有,索引效率會高,如果表的寫操作較多或者大量,建立索引會慢。 主鍵的設定方法有3種: 一種是設定自增長主鍵
mysql聯合主鍵
-- 聯合主鍵就是多個表的主鍵聯合起來作為一個表的主鍵 -- --這個是摘抄的別人的 CREATE TABLE `products_description` ( `products_id` int(11) NOT NULL, `language_id` int(11
MySQL:聯合主鍵、索引
MySQL資料庫用聯合主鍵。用兩張表測試。 # 1分鐘資料表 CREATE TABLE md_1min2( `d_1min` DATETIME(3), `code` CHAR(16), `open` FLOAT, `high` FLOAT, `low` FLOAT, `c
mysql 聯合主鍵的作用
聯合主鍵就是用2個或2個以上的欄位組成主鍵。用這個主鍵包含的欄位作為主鍵,這個組合在資料表中是唯一,且加了主鍵索引。 可以這麼理解,比如,你的訂單表裡有很多欄位,一般情況只要有個訂單號bill_no做主鍵就可以了,但是,現在要求可能會有補 充訂單,使用相同的訂單號,那麼這時單
Mysql的聯合主鍵
mysql的聯合主鍵:用2個欄位(或者多個欄位,後面具體都是用2個欄位組合)來確定一條記錄,說明,這2個欄位都不是唯一的,2個欄位可以分別重複,這麼設定的好處,可以很直觀的看到某個重複欄位的記錄條數。 在mysql當中我們經常認為主鍵只能設定一個,那如果我們想設定兩個呢?如下圖: CREATE TABL
mysql插入自動增長的主鍵後如何獲得該主鍵的值
解決方案:使用函式 LAST_INSERT_ID()用法: 如檢視最新一次自增得到的id: select LAST_INSERT_ID();問題是解決了,但是會不會存在一個問題:我先使用自增主鍵的sql語句插入了值,然後就呼叫 LAST_INSERT_ID()這個函式,
MySQL聯合主鍵,複合主鍵區別&建立
聯合主鍵: 當兩個資料表形成的是多對多的關係,那麼需要通過兩個資料表的主鍵來組成聯合主鍵,就可以確定每個資料表的其中一條記錄了 例: 學生表:student create table student( id mediumint auto_increment co
Oracle聯合主鍵自增
新建表 CREATE TABLE SCHEDULES ( SCHEDULES_ID NUMBER(19) DEFAULT NULL NOT NULL, USER_ID NUMBER(19) DEFAULT NULL
mysql資料庫新增非主鍵自增欄位
我們直接向表中新增自增的非主鍵欄位時會報錯,錯誤資訊如下: 該資訊提示我們設為自增的欄位必須作為鍵(並非一定是主鍵)。 所以我們可以這樣做: (1)先新增欄位,設定欄位型別等基本屬性: alter table tbl_test add