RANGE Partitioning partition is defined in order, from lowest to highest. This is a requirement of the  PARTITION BY RANGE syntax; you can think of it as being analogous to a series of  if ... elseif ...  statements in C or Java in this regard. It is easy to determine that a new row containing the data  (72, ’Mitchell’, ’Wilson’, ’1998-06-25’, NULL, 13)  is inserted into partition  p2 , but what happens when your chain adds a 21$^{st}$ store? Under this scheme, there is no rule that covers a row whose  store_id  is greater than 20, so an error results because the server does not know where to place it. You can keep this from occurring by using a “catchall” VALUES LESS THAN  clause in the  CREATE TABLE  statement that provides for all values greater than the highest value explicitly named: (As with the other examples in this chapter, we assume that the default storage engine is  InnoDB .) Another way to avoid an error when no matching value is found is to use the  IGNORE  keyword as part of the  INSERT  statement. For an example, see Section 24.2.2, “LIST Partitioning” . Also see Section 13.2.6, “INSERT Statement” , for general information about  IGNORE . MAXVALUE  represents an integer value that is always greater than the largest possible integer value (in mathematical language, it serves as a  least upper bound ). Now, any rows whose  store_id  column value is greater than or equal to 16 (the highest value defined) are stored in partition  p3 . At some point in the future—when the number of stores has increased to 25, 30, or more—you can use an  ALTER TABLE  statement to add new partitions for stores 21-25, 26-30, and so on (see Section 24.3, “Partition Management” , for details of how to do this). In much the same fashion, you could partition the table based on employee job codes—that is, based on ranges of  job_code  column values. For example—assuming that two-digit job codes are used for regular (in-store) workers, three-digit codes are used for office and support personnel, and four-digit codes are used for management positions—you could create the partitioned table using the following statement: 4662 CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT ’1970-01-01’, separated DATE NOT NULL DEFAULT ’9999-12-31’, job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY RANGE (job_code) ( PARTITION p0 VALUES LESS THAN (100), PARTITION p1 VALUES LESS THAN (1000), PARTITION p2 VALUES LESS THAN (10000) CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT ’1970-01-01’, separated DATE NOT NULL DEFAULT ’9999-12-31’, job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN MAXVALUE ); Note