MySQL數(shù)據(jù)庫(kù):第十四章:(DML)Data Manipulation Language數(shù)據(jù)操縱語(yǔ)言
回退至Mysql數(shù)據(jù)庫(kù)理論與實(shí)戰(zhàn)
#DML語(yǔ)句 ★
Data Manipulation Language數(shù)據(jù)操縱語(yǔ)言
關(guān)鍵字:insert 、update 、delete
USE stu0906;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20) NOT NULL,
gender CHAR,
borndate TIMESTAMP,
seat INT
);
#一、插入
語(yǔ)法:
插入單行:
insert into 表名(字段名,字段名,字段名…)
values(值1,值2,值3…);
插入多行:
方式一:
insert into 表名(字段名,字段名,字段名…)
values(值1,值2,值3…),(值1,值2,值3…);
方式二:
特點(diǎn):
①要求值和字段的類型、約束一致。(類型可以不完全一致,但一定要兼容)
推薦:
數(shù)值型不用引號(hào)
日期型和字符型需要使用單引號(hào)
②非空字段必須顯式的插入值。
可以為空的字段,可以不用顯式的插入值
③字段和值的個(gè)數(shù)必須一致
④字段列表可以省略,默認(rèn)是所有字段
SELECT * FROM stuinfo;
#1.簡(jiǎn)單的插入
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.字段和值的個(gè)數(shù)必須一致
INSERT INTO stuinfo(id,stuname,gender,borndate,seat)
VALUES(4,'好','女','1999-1-1',NULL);
#4.字段列表可以省略,默認(rèn)是所有字段
INSERT INTO stuinfo
VALUES(5,'讀','男','1999-1-1');
#5.插入多行
#方式一:
INSERT INTO stuinfo
VALUES(6,'關(guān)','女','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
#補(bǔ)充:設(shè)置自增長(zhǎng)列
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
#二、修改
語(yǔ)法:
單表修改:
update 表名 set 字段名 = 新值,字段名=新值 where 條件
多表修改:【了解】
#修改單個(gè)字段
UPDATE stuinfo SET stuname = ‘賈玲’ WHERE id = 1;
#修改多個(gè)字段
UPDATE stuinfo SET stuname = ‘袁姍姍’,borndate=‘1990-12-12’ WHERE id = 2;
#多表修改
#案例1:修改專業(yè)名是html的學(xué)員的座位號(hào) =10,專業(yè)名改為網(wǎng)頁(yè)
#sql92
UPDATE stuinfo s,major m
SET s.seat = 10,m.`majorname`='網(wǎng)頁(yè)'
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`='大數(shù)據(jù)';
#三、刪除
方式一:使用delete
語(yǔ)法:
單表刪除:★
delete from 表 where 條件;
多表級(jí)聯(lián)刪除:【了解】
sql92:
delete 表1,表2 from 表1 別名,表2 別名 where 連接條件 and 篩選條件;
sql99:思考
方式二:使用truncate
語(yǔ)法:truncate table 表
#案例1:刪除2018年出生 的用戶信息
DELETE FROM stuinfo WHERE YEAR(borndate) = 2018;
#案例2:刪除所有的用戶信息
DELETE FROM stuinfo;
TRUNCATE TABLE stuinfo ;
#多表級(jí)聯(lián)刪除
#案例3:刪除專業(yè)名是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的對(duì)比
1.delete可以添加where條件
truncate不可以添加where條件
2.truncate效率較高
3.delete刪除后,返回受影響的行數(shù)
truncate刪除后,沒有返回受影響的行數(shù)
4.delete刪除帶自增長(zhǎng)列的表,再插入時(shí),自增長(zhǎng)列的值從斷點(diǎn)處開始新增
truncate刪除帶自增長(zhǎng)列的表,再插入時(shí),自增長(zhǎng)列的值從1開始新增
5.delete支持事務(wù)的回滾
truncate不支持事務(wù)的回滾
6.delete屬于DML
truncate屬于DDL
SELECT * FROM major;
INSERT INTO major(majorname)
VALUES('java'),('BigData'),('Python');
DELETE FROM major;
TRUNCATE TABLE major;