创建表

MySQL 创建表时可以使用以下可变参数:

主键(PRIMARY KEY):用于定义主键,确保每行数据都有唯一的标识符。可以指定多列作为复合主键。相关参数包括:

   AUTO_INCREMENT:指定该列自动递增。

   COMMENT:为该主键添加注释。

   CLUSTERED:用于指定该主键作为聚集索引。

CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(20),
password VARCHAR(20),
email VARCHAR(50)
);
这里的 user_id 列被定义为主键,它的值必须唯一。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
PRIMARY KEY (order_id, customer_id),
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
这里的联合主键由 order_id 和 customer_id 两列组成,它们的组合值必须唯一。

外键(FOREIGN KEY):用于定义外键,确保数据关系的完整性。相关参数包括:

   REFERENCES:指定外键引用的主表和主键。

   ON DELETE:指定删除主表中记录时,与之关联的记录的处理方式。

   ON UPDATE:指定更新主表中记录时,与之关联的记录的处理方式。

CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);
这里的 customer_id 列被定义为外键,它参照了 customers 表中的 customer_id 列作为关系。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (customer_id) ON DELETE CASCADE
);
这里的 ON DELETE 指定了当 customers 表中的记录被删除时,orders 表中与之关联的记录也会被删除。
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (customer_id) ON UPDATE CASCADE
);
这里的 ON UPDATE 指定了当 customers 表中的记录被更新时,orders 表中与之关联的记录也会被更新

索引(INDEX):用于加速数据的检索。可以指定单列索引、复合索引、唯一索引等。相关参数包括:

   UNIQUE:指定该索引是唯一索引。

   FULLTEXT:指定该索引是全文索引。

   SPATIAL:指定该索引是空间索引。

   COMMENT:为该索引添加注释。

CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
price FLOAT,
INDEX idx_product (product_name)
);

约束(CONSTRAINT):用于限制表中数据的值,保证数据的完整性。可以指定 CHECK 约束、NOT NULL 约束、DEFAULT 约束等。相关参数包括:

  CHECK:指定 CHECK 约束的条件。

  DEFAULT:指定列的默认值。

  NOT NULL:指定列的值不允许为空。

  COMMENT:为该约束添加注释。

字符集(CHARSET):用于指定表的默认字符集。

引擎(ENGINE):用于指定表使用的存储引擎。

注释(COMMENT):用于为表、列、主键、索引或者约束添加注释。


下面是一些参数的示例说明:


AUTO_INCREMENT

CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
password VARCHAR(20),
email VARCHAR(50)
);

注意:AUTO_INCREMENT 只能用于整数类型的列。

REFERENCES

CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
);

这里的 orders 表中的 customer_id 列是外键,它引用了 customers 表中的 customer_id 主键。

UNIQUE

CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
price FLOAT,
UNIQUE (product_name)
);

这里的 product_name 列被定义为 UNIQUE,它的值必须唯一。

CHECK

CREATE TABLE employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
salary FLOAT,
CHECK (salary > 0)
);

这里的 CHECK 约束保证了 salary 列的值必须大于 0。

CHARSET

CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
price FLOAT
) CHARSET=utf8;

这里的 CHARSET 定义了表使用的字符集。

INDEX

CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
price FLOAT,
INDEX idx_product (product_name)
);

这里定义了一个名为 idx_product 的索引,它是在 product_name 列上创建的非唯一索引。

COMMENT

CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50) COMMENT 'This is product name',
price FLOAT
);

这里的 COMMENT 用于为 product_name 列添加注释。