关于列的属性:

CREATE TABLE 表名 (
    列名1    数据类型    [列的属性],
    列名2    数据类型    [列的属性],
    ...
);

默认值

CREATE TABLE first_table (
    first_column INT,
    second_column VARCHAR(100) DEFAULT 'abc';
);

在未指定第2列的值时,第2列具有默认值'abc',比如:

INSERT INTO first_table(first_column) VALUES(1);

NOT NULL

要求列必须有值,不能为NULL。

主键

用于唯一确定一条记录,对应某个列或某些列的组合,比如学生ID,身份证号等。一个表最多只能有一个主键,主键的值不能重复。

声明主键有两种形式,如果主键只有单个列,则在列的声明后面加上PRIMARY KEY关键字,如果对应多个列,则使用 PRIMARY KEY(列名1,列名2,...)的形式,如下:

CREATE TABLE student_info (
    number INT PRIMARY KEY,
    ...
);

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

主键默认具有NOT NULL属性。


UNIQUE

唯一性约束,用于保证列的值是唯一的,比如:

CREATE TABLE student_info (
   ...
   id_number CHAR(18) UNIQUE,
);

如果有多个列要求唯一,则可以整合到一起,格式如下:

UNIQUE [KEY] [约束名称] (列1, 列2, ...)

比如:

CREATE TABLE student_info (
    number INT PRIMARY KEY,
    NAME VARCHAR(5),
    id_number CHAR(18),
    ...
    QNIQUE KEY uk_id_number (id_number)
);
  • UNIQUE KEY类似于PRIMARY KEY,其中UNIQUE和PRIMARY是约束的名字,主键的PRIMARY名字不可修改,但UNIQUE约束的名称可以修改和自定义。
  • 对比主键和UNIQUE:
    • 一张表中只能有一个主键,但可以定义多个UNIQUE约束;
    • 主键列不能存放NULL,但UNIQUE列可以存放NULL,且NULL可以重复出现。
  • 如果未指定表的主键,那MySQL会将第一个声明为NOT NULL且具有UNIQUE约束的列或列组合自动定义为主键。

外键

用于关联两个表,如果A表中的列依赖B表中的列,那么就称A表为子表,B表为父表。外键用于关联父表和子表。比如有学生成绩表和学生信息表,那么学生成绩表中的学生ID就依赖学生信息表中的ID。外键的语法如下:

CONSTRAINT [外键名称] FOREIGN KEY(列1, 列2, ...) REFERENCES 父表(父列1, 父列2, ...);

比如:

CREATE TABLE student_socre (
    number INT, 
    subject VARCHAR(30),
    score TINYINT,
    PRIMARY KEY(number, subject),
    CONSTRAINT FOREIGN KEY(number) REFERENCES student_info(number)
);

这样,在每次插入学生成绩时,MySQL都会检查插入的学号是否能在student_info表中找到,如果找不到则会报错。


在MySQL中,父表中被子表依赖的列或列组合必须建立索引。主键和UNIQUE默认自带索引。

AUTO_INCREMENT

自增属性,插入值时默认自增1。

  • 一个表中最多只有一个具有AUTO_INCREMENT属性的列。
  • 具有AUTO_INCREMENT属性的列必须建立索引。主键和UNIQUE列会自动建立索引。
  • 拥有AUTO_INCREMENT的列不能再通过DEFAULT属性来指定默认值。
  • AUTO_INCREMENT一般作为主键的属性,用于生成唯一标识的一条记录的主键值。

为列添加注释

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,比如:

CREATE TABLE zerofill_table (
    i1 INT UNSIGNED ZEROFILL,
    i2 INT UNSIGNED
);










  • 无标签