1. 程式人生 > 其它 >Mysql基礎:03.DML 資料操作語言

Mysql基礎:03.DML 資料操作語言

DML語言

資料操作語言

  • 插入:insert
  • 修改:update
  • 刪除:delete

一、插入語句

1. 方式一 (常用)

語法:insert into 表名 (欄位1,…) values(值1,…);

特點:

  • 插入的值的型別要與列的型別一致或相容
  • 列的順序可以調換
  • 列數和值的個數必須一致
  • 列名可以省略,預設所有列
  • 不可以為null的列必須插入值。可以為null的列有兩種方式插入null
    • 寫列名,賦值寫null
    • 不寫列名,不賦值
#1.插入的值的型別要與列的型別一致或相容
INSERT INTO jobs(`job_id`,`job_title`,`min_salary`,`max_salary`) 
VALUES('ABC','anything',1000,2000);

#2.列的順序可以調換
INSERT INTO jobs(`job_id`,`min_salary`,`max_salary`,`job_title`) 
VALUES('DEF',1000,2000,'anything');

#3.列數和值的個數必須一致
INSERT INTO jobs(`job_id`,`min_salary`,`max_salary`,`job_title`) 
VALUES('DEF',2000,'anything'); # 報錯

#4.可以省略列名,預設所有列,而且列的順序和表中列的順序一致
INSERT INTO jobs VALUES('GHI','anything',1000,2000);

#5.不可以為null的列必須插入值。可以為null的列有兩種方式插入null
#方式一:寫列名,賦值寫null
INSERT INTO jobs(`job_id`,`job_title`,`min_salary`,`max_salary`)
VALUES('jkl',NULL,NULL,NULL);

#方式二:不寫列名,不賦值
INSERT INTO jobs(`job_id`)
VALUES('mno');

2. 方式二

語法:insert into 表名 set 列名=值,列名=值……

INSERT INTO `jobs`
SET `job_id`= 'OPQ',`min_salary` = 1000;

3. 兩種方式對比

  • 方式一支援插入多行,方式二不支援
INSERT INTO `jobs`
VALUES('ABC','anything',1000,2000)
,('DEF',1000,2000,'anything')
,('jkl',NULL,NULL,NULL);
  • 方式一支援子查詢,方式二不支援
INSERT INTO `jobs`(`job_id`,`min_salary`,`max_salary`,`job_title`) 
SELECT 'ABC','anything',1000,2000; # 用select的結果替代values

二、修改語句

修改表的記錄

1. 修改單表記錄

  • 語法:update 表名 set 列=新值,列=新值,… where 篩選條件;
UPDATE `jobs` SET `min_salary` = 1500
WHERE `job_id`='ABC';

2. 修改多表記錄

有時想根據當前的表內容去修改另一個表中的內容,需要用到連線表

  • sql92語法:update 表1 別名, 表2 別名 set 列=值,… where 連線條件 and 篩選條件;

  • sql99語法:update 表1 別名 inner|left|right join 表2 別名 on 連線條件 set 列=值,… where 篩選條件;

# 修改job_title為Accounting Manager的職工的salary為20000,原本為12000
# employees表中沒有job_title這一屬性,jobs表才有
UPDATE `employees` e LEFT JOIN `jobs` j ON e.`job_id`=j.`job_id`
SET e.salary = 20000
WHERE j.job_title = 'Accounting Manager';

三、刪除語句

1. 方式一:delete

單表刪除

  • 語法:delete from 表名 where 篩選條件

    DELETE FROM jobs WHERE `job_id`='OPQ' OR `job_id`='mno';
    

多表刪除

  • sql99語法:

    delete 表1的別名,表2的別名
    from 表1 別名
    inner|left|right join 表2 別名 on 連線條件
    where 篩選條件;
    

2. 方式二:truncate

  • 語法:truncate table 表名

    truncate table jobs
    

truncate只能刪除整個表,不能新增where條件

3. 兩種方式的對比

  • delete 可以加where 條件,truncate不能加
  • delete刪除效率低,truncate刪除效率高,因為truncate沒有where條件
  • 假如要刪除的表中有自增長列,如果用delete刪除後,再插入資料,自增長列的值從斷點開始,而truncate刪除後,再插入資料,自增長列的值從1開始。
  • delete刪除有返回值,會告知有幾行受到影響,truncate刪除沒有返回值,雖然是全部刪除但並不告知有幾行受影響
  • delete刪除可以回滾,truncate刪除不能回滾