我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL数据操作-DML语句的使用

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL数据操作-DML语句的使用

说明

DML(Data Manipulation Language)数据操作语言,是指对数据库进行增删改的操作指令,主要有INSERT、UPDATE、DELETE三种,代表插入、更新与删除,这是学习MySQL必要掌握的基本知识。

方语法中 [] 中内容可以省略。 

INSERT操作

逐行插入

语法格式如下:


 insert into t_name[(column_name1,columnname_2,...)] values (val1,val2);
 或者
 insert into t_name set column_name1 = val1,column_name2 = val2;

字段名称和值需要保证数量一直,类型一直,位置一 一对应,否则可能导致异常。

not null的字段需要保证有插入的值,否则会报非空的异常信息。允许null的字段如果不想输入数据,字段和值都不出现,或者value用null代替。

数值类型,值不需要用单引号括起来,其他的如字符型或日期类型,值需要用单引号括起来;

如果表名后面的column_name 省略不写,则代表覆盖该表的所有字段。值的顺序和表中字段顺序须保持一致。

上述第二种语法的写法更繁琐,现在比较少使用。

测试一下:


mysql> desc `user1`;
+---------+--------------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra     |
+---------+--------------+------+-----+---------+----------------+
| id   | bigint(20)  | NO  | PRI | NULL  | auto_increment |
| name  | varchar(20) | NO  |   | NULL  |        |
| age   | int(11)   | NO  |   | 0    |        |
| address | varchar(255) | YES |   | NULL  |        |
+---------+--------------+------+-----+---------+----------------+
4 rows in set

mysql> insert into `user1`(name,age,address) values('brand',20,'fuzhou');
Query OK, 1 row affected

mysql> insert into `user1`(age,address) values(20,'fuzhou');
1364 - Field 'name' doesn't have a default value

mysql> insert into `user1` values('sol',21,'xiamen');
1136 - Column count doesn't match value count at row 1

mysql> insert into `user1` values(null,'sol',21,'xiamen');
Query OK, 1 row affected

mysql> select * from `user1`;
+----+-------+-----+---------+
| id | name | age | address |
+----+-------+-----+---------+
| 3 | brand | 20 | fuzhou |
| 4 | sol  | 21 | xiamen |
+----+-------+-----+---------+
2 rows in set

批量插入

语法格式如下:


 insert into t_name [(column_name1,column_name2)] values (val1_1,val1_2),(val2_1,val2_2)...);
 或者
 insert into t_name [(column_name1,column_name2)] select o_name1,o_name2 from o_t_name [where condition];

上述第一个语法,values 后面的值个数需要同等配对 column的数量,可以设置多个,逗号隔开,提高数据插入效率。

第二个语法,select查询的字段和插入数据的字段数量、顺序、类型需要一致。 insert的字段可以省略,代表插入t_name表所有字段。条件可选。

测试一下:


mysql> insert into `user1`(name,age,address) values('brand',20,'fuzhou'),('sol',21,'xiamen');
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from `user1`;
+----+-------+-----+---------+
| id | name | age | address |
+----+-------+-----+---------+
| 5 | brand | 20 | fuzhou |
| 6 | sol  | 21 | xiamen |
+----+-------+-----+---------+
2 rows in set

mysql> desc `user2`;
+---------+--------------+------+-----+---------+----------------+
| Field  | Type     | Null | Key | Default | Extra     |
+---------+--------------+------+-----+---------+----------------+
| id   | bigint(20)  | NO  | PRI | NULL  | auto_increment |
| name  | varchar(20) | NO  |   | NULL  |        |
| age   | int(11)   | NO  |   | 0    |        |
| address | varchar(255) | YES |   | NULL  |        |
| sex   | int(11)   | NO  |   | 1    |        |
+---------+--------------+------+-----+---------+----------------+
5 rows in set

mysql> insert into `user2` (name,age,address,sex) select name,age,address,null from `user1`;
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from `user2`;
+----+-------+-----+---------+------+
| id | name | age | address | sex |
+----+-------+-----+---------+------+
| 7 | brand | 20 | fuzhou | 1  |
| 8 | sol  | 21 | xiamen | 1  |
+----+-------+-----+---------+------+
2 rows in set

UPDATE操作

数据更新

语法格式如下:


update t_name [[as] alias] set [ alias.]column_name1 = val1,[alias.]column_name2 = val2 [where condition];

alias 是别名的意思,别名越简单识别性越强越好,容易辨认,方便操作,没有别名情况下,表名就是别名

as alias 中as也是可选的,where 条件也是可选的,所以用户可以选择需要的,符合特定条件的部分数据进行更新。

测试一下:


mysql> select * from `user2`;
+----+-------+-----+---------+------+
| id | name | age | address | sex |
+----+-------+-----+---------+------+
| 7 | brand | 20 | fuzhou | NULL |
| 8 | sol  | 21 | xiamen | NULL |
+----+-------+-----+---------+------+
2 rows in set

mysql> update `user2` as u2 set u2.name = 'hero',u2.age=23,u2.sex=1 where id=7;
Query OK, 1 row affected
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from `user2`;
+----+------+-----+---------+------+
| id | name | age | address | sex |
+----+------+-----+---------+------+
| 7 | hero | 23 | fuzhou |  1 |
| 8 | sol | 21 | xiamen | NULL |
+----+------+-----+---------+------+
2 rows in set

还有一种方式是同时更新多个表,使用不同的别名以及一些条件去限制,不过不建议这么做,操作易错,并且不好维护。

DELETE操作

delete方式删除

语法格式如下:


delete [alias] from t_name [[as] alias] [where condition];

跟上面一样,alias代表别名,没有别名情况下,表名就是别名

