MySQL学习:DML语言的详解

1.1 DML语言(精通):

  • 数据操作语言(不是数据控制语言DCL)
  • insert
  • delete
  • update
1.1.1 数据添加(insert):

语法:

  • 单次单行插入

INSERT INTO 表名 (字段名1字段名2...字段名n)

VALUES(数值1数值2...数值n);

INSERT INTO 表名

VALUES(数值1数值2...数值n); 这里可以无字段名,插入自增时可以用 NULL 来占位, 其余一律一一对应(不建议使用)

  • 单次多行插入

INSERT INTO 表名 (字段名1字段名2...字段名n)

VALUES(数值1数值2...数值n),

(数值1数值2...数值n),

(数值1数值2...数值n);

INSERT INTO 表名

VALUES(数值1数值2...数值n),

(数值1数值2...数值n),

(数值1数值2...数值n); 这里可以无字段名,插入自增时可以用 NULL 来占位, 其余一律一一对应(不建议使用)

具体操作过程:

CREATE TABLE IF NOT EXISTS `grade`(
`grade_id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`grade_name` VARCHAR(10) NOT NULL DEFAULT '无' COMMENT '年级名称',

PRIMARY KEY (`grade_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

CREATE TABLE `student` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '昵称',
  `password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
  `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
  
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 单次单行插入
INSERT INTO `student`(`name`,`sex`)
VALUES('ltw','男');

INSERT INTO `student` -- 不建议使用
VALUES(8,'张三','wasd','男','2020-01-01','美国','123@qq.com');

INSERT INTO `student` -- 不建议使用
VALUES(NULL,'王五','wasd','男','2020-01-01','美国','123@qq.com')

-- 单次多行插入
INSERT INTO `student`(`name`,`password`)
VALUES('sr','123'),
('zyh','2345');

注意:

  • 在主键自增的情况下我们可以不用考虑主键的插入,例如上面里的grade表的数据插入,当然也可以插入主键数据。
  • 字段与数值一一对应
1.1.2 数据修改(update):

语法:

  • 按列为单位修改某一列数据,无条件:

    • UPDATE 表名 SET 列字段名='要修改的数值'
  • 按单元格为单位修改某一个单元格的数据,单个条件:

    • UPDATE 表名 SET 列字段名='要修改的数值' WHERE 条件字段名称='条件字段名称下的数值'
  • 按单元格为单位修改某一个单元格的数据,多个条件:

    • UPDATE 表名 SET 列字段名='要修改的数值'

      WHERE 条件字段名称1='条件字段名称下的数值1' AND ... AND 条件字段名称n='条件字段名称下的数值n'

  • 单次修改多个数据,无条件:

    • UPDATE 表名 SET 列字段名1=’要修改的值1’,...,列字段名n=’要修改的值n’;
  • 单次修改多个数据,单个条件:

    • UPDATE 表名 SET 列字段名1=’要修改的值1’,...,列字段名n=’要修改的值n

      WHERE 条件字段名称='条件字段名称下的数值'

  • 单次修改多个数据,多个条件:

    • UPDATE 表名 SET 列字段名1=’要修改的值1’,...,列字段名n=’要修改的值n

      WHERE 条件字段名称1='条件字段名称下的数值1' AND ... AND 条件字段名称n='条件字段名称下的数值n'

WHERE 条件运算符

操作符含义范围结果
=等于操作符左边等于右边:5=5true
>大于操作符比右边大:5>4true
<小于操作符比右边小:5<6true
>=大于等于操作符比右边大也可等于右边:5>=4true
<=小于等于操作符比右边小也可等于右边:5<= 6true
<> 或 !=不等于操作符左边不等于右边:5<>6 5!=6true
BETWEEN y AND x闭合区间[y,x]:[5,6]true
没有跟在BETWEEN后的AND&&同时满足多个AND条件:5<6 AND 7<8true
OR||或:5<6 OR 7<8true

具体操作过程:

CREATE TABLE `test`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '名称',
	`sex` VARCHAR(4) NOT NULL DEFAULT '男' COMMENT '性别',
	
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`name`,`sex`) 
VALUES('zlm','男'),('hlw','男'),('sr','男'),('lwj','男');

-- 更新所有name字段下的值,无条件。
UPDATE `test` SET `name`='测试二';

-- 更新id号为1的行下的name字段的名称,有单个条件。
UPDATE `test` SET `name`='测试一' WHERE `id`=1;

-- 更新多个数据,不带条件修改。
UPDATE `test` SET `name`='测试三',`sex`='女';

-- 更新多个数据,单个条件。
UPDATE `test` SET `name`='测试四',`sex`='男'
WHERE `id`=1;

-- 更新多个数据,多个条件。
UPDATE `test` SET `name`='测试五',`sex`='女'
WHERE `id`=3 AND `name`='测试三';

注意

  • VALUES后的值可以是定值也可以是变量

    • -- 就用学生表中的生日这一列来说,设置一个当前时间变量给birthday字段。
      UPDATE `student` SET `birthday`=CURRENT_TIME,`sex`='女'
      WHERE `id`=3 AND `name`='zlm';
      
1.1.3 数据删除(delete,truncat):

delete命令:

  • 删除表中所有数据(不推荐,有专门的命令):
    • DELETE FROM 表名
  • 删除表中指定数据:
    • DELETE FROM 表名 WHRER 条件1 AND 条件2 AND ...;
CREATE TABLE `test`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '名称',
	`sex` VARCHAR(4) NOT NULL DEFAULT '男' COMMENT '性别',
	
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`name`,`sex`) 
VALUES('zlm','男'),('hlw','男'),('sr','男'),('lwj','男');

-- 删除指定数据。
DELETE FROM `test` WHERE `name`='lwj' AND `id`=4;

-- 删除表中所有数据(极其不推荐)。
DELETE FROM `test`;

truncate命令:

作用:完全清空数据库中的某一个表,索引和表的结构不会改变。

CREATE TABLE `test`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '名称',
	`sex` VARCHAR(4) NOT NULL DEFAULT '男' COMMENT '性别',
	
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test` (`name`,`sex`) 
VALUES('zlm','男'),('hlw','男'),('sr','男'),('lwj','男');

-- 删除表中所有数据。
TRUNCATE `test`;

二者区别:

deletetruncate
删除表结构falsefalse
清空表的数据truetrue
重置计数器(重置自增)falsetrue
  • truncate不会影响事务

小拓展:

delete删除所有表中数据后重启数据库

  • InnoDB数据表类型的表,自增会从1开始,因为存在内存中,这也意味着很容易丢失。
  • MyISAM数据类型的表,会继续从上一个自增量开始,因为存在文件中,不容易丢失。
2021.1.12
本文章是本人学习笔记,不进行任何商用所以不支持转载请理解!也请别拿去商用!
如果觉得对你有帮助那么欢迎你随时来回顾!
只为记录本人学习历程。
毕
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值