In the last episode (Nov 07), Jeremy Zawodny said: > > In Oracle for example, a ROWID is the unique address of a row in > > the database. Every row, unique key or not has a unique address. Is > > there such a thing in MySQL? > > No. If there was it'd be documented. But at least with MyISAM > tables, MySQL cannot guarantee the "address" (or row number) of a > row. An ALTER/REPAIR/OPTIMIZE may reorder the rows.
A ROWID is actually a packed representation of datafile, segment, block and row, so anything that rebuilds a table in Oracle changes ROWIDs too. They're not meant to be a permanent pointer. MySQL could probably do the same thing by returning a 4 or 8-byte offset into the .MYI file for MyISAM tables. You would have to return the primary key for BDB tables, and I don't know enough about InnoDB's layout to guess. Basically, whatever pointer non-primary indexes use to locate records can be called a ROWID. > > ROWIDs are extremely useful for guaranteeing that you are > > manipulating the exact row that you think you are. > > So I've been told. They've got an O(1) access time, so they're also useful for remembering sets of rows in a multi-query operation; pull the ROWIDs once, then use "WHERE ROWID in ( rowidlist )" later. -- Dan Nelson [EMAIL PROTECTED] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]