再談刪除資料的SQL語句,資料sql語句

來源:互聯網
上載者:User

再談刪除資料的SQL語句,資料sql語句

        無論是剛畢業的大學生還是已經在軟體領域拼殺多年的老手,只要提及刪除資料的SQL語句無人不知無人不曉,再談刪除資料的SQL語句不免顯得賣弄,呵呵呵,不要好高騖遠:

        有如下兩個表:

        表1:

CREATE TABLE `lm_r_user_info` (   `id` CHAR(36) NOT NULL COMMENT '使用者基礎資訊ID',   `real_name` VARCHAR(30) NOT NULL COMMENT '真實姓名',   `gender` INT(11) DEFAULT NULL COMMENT '性別',   `birthday` DATE DEFAULT NULL COMMENT '出生日期',   `nation` INT(11) DEFAULT NULL COMMENT '民族',   `telephone` VARCHAR(20) DEFAULT NULL COMMENT '固定電話',   `mobile` VARCHAR(20) DEFAULT NULL COMMENT '行動電話',   `email` VARCHAR(100) DEFAULT NULL COMMENT '電子郵件',   `qq` VARCHAR(20) DEFAULT NULL COMMENT 'QQ號',   `wechat` VARCHAR(100) DEFAULT NULL COMMENT '',   `address` VARCHAR(100) DEFAULT NULL COMMENT '聯絡地址',   `summary` VARCHAR(4000) DEFAULT NULL COMMENT '簡歷',   `remark` VARCHAR(4000) DEFAULT NULL COMMENT '備忘',   PRIMARY KEY (`id`),   KEY `idx_user_info_realName` (`real_name`) USING BTREE ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='使用者基礎資訊'
        表2:

CREATE TABLE `lm_r_user` (   `id` CHAR(36) NOT NULL COMMENT '使用者ID',   `user_info_id` CHAR(36) NOT NULL COMMENT '使用者基礎資訊ID',   `user_name` VARCHAR(50) DEFAULT NULL COMMENT '使用者名稱',   `password` VARCHAR(100) NOT NULL COMMENT '使用者密碼',   PRIMARY KEY (`id`),   UNIQUE KEY `user_idx_userInfoId` (`user_info_id`) USING HASH ) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='使用者資訊'
        表1和表2之間的關係:表2通過user_info_id欄位和表1關聯。

        需求:刪除使用者名稱為“admin”的使用者資訊及其基本資料。

        最傻的方式:

        根據使用者名稱先從表2中擷取相應的使用者基本資料的標識(即表2中對應的user_info_id欄位),然後執行delete from lm_r_user where user_name = 'admin',再執行delete from lm_r_user_info where id= '查詢出來的使用者資訊標識'

        這種方式的缺陷:如果使用這種方式進行資料的刪除恐怕需要三次資料庫連接,這無形中增加了伺服器端的壓力

        最可取的方式:

        delete u, ui from lm_r_user_info ui inner join lm_r_user u on u.user_info_id = ui.id where u.user_name = 'admin'

        這種方式的優點:只需要串連一次資料。

        其實第二種方式之所以不容易想到是因為大家用慣了“delete from 表名”這種刪除資料的SQL語句的方式,這種方式可以用另一種方式代替:“delete 別名.* from 表名 別名”(你看清了嗎?),部落格寫到這裡有人可能會心生疑問——

        1、這傻逼,“delete 別名.* from 表名 別名”不就是“delete * from 表名”嗎,幹嘛還要別名,呵呵呵,如果你認為這裡的別名多餘,那麼只能證明你是多麼的白癡——“delete * from 表名”是不能執行的,一定要有別名(至少在MySQL資料庫中無法執行),不過這種方式(“delete * from 表名”)在w3cschool中認為是對的。

        2、既然刪除資料的SQL語句可寫成“delete 別名.* from 表名 別名”,那麼我可不可以通過這樣的SQL語句(“delete 別名.列名 from 表名 別名”)刪除一列或多列呢?呵呵呵,別開玩笑了,要知道delete是用於刪除資料表中行的。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.