數據操縱語言(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。