6.1创建表
创建表是指在已存在的数据库中建立新表。这是建立数据库最重要的一步,是进行其 他表操作的基础。本节主要讲解如何创建表。
6.1.1创建表的语法形式
MySQL中,创建表是通过SQL语句CREATE TABLE实现的。其语法形式如下。
CREATE TABLE表名(属性名 数据类型[完整性约束条件],属性名 数据类型[完整性约束条件],...属性名 数据类型);
其中,“表名”参数表示所要创建的表的名称;“属性名”参数表示表中字段的名称; “数据类型”参数指定字段的数据类型,具体内容参照第4章;“完整性约束条件”参数指 定字段的某些特殊约束条件。下文中会详细讲解。
注意:在使用CREATE TABLE语句创建表时,首先要使用USE语句选择数据库。选择 数据库语句的基本格式为“USE数据库名”。如果没有选择数据库,创建表时 会出现 “ERROR 1046 (3D000): No database selected” 错误。
表名不能为SQL语言的关键字,如create、updata和order等都不能做表名。一个表 中可以有一个或多个属性。定义时,字母大小写均可,各属性之间用逗号隔开,最后一个 属性后不需要加逗号。
【示例6-1】下面创建一个表名为example0的表,SQL代码如下:
CREATE TABLE exampleO(id INT,name VARCHAR(20),sex BOOLEAN);
代码运行后,example0表包含3个字段。其中,id字段是整型;name字段是字符串 型;sex字段是布尔型。
完整性约束条件是对字段进行限制。要求用户对该属性进行的操作符合特定的要求。 如果不满足完整性约束条件,数据库系统将不执行用户的操作。其目的是为了保证数据库 中数据的完整性。MySQL中基本的完整性约束条件如表6.1所示。
约束条件 | 说明 |
---|---|
PRIMARY KEY | 标识该属性为该表的主键,可以唯一的标识对应的元组 |
FOREIGN KEY | 标识该属性为该表的外键,是与之联系的某表的主键 |
NOT NULL | 标识该属性不能为空 |
UNIQUE | 标识该属性的值是唯一的 |
AUTO_INCREMENT | 标识该属性的值自动增加,这是MySQL的SQL语句的特色 |
DEFAULT | 为该属性设置默认值 |
设置表的主键
主键是表的一个特殊字段。该字段能唯一地标识该表中的每条信息。主键和记录的关 系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证 是用来标明人的身份,每个人都具有唯一的身份证号。设置表的主键指在创建表时设置表 的某个字段为该表的主键。
主键的主要目的是帮助MySQL以最快的速度查找到表中的某一条信息。主键必须满 足的条件就是主键必须是唯一的,表中任意两条记录的主键字段的值不能相同;主键的值 是非空值。主键可以是单一的字段,也可以是多个字段的组合。
1.单字段主键
主键是由一个字段构成时,可以直接在该字段的后面加上PRIMARY KEY来设置主键。语法规则如下:
属性名 数据类型 PRIMARYKEY
其中,“属性名”参数表示表中字段的名称;“数据类型”参数指定字段的数据类型。
【示例6-2】下面在examplel表中设置stu_id作为主键,SQL代码如下:
CREATE TABLE example1( stuJd INT PRIMARY KEY,stu_name VARCHAR(20), stu_sex BOOLEAN);
代码运行后,example1表中包含3个字段。stu_id字段是整型;stu_name字段是字符串型;stu_sex是布尔型。其中,stu_id字段是主键。
2.多字段主键
主键是由多个属性组合而成时,在属性定义完之后统一设置主键。语法规则如下:
PRIMARY KEY(属性名1,属性名2,...,属性名n)
【示例6-3】下面在example2表中设置stu_id与course_id两个字段为主键,SQL代码 如下:
CREATE TABLE example2( stu_id INT,course_id INT, grade FLOAT,PRIMARY KEY(stuId, courseId));
代码运行后,example2表中包含3个字段。其中,stuId, courseId两个字段成为主键;stu_id和course_id两者的组合可以确定唯一的一条记录。
6.1.3设置表的外键
外键是表的一个特殊字段。如果字段sno是一个表人的属性,且依赖于表8的主键。 那么,称B为父表,表A为子表,sno为表A的外键。通过sno字段将父表B和子表A建立关联关系。设置表的外键指在创建表设置某个字段为外键。本小节主要讲解外键设置的原则和外键的作用和设置外键的方法。
设置外键的原则就是必须依赖于数据库中已存在的父表的主键;外键可以为空值。 外键的作用是建立该表与其父表的关联关系。父表中删除某条信息时,子表中与之对 应的信息也必须有相应的改变。例如,stu_id是student表的主键,student_id是grade表的外键。当stu_id为‘123’同学退学了,需要从student表中删除该学生的信息。那么,grade 表中stu_id为‘123’的所有信息也应该同时删除。这样可以保证信息的完整性。 设置外键的基本语法规则如下:
CONSTRAINT 外键别名 FROMEIGN KEY(属性1.1,属性1.2,...,属性1.n)REFERENCES 表名(属性2.1,属性2.2,...,属性2.n)
其中,“外键别名”参数是为外键的代号;“属性1”参数列表是子表中设置的外键;“表名”参数是指父表的名称;“属性2”参数列表是父表的主键。
6.1.4设置表的非空约束
非空性是指字段的值不能为空值(NULL)。非空约束将保证所有记录中该字段都有 值。如果用户新插入的记录中,该字段为空值,则数据库系统会报错。例如,在id字段加上非空约朿,id字段的值就不能为空值。如果插入记录的id字段的值为空,该记录将不能插入。设置表的非空约束是指在创建表时为表的某些特殊字段加上NOT NULL约束条件。 设置非空约束的基本语法规则如下:
属性名数据类型NOT NULL
6.1.5设置表的唯一性约束
唯一性是指所有记录中该字段的值不能重复出现。设置表的唯一性约束是指在创建表时,为表的某些特殊字段加上UNIQUE约束条件。唯一性约束将保证所有记录中该字段的 值不能重复出现。例如,在id字段加上唯一性约束,所以记录中id字段上不能出现相同的值。例如,在表的id字段加上唯一性约束,那么每条记录的id值都是唯一的,不能出现重复的情况。如果一条的记录的id为‘0001’,那么该表中就不能出现另一条记录的id为‘0001’。设置唯一性约束的基本语法规则如下:
属性名数据类型UNIQUE
1.6设置表的属性值自动增加
AUTO_INCREMENT是MySQL数据库中一个特殊的约朿条件。其主要用于为表中插入的新记录自动生成唯一的ID。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT约束的字段可以是任何整数类型 (TINYINT、SMALLINT、INT和BIGINT等)。默认情况下,该字段的值是从1开始自增。设置属性值字段增加的基本语法规则如下:
属性名 数据类型 AUTO_INCREMENT
6.1.7设置表的属性的默认值
在创建表时可以指定表中字段的默认值。如果插入一条新的记录时没有为这个字段赋值,那么数据库系统会自动为这个字段插入默认值。默认值是通过DEFAULT关键字来设置的。设置默认值的基本语法规则如下:
属性名 数据类型 DEFAULT默认值