SQL Create 1
1. 定义
维基百科:SQL
CREATE
指令负责数据库对象的创建,数据库、数据表、数据库索引、函数等都可以使用CREATE
来创建。
慕课解释:
CREATE
指令功能十分强大,是 SQL 中最为关键的指令之一,通过它你可以轻松的在数据库中创建你所需要的对象,当然这也使 CREATE 的语法有些复杂,掌握 CREATE 是学好 SQL 的关键一步。
2. 前言
本小节,我们将一起学习 SQL Create
。
Create 是一个较为复杂的指令,我们不会在一个小节中将它全盘托出,而是通过多个知识点将其串联起来。在这个小节里面,我们会介绍新建数据库
和新建数据表
这两个最常用的功能点,其中新建数据表
的语法是比较复杂的,它不仅涉及字段数据类型
,还涉及到了SQL约束
方面的内容。
考虑到篇幅问题,在本小节中我们会着重介绍字段数据类型
的知识,而将SQL约束
将放在下一节再详细介绍。
3. 新建数据库
使用CREATE DATABASE
可以在 RDBMS 中新建数据库。
语法如下:
CREATE DATABASE [database_name];
其中[]
中database_name
代表数据库名称。
3.1 例1 新建 imooc 数据库
请书写 SQL 语句,新建一个名为imooc
的数据库。
分析:
按照上面的语法格式,我们把占位符替换为imooc
即可。
语句:
CREATE DATABASE imooc;
4. 数据类型
与创建数据库比起来,创建数据表要复杂的多,我们需要为表中的每个字段明确地指明数据类型,数据表才可被创建,因此我们先来学习 SQL 中的数据类型。
数据类型
规定了某字段只能容纳和表示某种特定的数据类型。
常见的数据类型有三种,它们分别是:数值型
,字符型
和日期型
。
4.1 数值型
数值类型就是我们在数学中常见的数字,它也被分为整数类型
和小数类型
两大类。整数类型默认有符号,即可以为负数,如 -1 ,如需无符号,则需要unsigned
关键字来约束,约束后不可表示负数。
整数类型有数据长度的限制,如果在数据插入时超出其整型范围,数据库会报异常并插入失败。如在64机上,int 类型大小为32位,即4字节,如果插入的数字大小超过了2^32,插入便会失败,此时你需要使用容量更大整数类型,如 bigint,它的大小是 64 位。
整数类型可以接受一个参数,我们通常把这个参数称作长度,不过它并不是整数真正的长度,而是它的最大显示宽度。
小数类型可以理解为两部分
:整数部分 + 小数部分。因此小数类型在指定的时候可以传入两个参数,第一个参数表示整体的长度,第二个参数则代表小数部分的长度。
数值型常见类型如下表所示:
数据类型 | 最大容量(字节) | 描述 |
---|---|---|
tinyint(size) | 1 | 极小整型 |
smallint(size) | 2 | 小整型 |
mediumint(size) | 3 | 中整型 |
int/integer(size) | 4 | 整型,最为广泛 |
bigint(size) | 8 | 大整型 |
float(size,d) | 4 | 单精度小数 |
double(size,d) | 8 | 双精度小数 |
decimal(size,d) | 8 | 货币类型 |
numberic(size,d) | 8 | 同decimal |
说明: 表中数据类型一栏中的 size 表示 整体的长度,d 表示小数部分的长度。
4.2 字符型
字符类型则用来表示我们生活中常见的文本和字符,根据字符串的长度,我们可将其分为短文本
和长文本
两类。
常见的短文本类型有char
和varchar
两种,其中char
不可变长,而varchar
可变长。长文本类型有text
和blob
等,text
用来保存长文本,而blob
用来保存二进制流数据。
字符型常见类型如下表所示:
数据类型 | 可否变长 | 描述 |
---|---|---|
char(size) | 不可 | 固定长度短字符串 |
varchar(size) | 可 | 不固定长度短字符串 |
text | 可 | 长字符串,保存文章内容 |
blob | 可 | 二进制流,保存图片,媒体信息 |
4.3 日期型
日期类型是三大类型中最复杂的一种类型,涉及的内容也比较多,我们将用SQL 日期类型一整节的篇幅来详细介绍。
5. 新建数据表
使用CREATE TABLE
指令可以在数据库中新建数据表。
它的基础语法如下:
CREATE TABLE [table_name]
(
[col1] [datatype1],
[col2] [datatype2],
[col3] [datatype3],
....
);
CREATE TABLE 指令是 SQL 中一个颇为复杂的指令,上面只给出了基础语法,在后面章节我们会逐渐介绍更为复杂的语法。上面的语法中col
表示字段名
,如username
。datatype
表示数据类型,如int(10)
,考虑到会有多个字段和数据类型,因此添加数字后缀 1,2。
提示: 一张表可以有多个字段,但每个字段只能有一个数据类型。
5.1 例2 新建 imooc_user 表
请书写 SQL 语句,新建imooc_user
数据表,表分别有username
,age
,score
这三个字段。
分析:
imooc_user 有三个字段,其中 username 代表用户名,一般情况下,用户名都使用字符串表示,且每个人的用户名长短不一,为可变短文本,所以使用数据类型 varchar。且名字都不会太长(俄罗斯人除外?),长度 20 即可;age 代表年龄,是典型的整数类型,即 int;score 代表分数,是典型的浮点数类型,即 float。
语句:
整理可得语句如下:
CREATE TABLE imooc_user
(
username varchar(20),
age int,
score float
);
执行成功后,可得 imooc_user 表的信息:
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(20) | YES | | <null> | |
| age | int(11) | YES | | <null> | |
| score | float | YES | | <null> | |
+----------+-------------+------+-----+---------+-------+
5.2 例3 新建 article 表
请书写 SQL 语句,新建article
数据表,表分别有id
,title
,content
,rank
,price
五个字段。
分析:
article 表共 5 个字段,其中 id 字段作为唯一标识,采用整型来表示;title 是文章标题,为可变的短文本,即 varchar 类型,一般标题规定在 50 字符以内;content 表示文章内容,是可变的长文本,用 text 类型来容纳; rank 表示文章排名,使用 int 类型;price 代表文章价格,价格精确到分,使用 decimal 表示,小数位数为 2 位。
语句:
整理可得如下语句:
CREATE TABLE article
(
id int,
title varchar(50),
content text,
`rank` int,
price decimal(10,2)
);
执行语句,创建成功后,article 表的信息如下:
+---------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------+------+-----+---------+-------+
| id | int(11) | YES | | <null> | |
| title | varchar(50) | YES | | <null> | |
| content | text | YES | | <null> | |
| rank | int(11) | YES | | <null> | |
| price | decimal(10,2) | YES | | <null> | |
+---------+---------------+------+-----+---------+-------+
注意: 在一些数据库中,如 MySQL 把 rank 当作了关键字,因此需要加上转义符号 `` 才能新建成功。
6. 小结
- SQL 数据类型其实是颇为繁杂,一些 RDBMS 还有特定的数据类型,我们推荐你熟记上面所提到的三大常用数据类型,而其它的类型在需要的时候查阅即可。
- 创建数据表是学习 SQL 的基本功,请一定多多练习。