Skip to content
📈0️⃣

MySQL 表的增删改查

操作表

创建表

创建 MySQL 数据表的 SQL 通用语法:

sql
CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    ...
);
sql
-- 创建一个名为 "students" 的表,该表包含以下四列:
-- id - 整数,自动增量,主键
-- name - 字符串,最长 50 个字符
-- age - 整数
-- gender - 字符串,长度为 4
create table students (
    id int primary key,
    name varchar(50),
    age int,
    gender char(4)
);
sql
-- id: 用户 id,整数类型,自增长,作为主键。
-- username: 用户名,变长字符串,不允许为空。
-- email: 用户邮箱,变长字符串,不允许为空。
-- birthdate: 用户的生日,日期类型。
-- is_active: 用户是否已经激活,布尔类型,默认值为 true。
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    birthdate DATE,
    is_active BOOLEAN DEFAULT TRUE
);
sql
-- 如果你不想字段为空可以设置字段的属性为 NOT NULL,如上实例中的 blog_title 与 blog_author 字段, 在操作数据库时如果输入该字段的数据为空,就会报错。
-- AUTO_INCREMENT 定义列为自增的属性,一般用于主键,数值会自动加 1。
-- PRIMARY KEY 关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号 , 分隔。
-- ENGINE 设置存储引擎,CHARSET 设置编码。
CREATE TABLE IF NOT EXISTS `blog_tbl`(
   `blog_id` INT UNSIGNED AUTO_INCREMENT,
   `blog_title` VARCHAR(100) NOT NULL,
   `blog_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `blog_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

参数说明:

  • table_name 是你要创建的表的名称。
  • column1, column2, ... 是表中的列名。
  • datatype 是每个列的数据类型。

删除表

删除 MySQL 数据表的通用语法:

sql
DROP TABLE table_name ; -- 直接删除表,不检查是否存在

DROP TABLE [IF EXISTS] table_name;
sql
DROP TABLE blog_db.students;

参数说明:

  • table_name 是要删除的表的名称。
  • IF EXISTS 是一个可选的子句,表示如果表存在才执行删除操作,避免因为表不存在而引发错误。

修改表名称

修改表的名称可以使用RENAME TABLE语句:

sql
RENAME TABLE old_table_name TO new_table_name;
sql
-- 如果您希望在另一个数据库中修改表的名称,可以使用以下语法:
RENAME TABLE old_database.old_table_name TO new_database.new_table_name;

表内数据增删改查

插入数据

向 MySQL 数据表插入数据通用的 INSERT INTO SQL 语法:

sql
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
sql
insert into students values (1, '张三', 18, '男');
sql
insert into students values (2, '李四', 19, '女'),
                            (3, '王五', 20, '男'),
                            (4, '赵六', 21, '女');
sql
INSERT INTO students (name, age) values ('李四', 19),
                                        ('王五', 20),
                                        ('赵六', 21);

参数说明:

  • table_name 是你要插入数据的表的名称。
  • column1, column2, column3, ... 是表中的列名。
  • value1, value2, value3, ... 是要插入的具体数值。

查询数据

select * from students;

sql
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
sql
-- 选择所有列的所有行
SELECT * FROM users;

-- 选择特定列的所有行
SELECT username, email FROM users;

-- 添加 WHERE 子句,选择满足条件的行
SELECT * FROM users WHERE is_active = TRUE;

-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;

-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC;

-- 添加 LIMIT 子句,限制返回的行数
SELECT * FROM users LIMIT 10;

参数说明:

  • column1, column2, ... 是你想要选择的列的名称,如果使用 * 表示选择所有列。
  • table_name 是你要从中查询数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定过滤条件,只返回符合条件的行。
  • ORDER BY column_name [ASC | DESC] 是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。
  • LIMIT number 是一个可选的子句,用于限制返回的行数。

更新数据

UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法:

sql
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
sql
mysql> update students set name="张三哥" where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from students;
+----+--------+------+--------+
| id | name   | age  | gender |
+----+--------+------+--------+
|  1 | 张三哥 |   18 | 男     |
|  2 | 李四   |   19 | 女     |
|  3 | 王五   |   20 | 男     |
|  4 | 赵六   |   21 | 女     |
+----+--------+------+--------+
4 rows in set (0.01 sec)

参数说明:

  • table_name 是你要更新数据的表的名称。
  • column1, column2, ... 是你要更新的列的名称。
  • value1, value2, ... 是新的值,用于替换旧的值。
  • WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。

例如,要将名为students的表中 id 为 1 的学生的年龄改为 20 岁,可以使用以下语句:

UPDATE students SET age = 20 WHERE id = 1;

删除数据

DELETE 语句从 MySQL 数据表中删除数据的通用语法:

sql
DELETE FROM table_name
WHERE condition;
sql
mysql> delete from students where id=1;
Query OK, 1 row affected (0.02 sec)

mysql> select * from students;
+----+------+------+--------+
| id | name | age  | gender |
+----+------+------+--------+
|  2 | 李四 |   19 | 女     |
|  3 | 王五 |   20 | 男     |
|  4 | 赵六 |   21 | 女     |
+----+------+------+--------+
3 rows in set (0.01 sec)
sql
mysql> delete from students where id in (1,2,3,4);
Query OK, 3 rows affected (0.02 sec)

mysql> select * from students;
Empty set (0.01 sec)

参数说明:

  • table_name 是你要删除数据的表的名称。
  • WHERE condition 是一个可选的子句,用于指定删除的行。如果省略 WHERE 子句,将删除表中的所有行。

例如,要从名为students的表中删除 id 为 1 的学生,可以使用以下语句:

DELETE FROM students WHERE id = 1;

代码例子

sql
create table students (
    id int primary key,
    name varchar(50),
    age int,
    gender char(4)
);
sql
drop table students; # 删除表
sql
insert into students values (1, '张三', 18, '男');
sql
mysql> select * from students;
+----+------+------+--------+
| id | name | age  | gender |
+----+------+------+--------+
|  1 | 张三 |   18 | 男     |
+----+------+------+--------+
1 row in set (0.01 sec)
sql
mysql> select * from students;
+----+------+------+--------+
| id | name | age  | gender |
+----+------+------+--------+
|  1 | 张三 |   18 | 男     |
+----+------+------+--------+
1 row in set (0.01 sec)

mysql> update students set name="李四" where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from students;
+----+------+------+--------+
| id | name | age  | gender |
+----+------+------+--------+
|  1 | 李四 |   18 | 男     |
+----+------+------+-----
sql
mysql> select * from students;
+----+------+------+--------+
| id | name | age  | gender |
+----+------+------+--------+
|  1 | 李四 |   18 | 男     |
+----+------+------+--------+
1 row in set (0.01 sec)

mysql> delete from students where id in (1,2,3);
Query OK, 1 row affected (0.02 sec)

mysql> select * from students;
Empty set (0.01 sec)