在MySQL数据库中,数据表是存储数据的核心结构,它按照特定的格式组织数据,使得数据的查询、更新、删除等操作变得高效且有序。CREATE TABLE
语句是MySQL中用于创建新数据表的基本命令,它允许你定义表的结构,包括列的名称、数据类型、是否允许为空、默认值、主键、外键等约束条件。掌握CREATE TABLE
语句的使用,是数据库设计和管理的基础。
CREATE TABLE
语句的基本语法如下:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
column3 datatype constraints,
....
PRIMARY KEY (one or more columns),
FOREIGN KEY (column_name) REFERENCES parent_table(column_name),
INDEX (column_name),
UNIQUE (column_name),
CHECK (condition),
...
);
table_name
:你想要创建的数据表的名称。column1, column2, ...
:表中各列的名称。datatype
:每列的数据类型,如INT
、VARCHAR
、DATE
等。constraints
:对列的约束条件,如NOT NULL
(不允许为空)、DEFAULT
(默认值)、UNIQUE
(唯一值)等。PRIMARY KEY
:定义表的主键,主键的值必须唯一且不允许为空。FOREIGN KEY
:定义外键,用于建立表之间的关联。INDEX
、UNIQUE
、CHECK
:分别用于创建索引、唯一约束和检查约束。在定义列时,选择合适的数据类型至关重要,它不仅影响数据的存储效率,还决定了数据的表示范围和格式。MySQL支持多种数据类型,包括数值类型(如INT
、FLOAT
、DECIMAL
)、日期和时间类型(如DATE
、TIME
、DATETIME
)、字符串类型(如CHAR
、VARCHAR
、TEXT
)等。
数值类型:用于存储数字,根据存储范围和精度选择。
INT
:整数,有符号范围从-2,147,483,648到2,147,483,647,无符号范围加倍。FLOAT
和DOUBLE
:浮点数,用于存储近似数值,DOUBLE
比FLOAT
精度更高。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
:长文本数据,有TINYTEXT
、TEXT
、MEDIUMTEXT
、LONGTEXT
四种类型,分别对应不同的最大长度。约束条件用于限制表中数据的类型和值,确保数据的准确性和可靠性。
PRIMARY KEY
一起使用,但PRIMARY KEY
自动具有UNIQUE
约束。假设我们要创建一个名为students
的表,用于存储学生的信息,包括学号(ID)、姓名(name)、年龄(age)、入学日期(enrollment_date)和班级(class_id,假设班级信息存储在另一个表中)。
CREATE TABLE students (
ID INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT CHECK (age > 0 AND age <= 100),
enrollment_date DATE NOT NULL,
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(id)
);
在这个例子中,ID
列被设置为主键,并自动增长(AUTO_INCREMENT
),这意味着每当向表中插入新行时,MySQL会自动为ID
列生成一个唯一的值。name
列不允许为空,且最大长度为100个字符。age
列通过CHECK
约束确保年龄值在1到100之间(包含边界值)。enrollment_date
列也不允许为空,用于存储学生的入学日期。class_id
列是外键,它引用了另一个名为classes
的表的id
列,从而建立了students
表和classes
表之间的关联。
SELECT *
查询,特别是在表结构复杂或数据量大的情况下,明确指定需要查询的列可以提高查询效率。通过本章的学习,你应该能够熟练掌握CREATE TABLE
语句的使用,包括定义表结构、选择数据类型、设置约束条件等。这将为你后续进行数据库设计、数据管理和查询优化打下坚实的基础。