数据操作语言(DML,Data Manipulation Language)
DML语句用于对数据库中的数据进行操作(增删改查数据),主要包括:
- INSERT:向表中插入数据,例如
INSERT INTO table_name (column1, column2) VALUES (value1, value2)
。 - UPDATE:更新表中的数据,例如
UPDATE table_name SET column1 = value1 WHERE condition
。 - DELETE:删除表中的数据,但不影响表结构,例如
DELETE FROM table_name WHERE condition
。
DML添加数据:
1. 基本的 INSERT INTO
语句
INSERT INTO
语句用于向表中插入一行或多行数据。
语法:
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
- 表名:需要插入数据的表名。
- 列名1, 列名2, ...:插入的列名列表。
- 值1, 值2, ...:每一列对应的值。
注意:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的
字符串和日期型数据应该包含在引号中
插入的数据大小,应该在字段的规定范围内
2. 插入单行数据
示例:
假设有一个 users
表,它有三个字段:id
、name
和 email
。我们可以向表中插入一行数据:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
这里:
id
列是自动递增(AUTO_INCREMENT
),所以不需要在插入语句中指定。name
和email
列分别插入 'Alice' 和 'alice@example.com'。
表中的数据:
+----+-------+------------------+
| id | name | email |
+----+-------+------------------+
| 1 | Alice | alice@example.com |
+----+-------+------------------+
3. 插入部分列
如果只想插入部分列,其他未指定的列将会使用默认值(如果有默认值),或者为 NULL
。
示例:
向 users
表只插入 name
列:
INSERT INTO users (name) VALUES ('David');
这里没有提供 email
列的值,因此 email
将会被设置为 NULL
(假设 email
列允许 NULL
)。
4. 给全部字段添加数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
这是向表中所有字段插入数据的写法,你不需要显式列出字段名,只要提供每个字段的值,按照表结构的顺序插入即可。
- 示例:
INSERT INTO users VALUES (1, 'Bob', 'bob@example.com', CURRENT_TIMESTAMP);
这种形式对应于插入所有字段,适用于你有所有字段的值可以插入的情况。
5. 批量插入多行数据
你可以一次插入多行数据。
语法:
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...;
示例:
INSERT INTO users (name, email)
VALUES
('Bob', 'bob@example.com'),
('Charlie', 'charlie@example.com');
表中的数据:
+----+---------+---------------------+
| id | name | email |
+----+---------+---------------------+
| 1 | Alice | alice@example.com |
| 2 | Bob | bob@example.com |
| 3 | Charlie | charlie@example.com |
+----+---------+---------------------+
总结:
#插入
insert into employee(id, name, gender, age) values(1,'小丽','女',10);
insert into employee(id, name, gender, age) values(2,'大宝','男',20);#单个数据插入
insert into employee values(3,'张三','男',52),(4,'阿梅','女',25);# 多个数据同时插入
通过以下代码来查看表格里面的数据
select * from employee;
控制台输出:
DML 更新和删除
1. 更新数据:
基本语法
不区分大小写
UPDATA 表名 SET 子段1=值1,子段2=值2 where 条件;修改表中数据
- SET:指定需要修改的列和新值。
- where:用于限定更新哪些行。如果省略 where,所有行都会被更新。
update employee set name='不知道' where id=1;
控制台输出表单:
#更新表中所有数据(不加where)
update employee SET age='20';
控制台输出表单:
2. 删除数据(DELETE)
DELETE
语句用于从表中删除一行或多行数据。
基本语法:
DELETE FROM 表名 WHERE 条件;
- FROM:指定要删除记录的表。
- WHERE:用于指定删除的条件。如果省略
WHERE
,将删除表中的所有记录。
示例1:删除单行数据
DELETE FROM employee WHERE id = 1;
这条语句会删除 id
为1的用户。
2. 删除性别为女的数据
#删除数据
delete from employee where gender='女';
3. 删除所有数据
#删除所有数据
delete from employee;
DELETE
用于从表中删除数据,但保留表结构。它可以通过 WHERE
子句删除特定的行,或者删除所有行。
主要特点:
- 删除数据:只删除表中的数据,不删除表结构。
- 使用
WHERE
过滤:可以使用WHERE
子句来删除特定的行。 - 保留表结构:表的结构和索引、约束等保持不变。
- 可回滚(在支持事务的存储引擎中,如InnoDB):如果操作在事务内,可以使用
ROLLBACK
回滚删除操作。 - 不会重置
AUTO_INCREMENT
:DELETE
不会重置自动递增列的计数器。
TRUNCATE
:直接清空表,比 DELETE
效率更高,但不能加 WHERE
,并且会重置 AUTO_INCREMENT
DROP
语句会彻底删除表,不仅删除表中的数据,还会删除表的结构。这意味着表一旦被 DROP
,表及其所有的数据、索引、约束、以及触发器等相关信息都会被永久删除,无法恢复,除非有备份。