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;