CREATE TABLE

Description

Create a new table.

Syntax

  1. > CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  2. (create_definition,...)
  3. [table_options]
  4. [partition_options]
  5. create_definition: {
  6. col_name column_definition
  7. | [CONSTRAINT [symbol]] PRIMARY KEY
  8. [index_type] (key_part,...)
  9. [index_option] ...
  10. | [CONSTRAINT [symbol]] FOREIGN KEY
  11. [index_name] (col_name,...)
  12. reference_definition
  13. }
  14. column_definition: {
  15. data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]
  16. [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
  17. [COMMENT 'string']
  18. [reference_definition]
  19. | data_type
  20. [[PRIMARY] KEY]
  21. [COMMENT 'string']
  22. [reference_definition]
  23. }
  24. reference_definition:
  25. REFERENCES tbl_name (key_part,...)
  26. [ON DELETE reference_option]
  27. [ON UPDATE reference_option]
  28. reference_option:
  29. RESTRICT | CASCADE | SET NULL | NO ACTION
  30. table_options:
  31. table_option [[,] table_option] ...
  32. table_option: {
  33. | AUTO_INCREMENT [=] value
  34. | COMMENT [=] 'string'
  35. | START TRANSACTION
  36. }
  37. partition_options:
  38. PARTITION BY
  39. { [LINEAR] HASH(expr)
  40. | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)}
  41. [PARTITIONS num]
  42. [(partition_definition [, partition_definition] ...)]
  43. partition_definition:
  44. PARTITION partition_name
  45. [VALUES
  46. {LESS THAN {(expr | value_list) | MAXVALUE}
  47. |
  48. IN (value_list)}]
  49. [COMMENT [=] 'string' ]

Explanations

Various parameters and options that can be used when creating a table, including table creation, column definition, constraints, options, and partitioning, are explained below:

  • CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name: This is the primary table syntax. The TEMPORARY keyword indicates creating a temporary table, IF NOT EXISTS ensures creation only if the table doesn’t exist, and tbl_name is the name of the table to be created.

  • (create_definition,...): This is the section for column definitions, used to define the table’s columns and their attributes.

  • [table_options]: This is for table-level options where you can set parameters like storage engine, character set, etc.

  • [partition_options]: This is used for partitioned tables and defining partitioning methods and keys.

The create_definition section is used to define attributes for each column, and it can contain the following:

  • col_name column_definition: This defines the column name and its attributes, including data type, whether it can be null, default value, etc.

  • [CONSTRAINT [symbol]] PRIMARY KEY: This defines a primary key constraint and can set a constraint name and the columns that make up the primary key.

  • [CONSTRAINT [symbol]] FOREIGN KEY: This defines a foreign key constraint and can set a constraint name, columns for the foreign key, and the referenced table.

The column_definition section is used to define attributes for specific columns and can include the following:

  • data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ]: This defines the data type of the column, whether it can be null, and its default value.

  • [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]: This sets options like auto-increment, uniqueness, and primary key constraint.

  • [COMMENT 'string']: This sets a comment for the column.

  • [reference_definition]: This is an optional reference definition used to define foreign key constraints.

The reference_definition section is used to define references for foreign keys and includes the following:

  • REFERENCES tbl_name (key_part,...): This specifies the referenced table and columns for the foreign key.

  • [ON DELETE reference_option]: This sets the action to be taken when a referenced row is deleted.

  • [ON UPDATE reference_option]: This sets the action to be taken when a referenced row is updated.

reference_option represents the options for foreign key actions, including RESTRICT, CASCADE, SET NULL, and NO ACTION.

The table_options section sets table-level options, including initial auto-increment value, table comments, etc.

The partition_options section defines options for partitioned tables, including partitioning methods, partition keys, and the number of partitions.

For more detailed syntax explanations, see the following content.

Temporary Tables

You can use the TEMPORARY keyword when creating a table. A TEMPORARY table is visible only within the current session, and is dropped automatically when the session is closed. This means that two different sessions can use the same temporary table name without conflicting with each other or with an existing non-TEMPORARY table of the same name. (The existing table is hidden until the temporary table is dropped.)

Dropping a database does automatically drop any TEMPORARY tables created within that database.

The creating session can perform any operation on the table, such as DROP TABLE, INSERT, UPDATE, or SELECT.

COMMENT

