首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第1章 数据库和SQL
1-1 数据库是什么
我们身边的数据库
为什么DBMS那么重要
DBMS的种类
1-2 数据库的结构
RDBMS的常见系统结构
表的结构
1-3 SQL概要
标准SQL
SQL语句及其种类
SQL的基本书写规则
1-4 表的创建
表的内容的创建
数据库的创建(CREATE DATABASE语句)
表的创建(CREATE TABLE语句)
命名规则
数据类型的指定
约束的设置
1-5 表的删除和更新
表的删除(DROP TABLE语句)
表定义的更新(ALTER TABLE语句)
向Product表中插入数据
第2章 查询基础
2-1 SELECT语句基础
列的查询
查询出表中所有的列
为列设定别名
常数的查询
从结果中删除重复行
根据WHERE语句来选择记录
注释的书写方法
算术运算符
需要注意NULL
比较运算符
对字符串使用不等号时的注意事项
不能对NULL使用比较运算符
2-3 逻辑运算符
NOT运算符
AND运算符和OR运算符
通过括号强化处理
逻辑运算符和真值
含有NULL时的真值
第3章 聚合与排序
3-1 对表进行聚合查询
聚合函数
计算表中数据的行数
计算NULL之外的数据的行数
计算合计值
计算平均值
计算值和小值
使用聚合函数删除重复值(关键字DISTINCT)
3-2 对表进行分组
GROUP BY子句
聚合键中包含NULL的情况
使用WHERE子句时GROUP BY的执行结果
与聚合函数和GROUP BY子句有关的常见错误
3-3 为聚合结果指定条件
HAVING子句
HAVING子句的构成要素
相对于HAVING子句,更适合写在WHERE子句中的条件
3-4 对查询结果进行排序
ORDER BY子句
指定升序或降序
指定多个排序键
NULL的顺序
在排序键中使用显示用的别名
ORDER BY子句中可以使用的列
不要使用列编号
当前位置:
首页>>
技术小册>>
SQL基础教程(上)
小册名称:SQL基础教程(上)
### 表的创建(CREATE TABLE语句) 在数据库管理系统中,表是最基本的数据存储结构,它按照行和列的形式组织数据,类似于电子表格。`CREATE TABLE`语句是SQL(Structured Query Language,结构化查询语言)中用于创建新表的核心命令。掌握如何有效地使用`CREATE TABLE`语句,对于数据库设计、数据管理和查询优化都至关重要。本章将详细介绍`CREATE TABLE`语句的基本语法、数据类型、约束条件以及高级特性,帮助读者从零开始构建数据库表。 #### 一、`CREATE TABLE`基本语法 `CREATE TABLE`语句的基本语法结构如下: ```sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, column3 datatype constraints, ... table_constraints ); ``` - `table_name`:你想要创建的表的名称,必须唯一且符合数据库系统的命名规则。 - `column1, column2, column3, ...`:表中的列名,用于标识数据的不同属性。 - `datatype`:列的数据类型,定义了该列可以存储的数据类型,如`INT`(整数)、`VARCHAR`(可变长度的字符串)、`DATE`(日期)等。 - `constraints`:约束条件,用于限制表中数据的类型和值,如`NOT NULL`(非空)、`UNIQUE`(唯一)、`PRIMARY KEY`(主键)等。 - `table_constraints`:表级约束,如外键约束(`FOREIGN KEY`),这些约束可以跨越多列,并且通常放在列定义之后。 #### 二、数据类型 在定义列时,选择合适的数据类型对于优化存储和查询性能至关重要。以下是一些常见的数据类型: - **数值类型**:如`INT`(整数)、`DECIMAL(M,N)`(定点数,M是数字总位数,N是小数位数)、`FLOAT`和`DOUBLE`(浮点数)。 - **字符串类型**:如`CHAR(n)`(固定长度的字符串,n是长度)、`VARCHAR(n)`(可变长度的字符串,n是最大长度)、`TEXT`(长文本)。 - **日期和时间类型**:如`DATE`(日期)、`TIME`(时间)、`DATETIME`(日期和时间)、`TIMESTAMP`(时间戳,自动记录数据修改时间)。 - **二进制数据类型**:如`BINARY(n)`、`VARBINARY(n)`、`BLOB`(二进制大对象)。 - **枚举类型**:`ENUM('value1', 'value2', ...)`,允许列的值从预定义列表中选择。 - **布尔类型**:在某些数据库系统中,如MySQL,可以使用`TINYINT(1)`或专门的`BOOLEAN`类型来表示布尔值(真/假)。 #### 三、约束条件 约束条件用于确保表中数据的准确性和可靠性。常见的约束包括: - **NOT NULL**:确保列不能包含NULL值。 - **UNIQUE**:保证列中的所有值都是唯一的。 - **PRIMARY KEY**:唯一标识表中的每一行,一个表只能有一个主键,主键列的值不能重复且不能为NULL。 - **FOREIGN KEY**:用于在两个表之间建立关系,确保一个表中的值对应于另一个表中的主键值,维护数据的参照完整性。 - **CHECK**:用于限制列中值的范围,例如`CHECK (age > 0)`确保年龄列的值大于0。 - **DEFAULT**:为列指定默认值,当插入新行而未指定该列的值时,将使用默认值。 #### 四、创建表的示例 假设我们要创建一个名为`students`的表,用于存储学生的信息,包括学号、姓名、年龄、性别和入学日期。我们可以这样编写`CREATE TABLE`语句: ```sql CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, age INT CHECK (age > 0), gender ENUM('M', 'F') NOT NULL, enrollment_date DATE NOT NULL ); ``` 在这个例子中,`student_id`列被设置为自增主键,这意味着每当向表中插入新行时,`student_id`的值会自动增加,无需手动指定。`name`列不允许为空,且最大长度为100个字符。`age`列的值必须大于0。`gender`列的值只能从`'M'`(男性)和`'F'`(女性)中选择,且不允许为空。`enrollment_date`列记录了学生的入学日期,也不允许为空。 #### 五、高级特性 - **索引**:虽然索引不是直接在`CREATE TABLE`语句中定义的(通常在表创建后通过`CREATE INDEX`或`ALTER TABLE`添加),但了解索引对于优化查询性能至关重要。索引可以加快数据检索速度,但也会增加写操作的开销和存储空间的需求。 - **分区**:大型表可以通过分区来提高查询性能和管理效率。分区将表的数据分布到不同的物理部分,但逻辑上仍表现为一个单一的表。 - **触发器**:虽然与`CREATE TABLE`直接不相关,但触发器可以在表上进行INSERT、UPDATE或DELETE操作时自动执行预定义的SQL语句,实现复杂的业务逻辑。 #### 六、总结 `CREATE TABLE`语句是SQL中用于创建新表的基础命令,它允许我们定义表的结构,包括列的数据类型和约束条件。通过合理选择数据类型和设置约束条件,我们可以确保表中数据的准确性和可靠性。此外,了解索引、分区和触发器等高级特性,可以帮助我们进一步优化数据库的性能和管理效率。掌握`CREATE TABLE`语句及其相关概念,是成为一名合格数据库管理员或开发人员的重要一步。
上一篇:
数据库的创建(CREATE DATABASE语句)
下一篇:
命名规则
该分类下的相关小册推荐:
SQL基础教程(中)
PostgreSQL入门教程
SQL基础教程(下)
高性能的Postgres SQL