MySQL数据库:第十四章:(DML)Data Manipulation Language数据操纵语言
#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;