A comment for a column or a table can be specified with the COMMENT option.

  • Up to 1024 characters long. The comment is displayed by the SHOW CREATE TABLE and SHOW FULL COLUMNS statements. It is also shown in the COLUMN_COMMENT column of the INFORMATION_SCHEMA.COLUMNS table.

AUTO_INCREMENT

The initial AUTO_INCREMENT value for the table.

An integer column can have the additional attribute AUTO_INCREMENT. When you insert a value of NULL (recommended) or 0 into an indexed AUTO_INCREMENT column, the column is set to the next sequence value. Typically this is value+1, where the value is the largest value for the column currently in the table. AUTO_INCREMENT sequences begin with 1 default.

There can be only one AUTO_INCREMENT column per table, which must be indexed and cannot have a DEFAULT value. An AUTO_INCREMENT column works properly only if it contains only positive values. Inserting a negative number is regarded as inserting a very large positive number. This is done to avoid precision problems when numbers “wrap” over from positive to negative and also to ensure that you do not accidentally get an AUTO_INCREMENT column that contains 0.

You can use the AUTO_INCREMENT attribute to define the starting value of an auto-increment column. If you want to set the starting value of the auto-increment column to 10, you can use the AUTO_INCREMENT keyword when creating the table and specify the starting value later.

For example, to create a table and define an auto-increment column with a starting value of 10, you can use the following SQL statement:

  1. -- set up
  2. create table t1(a int auto_increment primary key) auto_increment = 10;

In this example, the id column is an auto-incrementing column with a starting value 10. When a new record is inserted into the table, the value of the id column will start from 10 and increment by 1 each time. If the starting value of AUTO_INCREMENT is not specified, the default starting value is 1, which is automatically incremented by 1 each time.

Note

  1. MatrixOne currently only supports the default increment step size of 1; regardless of the initial value of the auto-increment column, each auto-increment is 1. Temporarily does not support setting the incremental step size.
  2. MatrixOne only syntax supports using the system variable set @@auto_increment_offset=n to set the initial value of the auto-increment column, but it does not take effect.

PRIMARY KEY

The PRIMARY KEY constraint uniquely identifies each record in a table.

Primary keys must contain UNIQUE values, and cannot contain NULL values.

A table can have only ONE primary key; and in the table, this primary key can consist of single column (field).

  • SQL PRIMARY KEY on CREATE TABLE

The following SQL creates a PRIMARY KEY on the “ID” column when the “Persons” table is created:

  1. > CREATE TABLE Persons (
  2. ID int NOT NULL,
  3. LastName varchar(255) NOT NULL,
  4. FirstName varchar(255),
  5. Age int,
  6. PRIMARY KEY (ID)
  7. );

FOREIGN KEY

The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables.

A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in another table.

The table with the foreign key is called the child table, and the table with the primary key is called the referenced or parent table.

The FOREIGN KEY constraint prevents invalid data from being inserted into the foreign key column, because it has to be one of the values contained in the parent table.

When defining FOREIGN KEY, the following rules need to be followed:

  • The parent table must already exist in the database or be a table currently being created. In the latter case, the parent table and the slave table are the same table, such a table is called a self-referential table, and this structure is called self-referential integrity.

  • A primary key must be defined for the parent table.

  • Specify the column name or combination of column names after the table name of the parent table. This column or combination of columns must be the primary or candidate key of the primary table.

  • The number of columns in the foreign key must be the same as the number of columns in the primary key of the parent table.

  • The data type of the column in the foreign key must be the same as the data type of the corresponding column in the primary key of the parent table.

The following is an example to illustrate the association of parent and child tables through FOREIGN KEY and PRIMARY KEY:

First, create a parent table with field a as the primary key:

  1. create table t1(a int primary key,b varchar(5));
  2. insert into t1 values(101,'abc'),(102,'def');
  3. mysql> select * from t1;
  4. +------+------+
  5. | a | b |
  6. +------+------+
  7. | 101 | abc |
  8. | 102 | def |
  9. +------+------+
  10. 2 rows in set (0.00 sec)

Then create a child table with field c as the foreign key, associated with parent table field a:

  1. create table t2(a int ,b varchar(5),c int, foreign key(c) references t1(a));
  2. insert into t2 values(1,'zs1',101),(2,'zs2',102);
  3. insert into t2 values(3,'xyz',null);
  4. mysql> select * from t2;
  5. +------+------+------+
  6. | a | b | c |
  7. +------+------+------+
  8. | 1 | zs1 | 101 |
  9. | 2 | zs2 | 102 |
  10. | 3 | xyz | NULL |
  11. +------+------+------+
  12. 3 rows in set (0.00 sec)

