一 前言
經過之前的 【SQL】-SQL介紹, 【SQL】- SQL檢索階段一, 【SQL】-sql檢索階段二 的三篇文章你已經學會的sql的相關概念和如何查詢數據庫,這篇文章主要后續對數據庫表的進入插入,更新,和刪除操作,那么你學完這篇就等於最基礎的sql開發你已經學完了,如果跟java結合起來也就是crud;后續會推出sql的進階學習文章,當然出文章的速度不是很快,原因是還有其他類型文章要出;
建表語句:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶id',
`name` varchar(255) DEFAULT NULL COMMENT '用戶名',
`telephone` varchar(255) DEFAULT NULL COMMENT '用戶電話',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`info` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (1, 'youku1', 18, '大一新生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (2, 'youku2', 23, '畢業生');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (3, 'jeff', 25, '社會人士');
INSERT INTO `springboot`.`student`(`id`, `name`, `age`, `info`) VALUES (4, 'smile', 17, '高三學子');
二 插入
插入數據庫記錄也就是使用 INSERT 關鍵字,能將一條語句插入數據庫,高級的可以組合 SELECT 關鍵字 實現 插入查詢的結果集,插入整張表;
2.1 插入一條完整數據
語句示例:
INSERT INTO `user` ( id, `name`, telephone) VALUES ('2','zszxz','1327');
語句結果:
2 zszxz 1327
語句分析:
插入 數據 到 user 表 字段分別是 id, name , telephone; 值 分別是 2 , zszxz , 1327; 這是插一條完整的語句,雖然INTO可以忽略不寫,但不建議這么做,原因是在數據庫管理系統間會出現移植性問題;還有字段也可以忽略不寫,但也不建議這么做,這容易造成插入數據出錯;字段的位置和值的位置是一 一對應;如果有的位置沒值可以使用NULL代替;
2.2 插入部分數據
語句示例:
INSERT INTO `user` ( id, `name`) VALUES ('3','zszxz');
語句結果:
3 zszxz
語句分析:
插入數據到user表,字段分別是 id , name ; 值分別是,3,zszxz; 可以看見我們沒有插入telephone字段;
2.3 插入檢索數據
插入檢索的數據也就是能將查詢的結果插入進另一張表;我們可以使用 INSERT SELECT 關鍵組合成一條語句實現;
語句示例:
INSERT INTO `user` ( id, `name`)
SELECT id, `name` FROM student WHERE id = '4';
語句結果:
4 smile
語句分析:
插入數據到 user 表, 字段分別是 id, name ,值是查詢字段 id ,name 來自 student 表,條件是 id 等於 4;可以看見我們插入數據的列根查詢的列名稱是匹配對應的,其實只要列順序一致即可,不過為了不出錯,建議使用名稱匹配;
2.4 復制表
復制表即,檢索一張表的數據全部插入另一張表;有兩種方法,但是不同的數據庫管理系統支持不同,具體的看下文;
語句示例:
SELECT id , `name` INTO student_copy FROM student;
語句分析
查詢字段 id, name 插入 student_copy 表,來自 student 表; 注意 這條語句會幫我們自動創建表 student_copy,由於作者使用的是mysql做演示,這條sql執行失敗,原因是其不支持這種方式;如果是想復制整張表可以使用通配符 * ;
語句示例:
CREATE TABLE student_copy AS
SELECT * FROM student;
語句結果:
1 youku1 18 大一新生
2 youku2 23 畢業生
3 jeff 25 社會人士
4 smile 17 高三學子
語句分析:
創建表 student_copy 數據結構來源 查詢 所有字段來自 student 表;
三 更新
更新數據庫的行使用 UPDATE 關鍵字;更新操作是個很危險的操作,在每次執行前都應該檢查是否丟了 where 子句;
3.1 更新所有行
語句示例:
UPDATE student_copy set age = Null;
語句結果:
1 youku1 大一新生
2 youku2 畢業生
3 jeff 社會人士
4 smile 高三學子
語句分析:
更新 student_copy 表, 設置 字段 age 值為null; 可以看見表中所有的學生年齡都是Null; 如果有多個字段需要更新,使用 逗號隔開;
3.2 更新特定的行
語句示例:
UPDATE student_copy set age = '18' WHERE id = '4';
語句結果:
4 smile 18 高三學子
語句分析:
更新 student_copy 設置 學生的年齡是 18 條件是 id 等於 4;
3.3 更新來自查詢的結果集
語句示例:
UPDATE student_copy set age= student.age, name = student.name
FROM student
WHERE student.id = student_copy.id;
語句分析:
更新 student_copy 表 設置 age 是 student 表的 age,name 是 student 表的 name 條件是 student 的id 等於 student_copy 表的 id; 遺憾的是 mysql 數據庫管理系統又執行失敗了,其不支持這種方法更新,如果是postgresql就支持,其他數據庫應查閱官方文檔查看是否支持這種方式更新;
語句示例:
UPDATE student_copy INNER JOIN student on student.id = student_copy.id
SET student_copy.age= student.age, student_copy.name = student.name;
語句結果:
1 youku1 18 大一新生
2 youku2 23 畢業生
3 jeff 25 社會人士
4 smile 17 高三學子
語句分析
更新 student_copy 關聯 student 條件 是 student 的 id 等於 student_copy 表的id ; 設置 student_copy 表的 age 等於 student 的 age ; 設置 student_copy 表的 name 等於 student 的 name ;這才是正確進入Mysql 的更新查詢姿勢;
四 刪除表
刪除表中的行可以使用 DELETE 關鍵字 ,可以刪除特定的行或者全部;使用時請先看是否丟了where子句;
4.1 刪除整張表數據
DELETE from student_copy;
語句分析
刪除 全部行 來自 student_copy 表;
4.2 刪除特定的行
語句示例:
DELETE from student WHERE id = '4';
語句分析:
刪除 行 來自 student 表條件時 id 等於 4;
五 更新和刪除的建議
- 每次進行操作前檢查是否丟失 where 子句;
- 每次操作前最好先使用 select 語句驗證;