本篇中将全面的介绍关于 MySql 数据库中的关于表的增删查改,其中主要分为表的创建、查看表结构、修改表以及删除表,目录如下:
目录
表的创建(增加)
创建表的语法格式和样例如下:
create table table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; // field 表示列名 // datatype 表示列的类型 // character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 // collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 // 样例如下: mysql> create table user1( -> id int, -> name varchar(20) comment '用户的姓名', -> password char(32) comment '用户的密码', -> birthday date comment '用户的生日' -> )engine=InnoDB; Query OK, 0 rows affected (0.02 sec) mysql> create table user2( -> id int, -> name varchar(20) comment '用户的姓名', -> password char(32) comment '用户的密码', -> birthday date comment '用户的生日' -> )engine=MyIsam; Query OK, 0 rows affected (0.01 sec) // 对应目录下创建的文件 root@hcss-ecs-1078:/var/lib/mysql/user_test# ll total 128 drwxr-x--- 2 mysql mysql 4096 Aug 26 16:10 ./ drwx------ 9 mysql mysql 4096 Aug 26 15:42 ../ -rw-r----- 1 mysql mysql 114688 Aug 26 16:09 user1.ibd -rw-r----- 1 mysql mysql 4004 Aug 26 16:10 user2_371.sdi -rw-r----- 1 mysql mysql 0 Aug 26 16:10 user2.MYD -rw-r----- 1 mysql mysql 1024 Aug 26 16:10 user2.MYI
当创建出的表之后,会在对应的目录下创建出对应的表文件。
查看表结构
查看表结构一共有以下两种方式,如下:
desc table_name; mysql> desc user1; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | password | char(32) | YES | | NULL | | | birthday | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) show create table table_name \G mysql> show create table user1 \G *************************** 1. row *************************** Table: user1 Create Table: CREATE TABLE `user1` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL COMMENT '用户的姓名', `password` char(32) DEFAULT NULL COMMENT '用户的密码', `birthday` date DEFAULT NULL COMMENT '用户的生日' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
修改表
我们在的项目开发中,经常会修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等,这个时候我们就需要修改表了,主要使用的关键字为 alter,如下:
修改表名
修改表名:alter table tablename1 rename to tablename2; mysql> show tables; +---------------------+ | Tables_in_user_test | +---------------------+ | user1 | +---------------------+ 1 row in set (0.00 sec) mysql> alter table user1 rename to user; Query OK, 0 rows affected (0.02 sec) mysql> show tables; +---------------------+ | Tables_in_user_test | +---------------------+ | user | +---------------------+ 1 row in set (0.00 sec)
增加表元素
insert into (field1, field2, filed3,...) vaules (data1, data2, data3,...) mysql> insert into user values (2, '张三', '33556', '2018-11-26'); Query OK, 1 row affected (0.01 sec) mysql> insert into user values (3, '李四', '33556', '2024-2-25'); Query OK, 1 row affected (0.00 sec) mysql> insert into user values (4, '王五', '35546', '2020-2-25'); Query OK, 1 row affected (0.00 sec) // 显示表中所有的数据 mysql> select * from user; +------+--------+----------+------------+ | id | name | password | birthday | +------+--------+----------+------------+ | 2 | 张三 | 33556 | 2018-11-26 | | 3 | 李四 | 33556 | 2024-02-25 | | 4 | 王五 | 35546 | 2020-02-25 | +------+--------+----------+------------+
给表增加一列
语法: alter table tablename add (column datatype [DEFAULT expr][,column datatype]...); mysql> alter table user add image varchar(128) comment '用户图片' after birthday; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from user; +------+--------+----------+------------+-------+ | id | name | password | birthday | image | +------+--------+----------+------------+-------+ | 2 | 张三 | 33556 | 2018-11-26 | NULL | | 3 | 李四 | 33556 | 2024-02-25 | NULL | | 4 | 王五 | 35546 | 2020-02-25 | NULL | +------+--------+----------+------------+-------+
指定列修改
mysql> show create table user \G *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL COMMENT '用户的姓名', `password` char(32) DEFAULT NULL COMMENT '用户的密码', `birthday` date DEFAULT NULL COMMENT '用户的生日', `image` varchar(128) DEFAULT NULL COMMENT '用户图片' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec) 语法: alter table tablename modify (column datatype [DEFAULT expr][,column datatype]...); mysql> alter table user modify name varchar(20); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show create table user \G *************************** 1. row *************************** Table: user Create Table: CREATE TABLE `user` ( `id` int DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `password` char(32) DEFAULT NULL COMMENT '用户的密码', `birthday` date DEFAULT NULL COMMENT '用户的生日', `image` varchar(128) DEFAULT NULL COMMENT '用户图片' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
删除表的某一列
语法: alter table tablename drop (column); mysql> alter table user drop birthday; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from user; +------+--------+----------+-------+ | id | name | password | image | +------+--------+----------+-------+ | 2 | 张三 | 33556 | NULL | | 3 | 李四 | 33556 | NULL | | 4 | 王五 | 35546 | NULL | +------+--------+----------+-------+ 3 rows in set (0.00 sec)
修改某一列的名称
语法: alter table tablename change column new_column datatype; mysql> alter table user change image picture varchar(128); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select * from user; +------+--------+----------+---------+ | id | name | password | picture | +------+--------+----------+---------+ | 2 | 张三 | 33556 | NULL | | 3 | 李四 | 33556 | NULL | | 4 | 王五 | 35546 | NULL | +------+--------+----------+---------+ 3 rows in set (0.00 sec)
删除表
删除表的操作和语法如下:
语法: drop [temporary] table [if exists] tbl_name [, tbl_name] .. // 其中[]内的内容可有可无 mysql> show tables; +---------------------+ | Tables_in_user_test | +---------------------+ | user | +---------------------+ 1 row in set (0.01 sec) mysql> drop table user; Query OK, 0 rows affected (0.02 sec) mysql> show tables; Empty set (0.00 sec)
一般不建议直接删除表,因为数据表基本已经算得上是位于整个项目的最顶层,一旦删除或者修改都有可能导致很多问题。