In addition, [ON DELETE reference_option] and [ON UPDATE reference_option] are used when defining a foreign key relationship to specify actions to be taken when records in the parent table are deleted or updated. These two parameters are primarily used to maintain data integrity and consistency:

  • ON DELETE reference_option: This parameter specifies how to handle associated foreign key data when data in the referenced table is deleted. Common options include:

    • RESTRICT: If related foreign key data exists in the referenced table, deletion of data in the table is not allowed. This prevents accidental deletion of related data, ensuring data consistency.

    • CASCADE: When data in the referenced table is deleted, associated foreign key data is also deleted. This is used for cascading deletion of related data to maintain data integrity.

    • SET NULL: When data in the referenced table is deleted, the value of the foreign key column is set to NULL. This is used to retain foreign key data while disconnecting it from the referenced data upon deletion.

    • NO ACTION: Indicates no action is taken; it only checks for the existence of associated data. This is similar to RESTRICT but may have minor differences in some databases.

  • ON UPDATE reference_option: This parameter specifies how to handle associated foreign key data when data in the referenced table is updated. Common options are similar to those of ON DELETE reference_option, and their usage is identical, but they apply to data update operations.

See the example below:

Suppose there are two tables, Orders and Customers, where the Orders table has a foreign key column customer_id referencing the id column in the Customers table. If, when a customer is deleted from the Customers table, you also want to delete the associated order data, you can use ON DELETE CASCADE.

  1. CREATE TABLE Customers (
  2. id INT PRIMARY KEY,
  3. name VARCHAR(50)
  4. );
  5. CREATE TABLE Orders (
  6. id INT PRIMARY KEY,
  7. order_number VARCHAR(10),
  8. customer_id INT,
  9. FOREIGN KEY (customer_id) REFERENCES Customers(id) ON DELETE CASCADE
  10. );

In the above example, when a customer is deleted from the Customers table, the associated order data will also be deleted through cascading, maintaining data integrity. Similarly, the ON UPDATE parameter can handle update operations.

For more information on data integrity constraints, see Data Integrity Constraints Overview.

Cluster by

Cluster by is a command used to optimize the physical arrangement of a table. When creating a table, the Cluster by command can physically sort the table based on a specified column for tables without a primary key. It will rearrange the data rows to match the order of values in that column. Using Cluster by improves query performance.

  • The syntax for a single column is: create table() cluster by col;
  • The syntax for multiple columns is: create table() cluster by (col1, col2);

Note: Cluster by cannot coexist with a primary key, or a syntax error will occur. Cluster by can only be specified when creating a table and does not support dynamic creation.

For more information on using Cluster by for performing tuning, see Using Cluster by for performance tuning.

Table PARTITION and PARTITIONS

  1. partition_options:
  2. PARTITION BY
  3. { [LINEAR] HASH(expr)
  4. | [LINEAR] KEY [ALGORITHM={1 | 2}] (column_list)
  5. [PARTITIONS num]
  6. [(partition_definition [, partition_definition] ...)]
  7. partition_definition:
  8. PARTITION partition_name
  9. [VALUES
  10. {LESS THAN {(expr | value_list) | MAXVALUE}
  11. |
  12. IN (value_list)}]
  13. [COMMENT [=] 'string' ]

Partitions can be modified, merged, added to tables, and dropped from tables.

  • PARTITION BY

If used, a partition_options clause begins with PARTITION BY. This clause contains the function that is used to determine the partition; the function returns an integer value ranging from 1 to num, where num is the number of partitions.

  • HASH(expr)

Hashes one or more columns to create a key for placing and locating rows. expr is an expression using one or more table columns. For example, these are both valid CREATE TABLE statements using PARTITION BY HASH:

  1. CREATE TABLE t1 (col1 INT, col2 CHAR(5))
  2. PARTITION BY HASH(col1);
  3. CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME)
  4. PARTITION BY HASH ( YEAR(col3) );
  • KEY(column_list)

This is similar to HASH. The column_list argument is simply a list of 1 or more table columns (maximum: 16). This example shows a simple table partitioned by key, with 4 partitions:

  1. CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE)
  2. PARTITION BY KEY(col3)
  3. PARTITIONS 4;

For tables that are partitioned by key, you can employ linear partitioning by using the LINEAR keyword. This has the same effect as with tables that are partitioned by HASH. This example uses linear partitioning by key to distribute data between 5 partitions:

  1. CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE)
  2. PARTITION BY LINEAR KEY(col3)
  3. PARTITIONS 5;
  • RANGE(expr)

