默认值

一个列如果没有显示的指定默认值,那么在插入记录时,该列的值就是 NULL。如果要指定默认值,那么可以使用 DEFAULT 关键字,语法如下:

列名 列的类型 DEFAULT 默认值

示例:

mysql> CREATE TABLE first_table (
    ->     first_column INT,
    ->     second_column VARCHAR(100) DEFAULT 'abc'
    -> );
Query OK, 0 rows affected (0.02 sec)

NOT NULL

如果列中必须有值,那么可以在创建列时使用 NOT NULL 关键字,这样在插入记录时,如果该列没有值,那么就会报错:

列名 列的类型 NOT NULL

示例:

mysql> CREATE TABLE first_table (
    ->     first_column INT NOT NULL,
    ->     second_column VARCHAR(100) DEFAULT 'abc'
    -> );
Query OK, 0 rows affected (0.02 sec)

主键

一个表最多只能有一个主键,主键的值不能重复,并且不能为 NULL,通过主键可以找到唯一的一条记录。如果一个列被指定为主键,那么在插入记录时,如果该列没有值,那么就会报错。

主键可以是一个列,也可以是多个列的组合

如果主键只是单个列的话,可以直接在该列后声明 PRIMARY KEY

CREATE TABLE student_info (
    number INT PRIMARY KEY,
    name VARCHAR(5),
    sex ENUM('男', '女'),
    id_number CHAR(18),
    department VARCHAR(30),
    major VARCHAR(30),
    enrollment_time DATE
);

也可以把主键的声明单独提取出来:

CREATE TABLE student_info (
    number INT,
    name VARCHAR(5),
    sex ENUM('男', '女'),
    id_number CHAR(18),
    department VARCHAR(30),
    major VARCHAR(30),
    enrollment_time DATE,
    PRIMARY KEY (number)
);

对于多个列的组合作为主键的情况,必须使用这种单独声明的形式:

CREATE TABLE student_score (
    number INT,
    subject VARCHAR(30),
    score TINYINT,
    PRIMARY KEY (number, subject)
);

UNIQUE

一个表中可以有多个 UNIQUE 约束,UNIQUE 约束的值不能重复,但是可以为 NULL

单个列声明 UNIQUE 属性:

CREATE TABLE student_info (
    number INT PRIMARY KEY,
    name VARCHAR(5),
    sex ENUM('男', '女'),
    id_number CHAR(18) UNIQUE,
    department VARCHAR(30),
    major VARCHAR(30),
    enrollment_time DATE
);

也可以把 UNIQUE 属性的声明单独提取出来:

CREATE TABLE student_info (
    number INT PRIMARY KEY,
    name VARCHAR(5),
    sex ENUM('男', '女'),
    id_number CHAR(18),
    department VARCHAR(30),
    major VARCHAR(30),
    enrollment_time DATE,
    UNIQUE KEY uk_id_number (id_number)
);

UNIQUE [约束名称] (列名1, 列名2, ...) 中的 UNIQUE 也可以使用 UNIQUE KEY 关键字来声明。

对于多个列的组合具有 UNIQUE 属性的情况,必须使用这种单独声明的形式。

AUTO_INCREMENT

AUTO_INCREMENT 自增属性,如果一个表中的某个列的数据类型是整数类型或者浮点数类型,就可以设置 AUTO_INCREMENT 属性

设置了 AUTO_INCREMENT 属性之后,如果在插入新记录的时候不指定该列的值,那么新插入的记录的该列的值就会自动递增。

mysql> CREATE TABLE first_table (
    ->     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    ->     first_column INT,
    ->     second_column VARCHAR(100) DEFAULT 'abc'
    -> );
Query OK, 0 rows affected (0.01 sec)

注释

每一个列末尾可以添加 COMMENT 语句来为列来添加注释:

CREATE TABLE first_table (
    id int UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
    first_column INT COMMENT '第一列',
    second_column VARCHAR(100) DEFAULT 'abc' COMMENT '第二列'
) COMMENT '第一个表';

ZEROFILL

ZEROFILL 属性配合显示宽度,可以实现数字的左边补 0

最后更新于