#DML

DML(Data Manipulation Lauguage) 数据操纵语言: insert update delete

一、数据的插入

语法:
插入单行:

insert into 表名(字段名1,字段名2...value(1,值2...)

插入多行:

insert into 表名(字段名1,字段名2...values(1,值2...)

特点:
①字段和值列表一一对应
包含类型、约束等必须匹配

②数值型的值,不用单引号
非数值的值,必须用单引号

③字段顺序无要求


#案例1:要求字段和值列表一一对应,且遵循类型和约束的限制
INSERT INTO students(stuid,stuname,stugender,eamil,age,majorid)
VALUES(1,'giao哥','女''giao@163.com',12,1)

#案例2:可以为空字段如何插入

INSERT INTO students(stuid,stuname,email,majorid)
VALUES(5,'giao妹','gioa@163.com',2)

INSERT INTO students(stuid,stuname,email,age,majorid)
VALUES(5,'giao妹','gioa@163.com',NULL,2)

#案例3:默认字段如何插入

#法一:字段名写上,值使用default
INSERT INTO students(stuid,stugame,email,stugender,majorid)
VALUES(7,'gioa','dgioa@cha.com',DEFAULT,2);

#法二:字段名和值都不写
INSERT INTO students(stuid,stugame,email,majorid)
VALUES(7,'gioa','dgioa@cha.com',2);

#案例4:可以省略字段列表,默认所有字段
INSERT INTO students VALUE(7,'gioa','dgioa@cha.com',2);



#自增长列:

1、自增长列要求必须设置在一个键上,比如主键或唯一键
2、自增长列要求数据类型为数值型
3、一个表至多有一个自增长列


CREATE TABLE gradeinfo(
	gradeID INT PRIMARY KEY AUTO_INCREMENT,
	gradeName VARCHAR(20)
);

SELECT * FROM gradeinfo;

INSERT INTO gradeinfo VALUES(NULL,'八年级'),(NULL,'九年级'),(NULL,'高一年级');



INSERT INTO gradeinfo(gradeName) VALUES('八年级'),('九年级'),('高一年级');

#二、修改语句

1、修改单表的记录

语法:
update 表名
set 列=新值,=新值...
where 筛选条件;

#修改beauty表中姓唐的女神电话为12345678901

UPDATE beauty SET phone='12345678901'
WHERE NAME LIKE '唐%';

#修改boys表中id号为2的名称为张飞,魅力值为10
UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;

2、修改多表的记录【补充】

语法:

sq192语法:
update 表1 别名,表2 别名
set 列=,...
where  连接条件
and 筛选条件;

sq199语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=...
where 筛选条件;



#修改giao的女朋友的手机号码为123

UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='123'
WHERE bo.`boyName`='giao'

#修改没有男朋友的女神的男朋友编号都为2号

UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;



#三、数据的删除

方法一:delete语句
语法:delete from 表名 where 筛选条件;

方法二:truncate语句
语法:truncate table 表名;


#delete和truncate的区别

1、DELETE可以添加WHERE条件
   TRUNCATE不能添加WHERE条件,一次清楚所有数据
2、TRUNCATE的效率较高
3、如果删除带自增长列的表:
使用DELETE删除后,重新插入数据,记录从断点处开始
使用TRUNCATE删除后,重新插入数据,记录从1开始


SELECT * FROM `gradeinfo`

DELETE FROM `gradeinfo` ;

TRUNCATE TABLE `gradeinfo`

INSERT INTO `gradeinfo`(gradename)VALUES('一年级'),('二年级'),('三年级');

4、DELETE删除数据,会返回受影响的行数
   TRUNCATE删除数据,不返回受影响的行数

5、DELETE删除数据,可以支持事务回滚
   TRUNCATE删除数据,不支持事务回滚