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)