创建表
表是数据库储存数据的基本单位。一个表包含若干个字段或记录。表的操作包括创建新表、修改表、删除表。
1、创建表
1.1 创建表的语法形式:
CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件],
属性名 数据类型 [完整性约束条件],
....
属性名 数据类型
);
其中,表名 参数表示所要创建的表的名称;属性名 参数表示表中字段的名称;数据类型 参数指定字段的数据类型;完整性约束条件 参数指定字段的某些特殊约束条件。
在创建表时,首先要使用USE语句选择数据库,如: mysql> USE test1; 选择数据库test1
表名不能为SQL语句的关键字,如create、updata、order等都不能做表名,一个表中可以有一个或多个属性,定义时,字母大小写均可,各属性之间用逗号隔开,最后一个属性不需要加逗号。
mysql> CREATE TABLE example0(id INT,name VARCHAR(20),sex BOOLEAN);
example0 表包含3个字段。其中,id 字段是整型;name 字段是字符串型;sex 字段是布尔型。
mysql> SHOW TABLES; 查询表
完整性约束条件是对字段进行限制。要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不执行用户的操作。其目的是为了保证数据库中数据的完整性。MySQL中基本的完整性约束条件如表1.1
表 1.1 完整性约束条件表
约束条件 |
说明 |
PRIMARY KEY |
标识该属性为该表的主键,可以唯一的标识对应的元组 |
FOREIGN KEY |
标识该属性为该表的外键,是与之联系的某表的主键 |
NOT NULL |
标识该属性不能为空 |
UNIQUE |
标识该属性的值是唯一的 |
AUTO_INCREMENT |
标识该属性的值自动增加,这 是MySQL的SQL语句的特色 |
DEFAULT |
为该属性设置默认值 |
1.2 设置表的主键
主键是表的一个特殊字段。该字段能唯一地标识该表中的每条信息。设置表的主键指在创建表时设置表的某个字段为该表的主键。帮助MySQL快速查找到表中的某条信息,主键必须是唯一的,任意两条记录的主键字段的值不能相同;主键的值是非空值,可以是单一的字段,也可以是多个字段的组合。
1.2.1 单字段主键
主键由一个字段构成时,可以直接在该字段的后面加上PRIMARY KEY来设置主键。
语法规则: 属性名 数据类型 PRIMARY KEY 其中, 属性名 参数表示表中字段的名称;数据类型 参数指定字段的数据类型。
mysql> CREATE TABLE example1(stu_id INT PRIMARY KEY,
-> stu_name VARCHAR(20),
-> stu_sex BOOLEAN
-> );
example1 表中包含了3个字段。stu_id 字段是整形;stu_name 字段是字符串型;stu_sex 字段是布尔型。其中stu_id 字段是主键。
1.2.2 多字段主键
主键是由多个属性组合而成时,在属性定义完之后统一设置主键。
语法规则: PRIMARY KEY(属性名1,属性名2,......,属性名n)
mysql> CREATE TABLE example2(stu_id INT,
-> course_id INT,
-> grade FLOAT,
-> PRIMARY KEY(stu_id,course_id)
-> );
example2 表中包含3个字段。其中stu_id与course_id两个字段为主键。stu_id和course_id两者的组合可以确定唯一的一条记录。
1.3 设置表的外键
外键是表的一个特殊字段。如果字段sno是一个表A的属性,且依赖于表B的主键,数据类型必须一致。那么,称表B为父表,表A为子表,sno为表A的外键。通过sno字段将父表B和子表A建立关联关系。设置表的外键指在创建表设置某个字段为外键。
设置外键的原则就是必须依赖于数据库已存在的父表的主键;外键可以为空值。外键的作用是建立该表与父表的关联关系,父表中删除某条信息时,子表中与之对应的信息也必须有相应的改变。 语法规则:
CONSTRAINT 外键别名 FOREIGN KEY(属性1.1,属性1.2,......属性1.n)
REFERENCES 表名(属性2.1,属性2.2,......属性2.n)
其中,"外键别名"参数是为外键的代号;"属性1"参数列表是子表中设置的外键;"表名"参数是指父表的名称;"属性2"参数列表是父表的主键。
mysql> CREATE TABLE example3(id INT PRIMARY KEY,
-> stu_id INT,
-> course_id INT,
-> CONSTRAINT c_fk FOREIGN KEY(stu_id,course_id)
-> REFERENCES example2(stu_id,course_id)
-> );
example3表中包含3个字段。其中,id字段是主键;stu_id和course_id字段为外键;c_fk是外键的别名;example2表称为example3表的父表;example3表的外键依赖于父表example2的主键stu_id和course_id。
1.4 设置表的非空约束
非空性是指字段的值不能为空值(NULL)。非空约束保证所有记录中该字段都有值,如插入记录的id字段的值为空,将不能插入并报错。
基本语法: 属性名 数据类型 NOT NULL
mysql> CREATE TABLE example4(id INT NOT NULL PRIMARY KEY,
-> name VARCHAR(20) NOT NULL,
-> stu_id INT,
-> CONSTRAINT d_fk FOREIGN KEY(stu_id)
-> REFERENCES example1(stu_id)
-> );
example4表中包含3个字段。其中,id 字段为主键;id和name字段为非空字段;stu_id字段为外键;d_fk为外键别名;example1表为example4表的父表;example4的外键依赖于父表的主键stu_id。
1.5 设置表的唯一性约束
唯一性是指所有记录中该字段的值不能重复出现,设置表的唯一性约束是指在创建表时,为表的某些特殊字段加上UNIQUE约束条件。
基本语法: 属性名 数据类型 UNIQUE
mysql> CREATE TABLE example5(id INT PRIMARY KEY,
-> stu_id INT UNIQUE,
-> name VARCHAR(20) NOT NULL
-> );
example5表中包含3个字段。其中,id字段为主键;stu_id字段为唯一值;name字段为非空字段。
1.6 设置表的属性值自动增加
AUTO_INCREMENT 是MySQL数据库中一个特殊的约束条件。其主要用于为表中插入的新记录自动生成唯一的ID。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。AUTO_INCREMENT 约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT 和BIGINT等)。默认情况下,该字段的值是从 1 开始自增。如果第一记录设置了该字段的初值,那么从初值开始自增。
基本语法: 属性名 数据类型 AUTO_INCREMENT
mysql> CREATE TABLE example6(id INT PRIMARY KEY AUTO_INCREMENT,
-> stu_id INT UNIQUE,
-> name VARCHAR(20) NOT NULL
-> );
example6表中包含3个字段。其中,id字段为主键,且每插入一条新纪录id的值会自动增加1;stu_id字段为唯一值,该字段值不能重复;name字段为非空字段,该字段的值不能为空值(NULL)。
1.7 设置表的属性默认值
在创建表时可以指定表中字段的默认值。如果插入一条新的记录时没有为这个字段赋值,那么数据库系统会自动为这个字段插入默认值。默认值是通过DEFAULT关键字来设置的。
基本语法: 属性名 数据类型 DEFAULT 默认值
mysql> CREATE TABLE example7(id INT PRIMARY KEY AUTO_INCREMENT,
-> stu_id INT UNIQUE,
-> name VARCHAR(20) NOT NULL,
-> English VARCHAR(20) DEFAULT 'zero',
-> Math FLOAT DEFAULT 0,
-> Computer FLOAT DEFAULT 0
-> );
example7表中包含6个字段。其中,id字段为主键,且每插入一条新纪录 id 的值就会自动增加;stu_id 字段为唯一值,该字段的值不能重复;name 字段为非空字段,该字段的值不能为空值(NULL);English 字段的默认值为zero;Math 字段和Computer 字段默认值为 0。如果没有使用DEFAULT 关键字指定字段的默认值,也没有指定字段为非空,那么字段的默认值为空(NULL)。