一、数据库表概述
在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。
二、数据表的创建语句
通常在创建表时,应该使用语句USE 数据库名,指定在哪个数据库中操作,如果没有指定库时我们也可以在创建时,用 <数据库名.数据表>来进行创建。
创建数据表语句:
create table <表名>
(字段名1,数据类型 [列级别约束条件] [默认值],字段名2,数据类型 [列级别约束条件] [默认值],…………[表级别约束条件]
);
创建表的注意事项:
1、创建表的名称不区分大小写,不能使用SQL语句中的关键字。
2、数据表中的一个字段(列)的名称和数据类型要创建多列(个),要用逗号分割。
三、约束条件
1、主键约束
主键,也成为主码,时表中一列或多列的组合,主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系,他们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。
主键从功能上来看相当于非空且唯一。
① 直接在定义字段时在后面进行定义,也称为行级主键约束、单字段主键。
create table <表名>
(字段名1,数据类型 primary key [默认值],…………
);
② 在定义完表时,在后面进行定义,也称为表级主键约束,可以多个字段联合组成。
create table <表名>
(字段名1,数据类型 [列级别约束条件] [默认值],字段名2,数据类型 [列级别约束条件] [默认值],…………primary key 字段名1 [,字段名2,……字段名n]
);
2、外键约束
外键用来两个表的数据之间建立连接,它可以是一列或者都多列,一个表可以有一个或者多个外键,外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某一个值。
外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另一个表的主键。外键主要作用是保证数据引用的完整性,定义外键之后,不允许删除另一个表中具有关联关系的行。外键的作用是保持数据一致性、完整性。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。
[constraint <外键名>] foreign key 字段名1 [,字段名2,……]
peferences <主表名> 主键列1 [,主键列2,……]
“外键名”为定义的外键约束的名字,一个表中不能有相同名称的外键,"字段名"表示子表需要添加外键约束的字段列;"主表名"即被子表外键所依赖的表的名称;"主键列" 表示主表定义的主键列,或列组合。
3、非空约束
非空约束就是指该字段的值不能为空。用户在添加数据的时候必须指定值,否则会报错。
create table <表名>
(字段名1,数据类型 not null [默认值],…………
);
4、唯一约束
唯一性约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。如果不给唯一约束起名,默认与列名相同。
语法如下:
create table <表名>
(字段名1,数据类型 unique [默认值],…………
);
或者
create table <表名>
(字段名1,数据类型 [行级约束] [默认值],…………
unique <字段名>
);
unique和primary key的区别:一个表中可以有多个字段声明为unique,但只能有一个primary key声明;声明为primary key的列不允许有空值,但是声明为unique的字段允许为空值(NULL)的存在。
5、默认值约束
默认值约束指定某一列的默认值,当一个值出现比较多就可以用次约束,方便输入数据提高速度。
语法如下:
create table <表名>
(字段名1,数据类型 [行级约束条件] default 默认值,…………
);
6、自动增加
auto_increment关键字来实现,不指定步长时,默认自动加1,一个表中只能有一个字段使用自定增加约束,且该字段必须为主键的一部分,该约束的字段类型只能是整型类型。
create table <表名>
(字段名1,数据类型 primary key auto_increment [默认值],…………
);
四、查看数据表结构
1、查看基本结构
mysql> desc books;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| bk_id | int(11) | NO | PRI | NULL | |
| bk_title | varchar(50) | NO | | NULL | |
| copyright | year(4) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> describe books;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| bk_id | int(11) | NO | PRI | NULL | |
| bk_title | varchar(50) | NO | | NULL | |
| copyright | year(4) | NO | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
2、查看表的创建详细结构
mysql> show create table books;
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| books | CREATE TABLE `books` (`bk_id` int(11) NOT NULL,`bk_title` varchar(50) NOT NULL,`copyright` year(4) NOT NULL,PRIMARY KEY (`bk_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
五、修改表的操作
1、修改表名
alter table <旧表名> [to] <新表名>;
2、修改字段的数据类型
alter table <表名> modefiy <字段名> <数据类型>;
3、修改字段名
alter table <表名> change <旧字段名> <新字段名> <新数据类型>;
4、添加字段
在最后一列添加一个字段名
alter table <表名> add <新字段名> <数据类型>;
在第一列增加一个字段或者指定在已经存在的字段后增加一个字段
alter table <表名> add <新字段名> <数据类型> <first | after 已经存在的字段名>;
5、删除字段
alter table <表名> drop <字段名>;
6、修改字段的排列位置
alter table <表名> modifiy <字段名1> <数据类型> first | after <字段名2>;
"字段名1" 指定要修改位置的字段,"数据类型"指"字段名1"的数据类型,"first"为可选参数,将指定"字段1"修改为表的第一个字段,"after 字段2"指将"字段1 "插入到"字段2"后面。
7、修改表的存储引擎
alter table <表名> engine=存储引擎类型;
8、删除表的外键约束
alter table <表名> drop foreign key <外键约束名>;
9、删除数据表
一次可以删除一个或者多个数据库表
drop table [if exists] <表名>;
参考书籍:MySQL5.7从入门到精通-清华大学出版社