MySQL数据表操作

前言:

在创建数据表的时候,有时会发现字段遗漏、字段多余、字段名称或者数据类型、属性不对等种种问题,这时我们迫切需要对数据表进行相应的操作。

添加单列:

语法结构:

ALTER TABLE tbl_name ADD [ COLUMN ] col_name column_definition [ FIRST | AFTER col_name ]

注:在添加单列时,需要对此列定义类型,同时可以在结尾处设置列的位置:第一位或者在指定列的后面,如果省略了指定列的位置,则系统默认添加在所有列的最下面。

案例:

首先来查看表 tb_user1 的结构:

由图可以看出,该表只有 id ,username,pid 这三个字段。

对此表添加字段:

添加一个字段 age 并赋予无符号非空整型且默认值为 10 的属性,在这并没有对该字段指定位置。

重新查看下表 tb_user1 的结构:

由图可以看出,表 tb_user1 新增了 age 字段,而且位于所有字段的底部。

我们再添加一个字段,并对添加的字段设置指定位置:

添加一个 password 字段,并指定位置在字段 username 之后,重新查看表结构:

可以发现,password 字段确实在 username 之后。同理,如果选择 FIRST 则添加的字段位于该数据表的第一位。

添加多列:

语法结构:

ALTER TABLE tbl_name ADD [ COLUMN ] ( col_name col_definition , ...)

注:添加多列与添加单列的区别在于,添加多列不能指定列位置,只能在原来的数据表基础上继续添加。

案例:

由图可以看出,同时添加多列时,位置处于数据表的底部。

删除列:

语法结构:

ALTER TABLE tbl_name DROP [ COLUMN ] col_name

案例:

删除字段 address 并查看该表的结构,可以看出字段 address 已经不存在于该表中。

如果要删除多个字段,可以通过以下操作来删除:

可以看出该表同时删除了 password 和 truename 字段。

添加主键约束:

语法结构:

ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ] PRIMARY KEY

[ index_type ] ( index_col_name, ...)

案例:

我们先来创建一张表 tb_user2,并查看该表的创建命令:

可以发现,此表并没有任何的主键约束。

现在我们来对此表添加一个字段 id :

查看该表的结构:

现在给字段 id 设置为主键:

其中,对于 CONSTRAINT 关键字,可以省略不写,如果需要,可以对主键取名称,如图中的PK_user2_id ,而所修饰的主键字段为 id 。查看下表 tb_user2 的结构:

由图可以看出,字段 id 已经是主键。当然除了可以添加主键约束,还可以添加唯一约束。

添加唯一约束:

语法结构:

ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ] UNIQUE

[ index | key ] [ index_name ] [ index_type ] ( index_col_name, ...)

注:添加唯一约束和提交主键约束的不同在于,唯一约束可以添加多个,而主键约束只能添加一个。

案例:

对表 tb_user2 中的字段 username 添加唯一约束,查看表结构:

由图可以看出,字段 username 已经是唯一约束。

添加外键约束:

语法结构:

ALTER TABLE tbl_name ADD [ CONSTRAINT [ symbol ] ] FOREIGN KEY

[ index_name ] ( index_col_name, ...) reference_definition

案例:

当我们想对表 tb_user2 中的字段 pid 去参照 tb_province 表中的字段 id,此时必须给 pid 字段添加外键约束:

再查看表的创建命令:

可以发现,该表已经存在外键约束。

添加/删除默认约束:

语法结构:

ALTER TABLE tbl_name ALTER [ COLUMN ] col_name

{ SET DEFAULT literal | DROP DEFAULT}

案例:

创建一个字段 age ,并查看表结构:

给字段 age 设置默认值 20,并查看表结构:

删除默认值,并查看表结构:

删除主键约束:

语法结构:

ALTER TABLE tb_user DROP PRIMARY KEY

案例:

首先查看表 tb_user2 的表结构:

此时,字段 id 为主键约束,我们通过以下操作来删除主键约束,并查看表结构:

可以看出,字段 id 已经不再是主键约束。

删除唯一约束:

语法结构:

ALTER TABLE tbl_name DROP { INDEX | KEY } index_name

注:因为一张表可以存在多个唯一约束,所以在删除的时候需要指定字段名。

案例:

先查看表 tb_user2 中约束的名字:

可以发现,在字段 username 上,创建了一个名为 username 的约束,这时,我们通过以下操作来删除 username 的唯一约束,并查看表结构:

再查看下表的约束条件:

可以发现,字段 username 已经不再是唯一约束,只剩下一个约束。

删除外键约束:

语法结构:

ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

注:删除外键约束前,需要知道约束的名字

案例:

先查看下外键约束的名称:

可以发现外键约束的名称为系统所生成的 tb_user2_ibfk_1,所以可以通过以下操作来删除外键约束:

再查看下该表的创建命令:

可以发现该表已经不存在外键约束,但是 pid 还是具有索引,如果要删除索引可以通过以下操作来删除:

再次查看表创建命令:

可以发现,字段 pid 已经不再具有索引。

修改列定义:

语法结构:

ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition 

[FIRST | AFTER col_name]

案例:

先来查看一下表 tb_user2 的结构:

可以发现,现在字段 id 并没有处在第一位。字段的位置其实并没有任何影响,只不过说习惯将字段 id 放在第一位。

调整一下字段 id 的位置:

重新查看表结构:

字段 id 已经位于第一位。

修改字段 id 的数据类型:

再查看一下表结构:

可以发现,字段 id 的数据类型由原来的 smallint 变成 tinyint 。

注:如果将大类型修改为小类型,会造成数据丢失,慎改。

修改列名称:

语法结构:

ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name 

new_col_name column_definition [FIRST | AFTER col_name]

注:CHANGE 关键字不仅可以修改列定义,还需修改列名称。

案例:

查看下表 tb_user2 结构:

现在我们将字段 pid 的名称修改为 p_id ,并修改为 tinyint 数据类型:

再查看数据表结构:

可以看出,原先的字段 pid 变成了 p_id,数据类型也变成了 tinyint 。

删除数据表:

语法结构:

DROP TABLE tbl_name

修改数据表的名称:

语法结构:

⑴ ALTER TABLE tbl_name RENAME [TO | AS] new_tbl_name

⑵ RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2] ...

案例:

查看下当前数据库下的所有数据表:

现在我们将表 tb_users 修改为 tb_user3:

再查看下当前数据库的所有表:

可以看出,原先的表 tb_users 已经修改为 tb_user3 。

同样可以使用方法二进行修改,而且可以对多张数据表进行更名,这里就不进行操作了。

注:某些修改的数据列或者数据表曾经被引用的情况下,一旦进行修改,将会导致视图或者存储过程无法正常工作,所以我们尽量不要随意的更改数据列的名字和数据表的名字。

总结:

修改数据表操作可以分为:

⑴ 针对字段的操作:添加或删除字段、修改列定义,修改列名称等

⑵ 针对约束的操作:添加或删除各种约束

⑶ 针对数据表的操作:数据表的更名(两种方式)

以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!

你可能感兴趣的:(MySQL数据表操作)