MySQL数据库:第十四章:(DML)Data Manipulation Language数据操纵语言

回退至Mysql数据库理论与实战

#DML语句 ★

Data Manipulation Language数据操纵语言
关键字:insert 、update 、delete

USE stu0906;
CREATE TABLE stuinfo(
  id INT,
  stuname VARCHAR(20) NOT NULL,
  gender CHAR,
  borndate TIMESTAMP,
  seat INT
);

#一、插入

语法:
插入单行:
insert into 表名(字段名,字段名,字段名…)
values(值1,值2,值3…);
插入多行:
方式一:
insert into 表名(字段名,字段名,字段名…)
values(值1,值2,值3…),(值1,值2,值3…);
方式二:
特点:
①要求值和字段的类型、约束一致。(类型可以不完全一致,但一定要兼容)
推荐:
数值型不用引号
日期型和字符型需要使用单引号
②非空字段必须显式的插入值。
可以为空的字段,可以不用显式的插入值
③字段和值的个数必须一致
④字段列表可以省略,默认是所有字段

SELECT * FROM stuinfo;
#1.简单的插入

INSERT INTO stuinfo(id,stuname,gender,borndate,seat)
 VALUES(1,'豪','女','1999-1-1',10);

#2.非空字段必须显式的插入值。
#可以为空的字段,可以不用显式的插入值
#方式1:字段和值都省略

INSERT INTO stuinfo(id,stuname,gender,borndate)
 VALUES(2,'龙','女','1999-1-1');

#方式2:字段不省略,值填充为null

INSERT INTO stuinfo(id,stuname,gender,borndate,seat)
 VALUES(3,'尼','女','1999-1-1',NULL);

#3.字段和值的个数必须一致

 INSERT INTO stuinfo(id,stuname,gender,borndate,seat)
 VALUES(4,'好','女','1999-1-1',NULL);

#4.字段列表可以省略,默认是所有字段

 INSERT INTO stuinfo
 VALUES(5,'读','男','1999-1-1');

#5.插入多行

 #方式一:
 INSERT INTO stuinfo
 VALUES(6,'关','女','1996-1-1',9),(7,'圆','女','1979-1-1',11),(8,'红','女','1973-1-1',12);
 #方式二:支持的是子查询
  INSERT INTO stuinfo
  SELECT 9,'玲','女','1985-1-1',13 UNION ALL
  SELECT 10,'姗','女','1985-1-1',13 UNION ALL
  SELECT 11,'丹','女','1985-1-1',13 UNION ALL
  SELECT 12,'春','女','1985-1-1',13

#补充:设置自增长列

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
  id INT PRIMARY KEY AUTO_INCREMENT,
  stuname VARCHAR(20) NOT NULL,
  gender CHAR,
  borndate TIMESTAMP,
  seat INT
);
SELECT * FROM stuinfo;
  INSERT INTO stuinfo(stuname,gender,borndate,seat)
  SELECT '贾玲1','女','1985-1-1',13 UNION ALL
  SELECT '袁姗姗2','女','1985-1-1',13 UNION ALL
  SELECT '宋丹丹3','女','1985-1-1',13 UNION ALL
  SELECT '李宇春4','女','1985-1-1',13

#二、修改

语法:
单表修改:
update 表名 set 字段名 = 新值,字段名=新值 where 条件
多表修改:【了解】

#修改单个字段
UPDATE stuinfo SET stuname = ‘贾玲’ WHERE id = 1;
#修改多个字段
UPDATE stuinfo SET stuname = ‘袁姗姗’,borndate=‘1990-12-12’ WHERE id = 2;
#多表修改
#案例1:修改专业名是html的学员的座位号 =10,专业名改为网页
#sql92

  UPDATE stuinfo s,major m
  SET s.seat = 10,m.`majorname`='网页'
  WHERE s.`majorid`=m.`id`
  AND m.`majorname`='html';

#sql99【推荐】

  UPDATE stuinfo s
  JOIN major m ON s.`majorid`=m.`id`
  SET s.seat = 1,m.`majorname`='BigData'
  WHERE  m.`majorname`='大数据';

#三、删除

方式一:使用delete
语法:
单表删除:★
delete from 表 where 条件;
多表级联删除:【了解】
sql92:
delete 表1,表2 from 表1 别名,表2 别名 where 连接条件 and 筛选条件;
sql99:思考
方式二:使用truncate
语法:truncate table 表

#案例1:删除2018年出生 的用户信息
DELETE FROM stuinfo WHERE YEAR(borndate) = 2018;
#案例2:删除所有的用户信息
DELETE FROM stuinfo;
TRUNCATE TABLE stuinfo ;
#多表级联删除
#案例3:删除专业名是BigData的用户信息

  DELETE  s FROM stuinfo s,major m WHERE s.majorid = m.id AND m.majorname = 'BigData';
  SELECT * FROM stuinfo;
  SELECT * FROM major;

#【面试题】delete和truncate的对比

1.delete可以添加where条件
truncate不可以添加where条件
2.truncate效率较高
3.delete删除后,返回受影响的行数
truncate删除后,没有返回受影响的行数
4.delete删除带自增长列的表,再插入时,自增长列的值从断点处开始新增
truncate删除带自增长列的表,再插入时,自增长列的值从1开始新增
5.delete支持事务的回滚
truncate不支持事务的回滚
6.delete属于DML
truncate属于DDL

  SELECT * FROM major;
  INSERT INTO major(majorname)
  VALUES('java'),('BigData'),('Python');
  DELETE FROM major;
  TRUNCATE TABLE major;