当前位置:  首页>> 技术小册>> MySQL从入门到精通(二)

6.1 创建数据表(CREATE TABLE语句)

在MySQL数据库中,数据表是存储数据的核心结构,它按照特定的格式组织数据,使得数据的查询、更新、删除等操作变得高效且有序。CREATE TABLE语句是MySQL中用于创建新数据表的基本命令,它允许你定义表的结构,包括列的名称、数据类型、是否允许为空、默认值、主键、外键等约束条件。掌握CREATE TABLE语句的使用,是数据库设计和管理的基础。

6.1.1 基本语法

CREATE TABLE语句的基本语法如下:

  1. CREATE TABLE table_name (
  2. column1 datatype constraints,
  3. column2 datatype constraints,
  4. column3 datatype constraints,
  5. ....
  6. PRIMARY KEY (one or more columns),
  7. FOREIGN KEY (column_name) REFERENCES parent_table(column_name),
  8. INDEX (column_name),
  9. UNIQUE (column_name),
  10. CHECK (condition),
  11. ...
  12. );
  • table_name:你想要创建的数据表的名称。
  • column1, column2, ...:表中各列的名称。
  • datatype:每列的数据类型,如INTVARCHARDATE等。
  • constraints:对列的约束条件,如NOT NULL(不允许为空)、DEFAULT(默认值)、UNIQUE(唯一值)等。
  • PRIMARY KEY:定义表的主键,主键的值必须唯一且不允许为空。
  • FOREIGN KEY:定义外键,用于建立表之间的关联。
  • INDEXUNIQUECHECK:分别用于创建索引、唯一约束和检查约束。

6.1.2 数据类型

在定义列时,选择合适的数据类型至关重要,它不仅影响数据的存储效率,还决定了数据的表示范围和格式。MySQL支持多种数据类型,包括数值类型(如INTFLOATDECIMAL)、日期和时间类型(如DATETIMEDATETIME)、字符串类型(如CHARVARCHARTEXT)等。

  • 数值类型:用于存储数字,根据存储范围和精度选择。

    • INT:整数,有符号范围从-2,147,483,648到2,147,483,647,无符号范围加倍。
    • FLOATDOUBLE:浮点数,用于存储近似数值,DOUBLEFLOAT精度更高。
    • DECIMAL(M,D):定点数,用于存储精确的小数,M是数字的最大位数(精度),D是小数点后的位数(标度)。
  • 日期和时间类型:用于存储日期和时间值。

    • DATE:日期值,格式为YYYY-MM-DD。
    • TIME:时间值,格式为HH:MM:SS。
    • DATETIME:日期和时间值,格式为YYYY-MM-DD HH:MM:SS。
    • TIMESTAMP:时间戳,与DATETIME类似,但范围较小,且有时区支持。
  • 字符串类型:用于存储文本数据。

    • CHAR(M):固定长度的字符串,M是列的最大字符数。
    • VARCHAR(M):可变长度的字符串,M是列的最大字符数(MySQL 5.0.3及以后版本最大为65535)。
    • TEXT:长文本数据,有TINYTEXTTEXTMEDIUMTEXTLONGTEXT四种类型,分别对应不同的最大长度。

6.1.3 约束条件

约束条件用于限制表中数据的类型和值,确保数据的准确性和可靠性。

  • NOT NULL:指定列不能存储NULL值。
  • DEFAULT:为列指定默认值,当插入行时未指定该列的值时,将使用默认值。
  • UNIQUE:保证列中的所有值都是唯一的,可以与PRIMARY KEY一起使用,但PRIMARY KEY自动具有UNIQUE约束。
  • PRIMARY KEY:表的主键,用于唯一标识表中的每一行。主键列的值不能重复且不允许为NULL。
  • FOREIGN KEY:外键,用于在两个表之间建立关系,确保参照完整性。
  • CHECK:检查约束,用于限制列中值的范围或格式,MySQL 8.0.16及以后版本支持。

6.1.4 示例

假设我们要创建一个名为students的表,用于存储学生的信息,包括学号(ID)、姓名(name)、年龄(age)、入学日期(enrollment_date)和班级(class_id,假设班级信息存储在另一个表中)。

  1. CREATE TABLE students (
  2. ID INT AUTO_INCREMENT PRIMARY KEY,
  3. name VARCHAR(100) NOT NULL,
  4. age INT CHECK (age > 0 AND age <= 100),
  5. enrollment_date DATE NOT NULL,
  6. class_id INT,
  7. FOREIGN KEY (class_id) REFERENCES classes(id)
  8. );

在这个例子中,ID列被设置为主键,并自动增长(AUTO_INCREMENT),这意味着每当向表中插入新行时,MySQL会自动为ID列生成一个唯一的值。name列不允许为空,且最大长度为100个字符。age列通过CHECK约束确保年龄值在1到100之间(包含边界值)。enrollment_date列也不允许为空,用于存储学生的入学日期。class_id列是外键,它引用了另一个名为classes的表的id列,从而建立了students表和classes表之间的关联。

6.1.5 注意事项

  • 在设计表结构时,应充分考虑数据的完整性和查询效率,合理设置主键、外键和索引。
  • 尽量避免使用SELECT *查询,特别是在表结构复杂或数据量大的情况下,明确指定需要查询的列可以提高查询效率。
  • 定期对表进行维护,如优化索引、清理无用数据等,以保持数据库的性能。
  • 在使用外键时,确保参照的表(父表)和列(父列)已经存在,并且数据类型一致。

通过本章的学习,你应该能够熟练掌握CREATE TABLE语句的使用,包括定义表结构、选择数据类型、设置约束条件等。这将为你后续进行数据库设计、数据管理和查询优化打下坚实的基础。


该分类下的相关小册推荐: