跟沐风晓月一起玩转数据库之MySQL数据库表操作技巧与实用方法解析

前言

今天我们开始探讨数据库表的操作,包含了表的增删改查,但不包含数据的增删改查,想要了解更多关于数据库表中对表中数据进行增删改查的方法,参见下篇文章。

可以关注我的云原生社区云原生社区
也可以关注我的英语社区从零开始学英语

一. 创建表

创建表的语法如下:

create table 表名(
    字段名 类型 约束,
    字段名 类型 约束
    ...
)

1.1 创建student 表

MySQL [(none)]> create database school;
Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> use school
Database changed
MySQL [school]> create table students(id int ,name varchar(50),age int,email varchar(50),address varchar(200));
Query OK, 0 rows affected (0.01 sec)

MySQL [school]> 

1.2 植物大战僵尸数据库表

CREATE TABLE plants_vs_zombies (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  type VARCHAR(50) NOT NULL,
  sun_cost INT NOT NULL,
  damage INT,
  health INT,
  recharge_time INT,
  special_ability VARCHAR(100),
  description VARCHAR(200)
);

注释:

  • id"字段:用于唯一标识每个植物的ID,采用INT数据类型,并使用PRIMARY KEY约束。
  • "name"字段:用于存储植物的名称,采用VARCHAR(50)数据类型,并设置为NOT NULL,表示该字段不能为空。
  • "type"字段:用于存储植物的类型,采用VARCHAR(50)数据类型,并设置为NOT NULL。
  • "sun_cost"字段:用于存储植物的太阳能消耗值,采用INT数据类型,并设置为NOT NULL。
  • "damage"字段:用于存储植物的攻击伤害值,采用INT数据类型。 "health"字段:用于存储植物的生命值,采用INT数据类型。
  • "recharge_time"字段:用于存储植物的充能时间,采用INT数据类型。
  • "special_ability"字段:用于存储植物的特殊能力描述,采用VARCHAR(100)数据类型。
  • "description"字段:用于存储植物的描述信息,采用VARCHAR(200)数据类型。

二. 查看创建的表结构

2.1 使用desc查看

MySQL [school]> desc students;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(50)  | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)


2.2 使用explain 查看

MySQL [school]> explain students;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(50)  | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

2.3 使用 show columns from 查询

MySQL [school]> show columns from students;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(50)  | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)


如果你不是在csdn查看这篇文章,可能会出现文章不全的情况,建议在csdn搜索:我是沐风晓月。

2.4 查看创建表执行了哪些命令

MySQL [school]> show create table student;
ERROR 1146 (42S02): Table 'school.student' doesn't exist
MySQL [school]> show create table students;
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                           |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students | CREATE TABLE `students` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  `address` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MySQL [school]> 

三. 表的修改

3.1 修改表名称

语法: alter table 表名 rename 新表名;

  • 案例1: 把students 改为student
MySQL [school]> show tables;
+------------------+
| Tables_in_school |
+------------------+
| students         |
+------------------+
1 row in set (0.00 sec)

MySQL [school]> alter table students rename student;
Query OK, 0 rows affected (0.01 sec)

MySQL [school]> show tables;
+------------------+
| Tables_in_school |
+------------------+
| student          |
+------------------+
1 row in set (0.00 sec)

3.2 修改表中的字段

语法:alter table 表名 modify 要修改的字段名 要修改的类型;

MySQL [school]> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(50)  | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MySQL [school]> alter table student modify email varchar(100);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

MySQL [school]> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(100) | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MySQL [school]> 

3.3 修改表中的字段类型和字段名称

语法:alter table 表名 change 原字段名 新字段名 新字段类型;

MySQL [school]> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| name    | varchar(50)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(100) | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MySQL [school]> alter table student change name stname varchar(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

MySQL [school]> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| stname  | varchar(20)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(100) | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MySQL [school]> 

注:CHANGE 和MODIFY的区别:
CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。 MODIFY 可以改变列的类型,此时不需要重命名(不需给定新的列名称)

3.4 在表中添加字段

语法:alter table 表名 add 字段名 字段类型;

MySQL [school]> desc student
    -> ;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| stname  | varchar(20)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(100) | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

MySQL [school]> alter table student add score int(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

MySQL [school]> desc student;
+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id      | int(11)      | YES  |     | NULL    |       |
| stname  | varchar(20)  | YES  |     | NULL    |       |
| age     | int(11)      | YES  |     | NULL    |       |
| email   | varchar(100) | YES  |     | NULL    |       |
| address | varchar(200) | YES  |     | NULL    |       |
| score   | int(20)      | YES  |     | NULL    |       |
+---------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

3.5 指定位置添加字段

  • 在第一列添加一个字段
MySQL [school]> alter table student add uid int(20) first;
  • 在age 后面添加性别 gender字段
MySQL [school]> alter table student add gender ENUM('男','女') AFTER stname;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

MySQL [school]> desc student
    -> ;
+---------+-------------------+------+-----+---------+-------+
| Field   | Type              | Null | Key | Default | Extra |
+---------+-------------------+------+-----+---------+-------+
| uid     | int(20)           | YES  |     | NULL    |       |
| id      | int(11)           | YES  |     | NULL    |       |
| stname  | varchar(20)       | YES  |     | NULL    |       |
| gender  | enum('男','女')   | YES  |     | NULL    |       |
| age     | int(11)           | YES  |     | NULL    |       |
| email   | varchar(100)      | YES  |     | NULL    |       |
| address | varchar(200)      | YES  |     | NULL    |       |
| score   | int(20)           | YES  |     | NULL    |       |
+---------+-------------------+------+-----+---------+-------+
8 rows in set (0.00 sec)

3.6 删除表中的某个字段

语法:alter table 表名 drop 字段名 ;

MySQL [school]> alter table student drop id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0


3.7 删除表

  • 直接删除
DROP TABLE table_name;

  • 使用 if exists关键字
DROP TABLE IF EXISTS table_name;

  • 如果要删除多个表,可以一次性写多个表名
DROP TABLE table1, table2, table3;

  • 要保留表结构,但删除表中所有的数据,可以使用TRUNCATE TABLE 命令:
TRUNCATE TABLE table_name;

总结

对数据库表的操作,包含了增删改查,下篇文章,我们将开始讲解如何插入数据,对数据进行增删改查的操作。

猜你喜欢

转载自blog.csdn.net/wisdom_futrue/article/details/131262610
今日推荐