## N 

## .NET 

See Also ADO.NET, ASP.net, Connector/NET, Mono, Visual Studio. 

## native C API 

 Synonym for libmysqlclient . See Also libmysql. 

## natural key 

 An indexed column, typically a primary key , where the values have some real-world significance. Usually advised against because: 

•If the value should ever change, there is potentially a lot of index maintenance to re-sort the clustered index and update the copies of the primary key value that are repeated in each secondary index . 

•Even seemingly stable values can change in unpredictable ways that are difficult to represent correctly in the database. For example, one country can change into two or several, making the original country code obsolete. Or, rules about unique values might have exceptions. For example, even if taxpayer IDs are intended to be unique to a single person, a database might have to handle records that violate that rule, such as in cases of identity theft. Taxpayer IDs and other sensitive ID numbers also make poor primary keys, because they may need to be secured, encrypted, and otherwise treated differently than other columns. 

Thus, it is typically better to use arbitrary numeric values to form a synthetic key , for example using an auto- increment  column. 

See Also auto-increment, clustered index, primary key, secondary index, synthetic key. 

## neighbor page 

 Any page  in the same extent  as a particular page. When a page is selected to be flushed , any neighbor pages that are dirty  are typically flushed as well, as an I/O optimization for traditional hard disks. In MySQL 5.6 and up, this behavior can be controlled by the configuration variable innodb_flush_neighbors ; you might turn that setting off for SSD drives, which do not have the same overhead for writing smaller batches of data at random locations. 

See Also dirty page, extent, flush, page. 

## next-key lock 

 A combination of a record lock  on the index record and a gap lock on the gap before the index record. See Also gap lock, locking, record lock. 

## non-locking read 

 A query  that does not use the SELECT ... FOR UPDATE  or SELECT ... LOCK IN SHARE MODE  clauses. The only kind of query allowed for global tables in a read-only transaction . The opposite of a locking read . See Section 15.7.2.3, “Consistent Nonlocking Reads” . 

SELECT ... FOR SHARE  replaces SELECT ... LOCK IN SHARE MODE  in MySQL 8.0.1, but LOCK IN SHARE MODE  remains available for backward compatibility. See Also locking read, query, read-only transaction. 

## non-repeatable read 

 The situation when a query retrieves data, and a later query within the same transaction  retrieves what should be the same data, but the queries return different results (changed by another transaction committing in the meantime). 

This kind of operation goes against the ACID  principle of database design. Within a transaction, data should be consistent, with predictable and stable relationships. 

