目录
06、DML语句学习
数据操作语言:
- 插入:insert
- 修改:update
- 删除:delete
6.0、提前预知
前面在笔记01里面提供了学习使用的建表语句,演示DML语句不需要太复杂的表结构,所以我们在这里提供一个简单的demo,来演示DML语句
demo建表语句:
/*创建demo数据库*/
CREATE DATABASE `demo`;
/*使用数据库 */
USE `demo`;
DROP TABLE IF EXISTS `beauty`;
/*创建女孩表 */
CREATE TABLE `beauty` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`sex` char(1) DEFAULT '女',
`borndate` datetime DEFAULT '1987-01-01 00:00:00',
`phone` varchar(11) NOT NULL,
`photo` blob,
`boyfriend_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
/* 插入数据 */
insert into `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`) values (1,'beauty_01','女','1998-02-03 00:00:00','18209876577',NULL,8);
DROP TABLE IF EXISTS `boys`;
CREATE TABLE `boys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`boyName` varchar(20) DEFAULT NULL,
`userCP` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
insert into `boys`(`id`,`boyName`,`userCP`) values (1,'boy_01',100);
6.1、插入:INSERT
方式一:
语法:
INSERT INTO 表名(字段名,...) VALUES(值1,...);
特点:
- 1、字段类型和值类型要一致或兼容,而且一一对应
- 2、可以为空的字段,可以不用插入值,或用null填充
- 3、不可以为空的字段,必须插入值
- 4、字段个数和值的个数必须一致
- 5、
字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致
案例:
- 案例1:字段类型和值类型一致或兼容,而且一一对应
insert into `boys`(`id`,`boyName`,`userCP`) values (2,'boy_02',100);
- 案例2:可以为空的字段,可以不用插入值,或用null填充
insert into `boys`(`id`,`boyName`,`userCP`) values (、3,'boy_03',NULL);
- 案例3:不可以为空的字段,必须插入值
insert into `boys`(`id`,`boyName`,`userCP`) values (4,NULL,NULL);
- 案例4:字段个数和值的个数必须一致
//错误写法
insert into `boys`(`id`,`boyName`,`userCP`) values (5,'boy_05');
//正确写法:因为userCP字段可以省略,默认为null
insert into `boys`(`id`,`boyName`) values (5,'boy_05');
//正确写法:因为boyName字段可以省略,默认为null
insert into `boys`(`id`,`userCP`) values (5,100);
- 案例5:字段可以省略,但默认所有字段,并且顺序和表中的存储顺序一致
insert into `boys` values (6,'boy_06',100);
方式二:
方式一是比较常用的表插入方式,但是还有另外一种表插入方式如下:
语法:
insert into 表名
set 列名=值,列名=值,....
- 案例:向boys表插入一条数据
//可以为空的字段可以不插入值,大致意思可方式一差不多
insert into boys
set id=6,boyName='boy_06';
两种方式对比
- 方式一支持一次性插入多行,方式二不支持
- 方式一支持子查询,方式二不支持
6.2、修改:UPDATE
更新表的时候我们可以只更新表中的部分列,也可以更新全部列。
修改单表中的记录
语法:
update 表名
set 列=新值,列=新值,...
where 筛选条件;
案例
- 案例1:修改id为1的boyName字段的值
UPDATE `boys` SET boyName='boy_new' WHERE id=1;
修改多表中的记录(了解)
sql92语法(了解):
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件
sql99语法:
update 表1 别名
inner|left|right|full 表2 别名
on 连接条件
set 列=值,...
where 筛选条件
6.3、删除:DELETE&TRUNCATE
DELETE语句
单表的删除:
语法:
DELETE FROM 表名 WHERE 筛选条件
- 案例1:删除id为1的行
DELETE FROM `boys` WHERE id=1;
多表的删除:
语法:
DELETE 别名1,别名2
FROM 表1 别名1,表2 别名2
WHERE 连接条件
AND 筛选条件;
TRUNCATE语句
TRUNCATE TABLE 表名
两种方式的区别【面试题】
-
1、TRUNCATE不能加WHERE条件,而DELETE可以加WHERE条件
-
2、TRUNCATE的效率高一丢丢
-
3、TRUNCATE删除带自增长的列的表后,如果再插入数据,数据从1开始,DELETE删除带自增长列的表后,如果再插入数据,数据从上一次的断点处开始
-
4、TRUNCATE删除不能回滚,DELETE删除可以回滚