mysql中的_rowid

前言

Oracle數據庫的表中的每一行數據都有一個惟一的標識符,稱爲rowid,在Oracle內部一般就是使用它來訪問數據的。php

而在MySQL中也有一個相似的隱藏列_rowid來標記惟一的標識。可是須要注意_rowid並非一個真實存在的列,其本質是一個非空惟一列的別名。html

PS:本文是基於MySQL 5.7進行研究的mysql

_rowid究竟是什麼

在前文提到了_rowid並非一個真實存在的列,其本質是一個非空惟一列的別名。爲何會這麼說呢?sql

由於在某些狀況下_rowid是不存在的,其只存在於如下狀況:數據庫

  1. 當表中存在一個數字類型的單列主鍵時,_rowid其實就是指的是這個主鍵列
  2. 當表中不存在主鍵但存在一個數字類型非空惟一列時,_rowid其實就是指的是對應非空惟一列

須要注意如下狀況是不存在_rowidui

  1. 主鍵列或者非空惟一列的類型不是數字類型
  2. 主鍵是聯合主鍵
  3. 惟一列不是非空的。

詳情能夠參考MySQL官方文檔內容:code

If a table has a PRIMARY KEY or UNIQUE NOT NULL index that consists of a single column that has an integer type, you can use _rowid to refer to the indexed column in SELECT statements, as follows:htm

  • _rowid refers to the PRIMARY KEY column if there is a PRIMARY KEY consisting of a single integer column. If there is a PRIMARY KEY but it does not consist of a single integer column, _rowid cannot be used.
  • Otherwise, _rowid refers to the column in the first UNIQUE NOT NULL index if that index consists of a single integer column. If the first UNIQUE NOT NULL index does not consist of a single integer column, _rowid cannot be used.

參考資料

  1. 13.1.14 CREATE INDEX Syntax
  2. Re: Oracle ROWID equivalent in MySQL
相關文章
相關標籤/搜索