In this case, expr shows a range of values using a set of VALUES LESS THAN operators. When using range partitioning, you must define at least one partition using VALUES LESS THAN. You cannot use VALUES IN with range partitioning.

PARTITION ... VALUES LESS THAN ... statements work in a consecutive fashion. VALUES LESS THAN MAXVALUE works to specify “leftover” values that are greater than the maximum value otherwise specified.

The clauses must be arranged in such a way that the upper limit specified in each successive VALUES LESS THAN is greater than that of the previous one, with the one referencing MAXVALUE coming last of all in the list.

  • PARTITIONS num

The number of partitions may optionally be specified with a PARTITIONS num clause, where num is the number of partitions. If both this clause and any PARTITION clauses are used, num must be equal to the total number of any partitions that are declared using PARTITION clauses.

Examples

  • Example 1: Create a common table
  1. CREATE TABLE test(a int, b varchar(10));
  2. INSERT INTO test values(123, 'abc');
  3. mysql> SELECT * FROM test;
  4. +------+---------+
  5. | a | b |
  6. +------+---------+
  7. | 123 | abc |
  8. +------+---------+
  • Example 2: Add comments when creating a table
  1. create table t2 (a int, b int) comment = "fact table";
  2. mysql> show create table t2;
  3. +-------+---------------------------------------------------------------------------------------+
  4. | Table | Create Table |
  5. +-------+---------------------------------------------------------------------------------------+
  6. | t2 | CREATE TABLE `t2` (
  7. `a` INT DEFAULT NULL,
  8. `b` INT DEFAULT NULL
  9. ) COMMENT='fact table', |
  10. +-------+---------------------------------------------------------------------------------------+
  • Example 3: Add comments to columns when creating tables
  1. create table t3 (a int comment 'Column comment', b int) comment = "table";
  2. mysql> SHOW CREATE TABLE t3;
  3. +-------+----------------------------------------------------------------------------------------------------------+
  4. | Table | Create Table |
  5. +-------+----------------------------------------------------------------------------------------------------------+
  6. | t3 | CREATE TABLE `t3` (
  7. `a` INT DEFAULT NULL COMMENT 'Column comment',
  8. `b` INT DEFAULT NULL
  9. ) COMMENT='table', |
  10. +-------+----------------------------------------------------------------------------------------------------------+
  • Example 4: Create a common partitioned table
  1. CREATE TABLE tp1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY KEY(col3) PARTITIONS 4;
  2. mysql> SHOW CREATE TABLE tp1;
  3. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
  4. | Table | Create Table |
  5. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
  6. | tp1 | CREATE TABLE `tp1` (
  7. `col1` INT DEFAULT NULL,
  8. `col2` CHAR(5) DEFAULT NULL,
  9. `col3` DATE DEFAULT NULL
  10. ) partition by key algorithm = 2 (col3) partitions 4 |
  11. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------+
  12. 1 row in set (0.00 sec)
  13. -- do not specify the number of partitions
  14. CREATE TABLE tp2 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY KEY(col3);
  15. mysql> SHOW CREATE TABLE tp2;
  16. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  17. | Table | Create Table |
  18. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  19. | tp2 | CREATE TABLE `tp2` (
  20. `col1` INT DEFAULT NULL,
  21. `col2` CHAR(5) DEFAULT NULL,
  22. `col3` DATE DEFAULT NULL
  23. ) partition by key algorithm = 2 (col3) |
  24. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  25. 1 row in set (0.00 sec)
  26. -- Specify partition algorithm
  27. CREATE TABLE tp3
  28. (
  29. col1 INT,
  30. col2 CHAR(5),
  31. col3 DATE
  32. ) PARTITION BY KEY ALGORITHM = 1 (col3);
  33. mysql> show create table tp3;
  34. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  35. | Table | Create Table |
  36. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  37. | tp3 | CREATE TABLE `tp3` (
  38. `col1` INT DEFAULT NULL,
  39. `col2` CHAR(5) DEFAULT NULL,
  40. `col3` DATE DEFAULT NULL
  41. ) partition by key algorithm = 1 (col3) |
  42. +-------+---------------------------------------------------------------------------------------------------------------------------------------------+
  43. 1 row in set (0.00 sec)
  44. -- Specify partition algorithm and the number of partitions
  45. CREATE TABLE tp4 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR KEY ALGORITHM = 1 (col3) PARTITIONS 5;
  46. mysql> SHOW CREATE TABLE tp4;
  47. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  48. | Table | Create Table |
  49. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  50. | tp4 | CREATE TABLE `tp4` (
  51. `col1` INT DEFAULT NULL,
  52. `col2` CHAR(5) DEFAULT NULL,
  53. `col3` DATE DEFAULT NULL
  54. ) partition by linear key algorithm = 1 (col3) partitions 5 |
  55. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  56. 1 row in set (0.01 sec)
  57. -- Multi-column partition
  58. CREATE TABLE tp5
  59. (
  60. col1 INT,
  61. col2 CHAR(5),
  62. col3 DATE
  63. ) PARTITION BY KEY(col1, col2) PARTITIONS 4;
  64. mysql> SHOW CREATE TABLE tp5;
  65. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  66. | Table | Create Table |
  67. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  68. | tp5 | CREATE TABLE `tp5` (
  69. `col1` INT DEFAULT NULL,
  70. `col2` CHAR(5) DEFAULT NULL,
  71. `col3` DATE DEFAULT NULL
  72. ) partition by key algorithm = 2 (col1, col2) partitions 4 |
  73. +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
  74. 1 row in set (0.01 sec)
  75. -- Create a primary key column partition
  76. CREATE TABLE tp6
  77. (
  78. col1 INT NOT NULL PRIMARY KEY,
  79. col2 DATE NOT NULL,
  80. col3 INT NOT NULL,
  81. col4 INT NOT NULL
  82. ) PARTITION BY KEY(col1) PARTITIONS 4;
  83. mysql> SHOW CREATE TABLE tp6;
  84. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  85. | Table | Create Table |
  86. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  87. | tp6 | CREATE TABLE `tp6` (
  88. `col1` INT NOT NULL,
  89. `col2` DATE NOT NULL,
  90. `col3` INT NOT NULL,
  91. `col4` INT NOT NULL,
  92. PRIMARY KEY (`col1`)
  93. ) partition by key algorithm = 2 (col1) partitions 4 |
  94. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  95. 1 row in set (0.01 sec)
  96. -- Create HASH partition
  97. CREATE TABLE tp7
  98. (
  99. col1 INT,
  100. col2 CHAR(5)
  101. ) PARTITION BY HASH(col1);
  102. mysql> SHOW CREATE TABLE tp7;
  103. +-------+------------------------------------------------------------------------------------------------------+
  104. | Table | Create Table |
  105. +-------+------------------------------------------------------------------------------------------------------+
  106. | tp7 | CREATE TABLE `tp7` (
  107. `col1` INT DEFAULT NULL,
  108. `col2` CHAR(5) DEFAULT NULL
  109. ) partition by hash (col1) |
  110. +-------+------------------------------------------------------------------------------------------------------+
  111. 1 row in set (0.01 sec)
  112. -- Specifies the number of HASH partitions when creating hash partition
  113. CREATE TABLE tp8
  114. (
  115. col1 INT,
  116. col2 CHAR(5)
  117. ) PARTITION BY HASH(col1) PARTITIONS 4;
  118. mysql> SHOW CREATE TABLE tp8;
  119. +-------+-------------------------------------------------------------------------------------------------------------------+
  120. | Table | Create Table |
  121. +-------+-------------------------------------------------------------------------------------------------------------------+
  122. | tp8 | CREATE TABLE `tp8` (
  123. `col1` INT DEFAULT NULL,
  124. `col2` CHAR(5) DEFAULT NULL
  125. ) partition by hash (col1) partitions 4 |
  126. +-------+-------------------------------------------------------------------------------------------------------------------+
  127. 1 row in set (0.00 sec)
  128. -- specify the partition granularity when creating a partition
  129. CREATE TABLE tp9
  130. (
  131. col1 INT,
  132. col2 CHAR(5),
  133. col3 DATETIME
  134. ) PARTITION BY HASH (YEAR(col3));
  135. mysql> SHOW CREATE TABLE tp9;
  136. +-------+------------------------------------------------------------------------------------------------------------------------------------------+
  137. | Table | Create Table |
  138. +-------+------------------------------------------------------------------------------------------------------------------------------------------+
  139. | tp9 | CREATE TABLE `tp9` (
  140. `col1` INT DEFAULT NULL,
  141. `col2` CHAR(5) DEFAULT NULL,
  142. `col3` DATETIME DEFAULT NULL
  143. ) partition by hash (year(col3)) |
  144. +-------+------------------------------------------------------------------------------------------------------------------------------------------+
  145. 1 row in set (0.00 sec)
  146. -- specify the partition granularity and number of partitions when creating a partition
  147. CREATE TABLE tp10
  148. (
  149. col1 INT,
  150. col2 CHAR(5),
  151. col3 DATE
  152. ) PARTITION BY LINEAR HASH( YEAR(col3)) PARTITIONS 6;
  153. mysql> SHOW CREATE TABLE tp10;
  154. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
  155. | Table | Create Table |
  156. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
  157. | tp10 | CREATE TABLE `tp10` (
  158. `col1` INT DEFAULT NULL,
  159. `col2` CHAR(5) DEFAULT NULL,
  160. `col3` DATE DEFAULT NULL
  161. ) partition by linear hash (year(col3)) partitions 6 |
  162. +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------+
  163. 1 row in set (0.00 sec)
  164. -- Use the primary key column as the HASH partition when creating a partition
  165. CREATE TABLE tp12 (col1 INT NOT NULL PRIMARY KEY, col2 DATE NOT NULL, col3 INT NOT NULL, col4 INT NOT NULL) PARTITION BY HASH(col1) PARTITIONS 4;
  166. mysql> SHOW CREATE TABLE tp12;
  167. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  168. | Table | Create Table |
  169. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  170. | tp12 | CREATE TABLE `tp12` (
  171. `col1` INT NOT NULL,
  172. `col2` DATE NOT NULL,
  173. `col3` INT NOT NULL,
  174. `col4` INT NOT NULL,
  175. PRIMARY KEY (`col1`)
  176. ) partition by hash (col1) partitions 4 |
  177. +-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
  178. 1 row in set (0.01 sec)
  • Example 5: Primary key auto increment
  1. drop table if exists t1;
  2. create table t1(a bigint primary key auto_increment,
  3. b varchar(10));
  4. insert into t1(b) values ('bbb');
  5. insert into t1 values (3, 'ccc');
  6. insert into t1(b) values ('bbb1111');
  7. mysql> select * from t1 order by a;
  8. +------+---------+
  9. | a | b |
  10. +------+---------+
  11. | 1 | bbb |
  12. | 3 | ccc |
  13. | 4 | bbb1111 |
  14. +------+---------+
  15. 3 rows in set (0.01 sec)
  16. insert into t1 values (2, 'aaaa1111');
  17. mysql> select * from t1 order by a;
  18. +------+----------+
  19. | a | b |
  20. +------+----------+
  21. | 1 | bbb |
  22. | 2 | aaaa1111 |
  23. | 3 | ccc |
  24. | 4 | bbb1111 |
  25. +------+----------+
  26. 4 rows in set (0.00 sec)
  27. insert into t1(b) values ('aaaa1111');
  28. mysql> select * from t1 order by a;
  29. +------+----------+
  30. | a | b |
  31. +------+----------+
  32. | 1 | bbb |
  33. | 2 | aaaa1111 |
  34. | 3 | ccc |
  35. | 4 | bbb1111 |
  36. | 5 | aaaa1111 |
  37. +------+----------+
  38. 5 rows in set (0.01 sec)
  39. insert into t1 values (100, 'xxxx');
  40. insert into t1(b) values ('xxxx');
  41. mysql> select * from t1 order by a;
  42. +------+----------+
  43. | a | b |
  44. +------+----------+
  45. | 1 | bbb |
  46. | 2 | aaaa1111 |
  47. | 3 | ccc |
  48. | 4 | bbb1111 |
  49. | 5 | aaaa1111 |
  50. | 100 | xxxx |
  51. | 101 | xxxx |
  52. +------+----------+
  53. 7 rows in set (0.00 sec)

Constraints

  1. Currently, it is not supported to use the ALTER TABLE table_name DROP PRIMARY KEY statement to drop the primary key from a table.
  2. The ALTER TABLE table_name AUTO_INCREMENT = n; statement is not supported to modify the initial value of the auto-increment column.
  3. In MatrixOne, only syntax supports using the system variable set @@auto_increment_increment=n to set the incremental step size, and only syntax supports using the system variable set @@auto_increment_offset=n to set the default auto-increment column initial value, but it does not take effect; currently supports setting the initial value AUTO_INCREMENT=n of the auto-increment column, but the step size is still 1 by default.