MySQL之數據操縱語言(DML)


數據操縱語言(DML)

數據操縱語(Data Manipulation Language),簡稱DML

DML主要有如下幾個常用功能。

insert delete update
# 創建數據庫
create database if not exists stu;
# 使用數據庫
use stu;
# 創建一個表
create table student(
    sid int primary key auto_increment,
    sname varchar(20) not null,
    sex varchar(10)
)charset=utf8;

下面的操作都是基於這個student表進行的。

增添數據(insert)

全列插入(全字段插入)

-- insert into 表名 values(...);
insert into student values(0,'張三','男');

注意,表結構中有id字段,雖然設置了主鍵、自增,MySQL可以自動維護,但是,在全列插入的時候,這個位置還必須寫(通常寫 0 ,插入后以實際為准),起到站位作用

結果如下:

部分列插入(插入部分列字段)

-- insert into 表名(列1,列2,...) values(值1,值2,...);
insert into student(sname, sex) values('李四', '男');
insert into student(sname) values('王五');

結果如下:

同時插入多條數據

-- insert into 表名(列1,...) values(值1,...),(值2,...),(值3,...),...;
insert into student(sname,sex) values 
("劉備","男"),("貂蟬","女"),("諸葛亮","男");

結果如下:

復制已有表,生成新表

復制已有表的結構和數據。

-- create table 新表名 select * from 已有表名;
-- 創建一個student1表,表的結構和數據均來自於student表。
create table student1 select * from student;

結果如下:

只復制已有表的結構(得到的是一個空結構表)。

-- create table 新表名 selsct * from 已有表名 where 0;
-- 創建一個student2表,只復制student表的結構,不要里面的數據。
create table student2 select * from student where 0;

結果如下:

修改數據update

update語句要配合where篩選,進行使用,否則修改的就是整張表的記錄。

-- update 表名 set 列1=值1,列2=值2,列3=值3,…… where 條件;

-- 把sid為3的王五的姓名,改為趙六。
update student set sname="王八" where sid = 3;

-- 把sid為6的諸葛亮的名字改為孔明,性別改為猛男。
update student set sname="孔明",sex="猛男" where sid=6;

結果如下:

刪除數據

delete

  • delete為物理刪除(一旦刪除就徹底沒有了)
  • delete語句要配合where篩選,進行使用,否則刪除的就是整張表的記錄。
-- delete from 表名 where 條件;

delete from student where sname="張三";

結果如下:

邏輯刪除

注意:其實就是一個修改操作,以下兩個語句配合使用

 -- 添加一個字段
 alter table `student` add `isdelete` enum(1,0) default 0;
 -- 把不想看到數據 isDelete 設置為 1
 update student set isdelete=1 where sid=6;
 -- 然后顯示的時候把 isDelete=1 的值過濾 
 select * from student where isdelete=0;

注意:delete 屬於物理刪除,一旦刪除,數據就不存在,因此,重要數據建議用邏輯刪除,不重要數據采用 delete 刪除

truncate和delete的區別

有如下表

  • delete刪除

  • truncate清空

truncate和delete的區別:

  • 都是不修改結構,只清除數據。

  • delete刪除不釋放資源,truncate釋放表占用的空間(會重置主鍵自增)。

  • delete是逐行刪除,刪除記錄是作為事務記錄在日志文件中,可進行回滾操作。truncate一次性刪除表中所有數據,刪除記錄不會記錄在日志文件中,無法恢復,刪除效率高於delete。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM