关于列的属性:
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);
要求列必须有值,不能为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属性。
唯一性约束,用于保证列的值是唯一的,比如:
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) );
用于关联两个表,如果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默认自带索引。
自增属性,插入值时默认自增1。
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用于为无符号整数指定显示宽度,即不足位宽时,左边补0,比如:
CREATE TABLE zerofill_table ( i1 INT UNSIGNED ZEROFILL, i2 INT UNSIGNED );