如果表设置了别名,则delete后面必须跟上别名,否则数据库会报异常。

测试一下:


mysql> select * from `user2`;
+----+------+-----+---------+------+
| id | name | age | address | sex |
+----+------+-----+---------+------+
| 7 | hero | 23 | fuzhou |  1 |
| 8 | sol | 21 | xiamen | NULL |
+----+------+-----+---------+------+
2 rows in set

mysql> delete from `user2` as alias where sex=1;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as alias where sex=1' at line 1

mysql> delete alias from `user2` as alias where sex=1;
Query OK, 1 row affected

mysql> select * from `user2`;
+----+------+-----+---------+------+
| id | name | age | address | sex |
+----+------+-----+---------+------+
| 8 | sol | 21 | xiamen | NULL |
+----+------+-----+---------+------+
1 row in set

如果删除表中所有的数据,则后面不带上where条件即可,不过要谨慎使用哟。


mysql> select * from `user2`;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 8 | sol  | 21 | xiamen  |  0 |
| 10 | brand | 21 | fuzhou  |  1 |
| 11 | helen | 20 | quanzhou |  0 |
+----+-------+-----+----------+-----+
3 rows in set

mysql> delete from `user2`;
Query OK, 3 rows affected

mysql> select * from `user2`;
Empty set

truncate方式删除

语法格式如下:


truncate t_name;

mysql> select * from `user2`;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 12 | brand | 21 | fuzhou  |  1 |
| 13 | helen | 20 | quanzhou |  0 |
| 14 | sol  | 21 | xiamen  |  0 |
+----+-------+-----+----------+-----+
3 rows in set

mysql> truncate `user2`;
Query OK, 0 rows affected

mysql> select * from `user2`;
Empty set

看起来跟delete很像,但是重新插入数据会发现,他的自增主键会重新从1开始,但是delete的是直接在原来的所以自增值之后往上加。看下面id字段。


mysql> insert into `user2` (name,age,address,sex) values('brand',21,'fuzhou',1),('helen',20,'quanzhou',0),('sol',21,'xiamen',0);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from `user2`;
+----+-------+-----+----------+-----+
| id | name | age | address | sex |
+----+-------+-----+----------+-----+
| 1 | brand | 21 | fuzhou  |  1 |
| 2 | helen | 20 | quanzhou |  0 |
| 3 | sol  | 21 | xiamen  |  0 |
+----+-------+-----+----------+-----+
3 rows in set

那 truncate 和 delete有什么区别呢?我们来梳理下。

truncate和delete的比较

truncate 指的是清空表的数据、释放表的空间,但不删除表的架构定义(表结构)。因为不包含Where条件,所以不是删除具体行,而是将整个表清空了。

而delete 语句是删除表中的数据行,可以在后面带上条件控制删除的维度、范围,它每次从表中删除一行,会同时将该行的删除操作作为事务保存在日志中,用于进行可能的回滚操作。

truncate 和 delete 一样的地方是:只是删除数据,涉及到的表结构及其列、约束、索引等均不会变。

如果被外键 foreign key 约束,不能使用truncate ,只能使用不带where子句的delete语句。

truncate 操作会记录在日志中,delete操作会放到 rollback segement 中,执行时要等事务被commit才会生效;所以delete 会触发删除触发器(如果有的话),truncate 不会。

如果像上面我们测试的那样,包含自增字段,truncate方式清空之后,自增列的值会被初始化从1开始。

delete方式要分情况判断(如果数据全部delete,数据库未被重启,则按照之前max+1;数据库重启了,则一样会重新开始计算自增列的初始值)。

还有drop,drop语句会删除表包括 结构、数据、依赖该表的约束(constrain),触发器(trigger)索引(index)等。

以上就是MySQL数据操作-DML语句的使用的详细内容,更多关于MySQL dml语句的资料请关注自学编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL数据操作-DML语句的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL数据操作-DML语句的使用

说明 DML(Data Manipulation Language)数据操作语言,是指对数据库进行增删改的操作指令,主要有INSERT、UPDATE、DELETE三种,代表插入、更新与删除,这是学习MySQL必要掌握的基本知识。 方语法中
2022-05-14

MySQL基础教程15 —— SQL语法之数据操作语句DML——DELETE语法

单表语法: DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[WHERE where_definition][ORDER BY ...][LIMIT row_count] 多表语法:
2022-05-18

详解mysql DML语句的使用

前言: 在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作。 这里说明下DDL与DML语句的分类,可能有的同学还不太清楚。 DDL(Data Definit
2022-05-28

MySQL的DML语言操作实例

补充说明,外键:不要使用外键,一切外键概念都在应用层解决。 补充说明,数据库的列,也就是字段名,尽量带上飘符号` 数据库存在的意义:数据存储和数据管理。 数据库:行(数据),列(字段) 注意:本页是解决了行的数据问题。上一页是解决列的字段问
2022-05-13

MySQL之数据操纵语言(DML)

数据操纵语言(DML)数据操纵语(Data Manipulation Language),简称DML。DML主要有四个常用功能。增删改查insertdeleteupdateselect# 创建数据库create database if not exists s
MySQL之数据操纵语言(DML)
2018-08-18

MySQL 常用操作语句

原文:https://www.cnblogs.com/landiss/p/14646051.html
MySQL 常用操作语句
2022-02-16

DML (数据操作语言):数据库操作的利器,让数据管理更轻松

DML(数据操作语言)是数据库的基础,提供了对数据库中的数据进行增、删、改、查等基本操作的功能。DML语句让数据管理更加轻松,提高了数据库的易用性和灵活性。
DML (数据操作语言):数据库操作的利器,让数据管理更轻松
2024-02-12

编程热搜

目录