前言
今天我们开始探讨数据库表的操作,包含了表的增删改查,但不包含数据的增删改查,想要了解更多关于数据库表中对表中数据进行增删改查的方法,参见下篇文章。
可以关注我的云原生社区:云原生社区
也可以关注我的英语社区:从零开始学英语
文章目录
一. 创建表
创建表的语法如下:
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;
总结
对数据库表的操作,包含了增删改查,下篇文章,我们将开始讲解如何插入数据,对数据进行增删改查的操作。