CREATE TABLE
,, and
Syntax
CREATE TABLE [IF NOT EXISTS] table_name ( column_name data_type [constraints], ... [INDEX | PRIMARY KEY | UNIQUE | FOREIGN KEY] ) [ENGINE=InnoDB] [DEFAULT CHARSET=utf8mb4];
Parameters
| Parameters | Description | Examples | Level |
|---|---|---|---|
PRIMARY KEY |
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY |
Common | |
NOT NULL |
username VARCHAR(50) NOT NULL |
Common | |
DEFAULT |
status TINYINT DEFAULT 1 |
Common | |
UNIQUE |
email VARCHAR(100) UNIQUE |
Common | |
FOREIGN KEY |
FOREIGN KEY (user_id) REFERENCES users(id) |
Advanced | |
COMMENT |
status TINYINT COMMENT '0: 1:' |
Common |
Examples
CREATE TABLE IF NOT EXISTS users ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE COMMENT '', email VARCHAR(100) NOT NULL UNIQUE COMMENT '', password_hash VARCHAR(255) NOT NULL COMMENT '', status TINYINT DEFAULT 1 COMMENT '0: 1:', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, INDEX idx_email (email), INDEX idx_status (status) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='';
, and
()
CREATE TABLE orders ( id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '', user_id BIGINT UNSIGNED NOT NULL COMMENT 'ID', total_amount DECIMAL(10,2) NOT NULL DEFAULT 0.00, status TINYINT DEFAULT 0 COMMENT '0: 1: 2: 3:', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE RESTRICT, INDEX idx_user_id (user_id), INDEX idx_status_created (status, created_at) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
, ON DELETE RESTRICT
DESC users; SHOW CREATE TABLE users;
DESC, SHOW CREATE TABLE
CREATE TEMPORARY TABLE tmp_active_users AS SELECT id, username FROM users WHERE status = 1;
Common Errors
ERROR 1050 (42S01): Table 'users' already existsCREATE TABLE IF NOT EXISTS
ERROR 1215 (HY000): Cannot add foreign key constraintand ( UNSIGNED)
Tips
- Recommended BIGINT UNSIGNED AUTO_INCREMENT, UUID ()
- DECIMAL FLOAT/DOUBLE,
- created_at and updated_at,