mysql之select,insert,delete,update


寫在前面

上篇文章學習了創建數據庫和數據表,這篇文章將學習對數據表的增刪改查操作。

系列文章

mysql之創建數據庫,創建數據表

一個例子

上篇文章中,創建了數據庫和數據表,數據表中還沒有數據,這里我們為三張表中添加數據進行測試。

注意:為了避免字段名或者表明與系統的某些關鍵字重復,可以使用``包裹字符串,與sql server中的[]類似。``在鍵盤上方數字鍵最左邊的那個鍵(英文輸入法)

1、添加四個班級信息

use school;
-- 添加班級信息
insert into tb_class(`name`) values('信管01');
insert into tb_class(`name`) values('信管02');
insert into tb_class(`name`) values('信管03');
insert into tb_class(`name`) values('信管04');

2、添加學生信息

use school;
-- 添加學生信息
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values('張三','13810707322',20,1,1);
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values('李四','13810707324',19,1,2);
-- 批量添加
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) 
values
('王二','13810707325',18,1,2),
('麻子','13810707323',23,1,1),
('張三豐','13810707321',22,1,3),
('張無忌','13810707326',21,1,1),
('孫悟飯','13810707328',24,1,1),
('孫悟空','13810707327',23,1,4),
('鳴人','13810707329',25,1,1),
('路飛','13810707320',26,1,2);

3、添加學生成績信息

-- 添加學生成績
insert into tb_score(`course`,`score`,`stuid`) 
values
('高數',89,1),
('計算機',89,1),
('java',89,1),
('.net',89,1);

好了,有數據了,就可以學習查詢,刪除,修改等操作了。
4、查詢所有學生信息

1 use school;
2 -- 查詢所有的學生信息
3 select * from tb_student;
4 -- 等價於,不過在數據量非常大的時候,推薦使用下面的這種查詢方式。
5 select id,`Name`,`phone`,Age,gender,createdate,classid from tb_student;

結果集

你會發現,在上篇文章中,已經為createdate添加了默認約束,但這里並沒有顯示結果。原來的字段名稱為date,后來改為了createdate。默認約束並沒有保持。

alter table tb_student change createdate createdate datetime default now();

測試,添加一條數據

insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values('明哥','13810707322',20,1,1);

結果

5、查詢‘信管03’班的所有學生信息。

-- 查詢信管03班的學生信息
select s.id '編號',s.`Name` '名字',s.`phone` '電話',s.Age '年齡',s.gender '性別',s.createdate as '入學時間',c.`name` as '班級名稱' from tb_student s inner join tb_class c on s.classid=c.id;

從上面的sql語句可以看出,可以為字段名起別名,通過as 或者直接寫別名,這點與sqlserver中類似。inner join的用法也類似。
結果

上面的結果,看起來比較亂,可以按照id進行升序排序。

use school;
-- 查詢信管03班的學生信息
select s.id '編號',s.`Name` '名字',s.`phone` '電話',s.Age '年齡',s.gender '性別',s.createdate as '入學時間',c.`name` as '班級名稱' from tb_student s inner join tb_class c on s.classid=c.id order by s.id;

6、取前3為學生的信息。

select 
s.id '編號',s.`Name` '名字',
s.`phone` '電話',s.Age '年齡',s.gender '性別',
s.createdate as '入學時間',c.`name` as '班級名稱'
 from tb_student s 
 inner join tb_class c 
 on s.classid=c.id 
 order by s.id 
 limit 3;

注意:取前幾條數據,這里與sql server中的用法不同,在sql server中取前幾條數據使用的是top,而mysql使用limit。

7、刪除id=1的學生信息。

use school;
-- 刪除id=1的學生信息。
delete from tb_student where id=1;

這樣直接刪除,mysql會報一個錯誤。
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`school`.`tb_score`, CONSTRAINT `FK_Stuid` FOREIGN KEY (`stuId`) REFERENCES `tb_student` (`id`))

可以先加上這句話,再進行刪除。

use school;
-- 刪除id=1的學生信息。
set FOREIGN_KEY_CHECKS = 0;
delete from tb_student where id=1;

注:set FOREIGN_KEY_CHECKS = 0;取消外鍵檢測。否則mysql會認為刪除是非安全的。
9、更新所有的入學時間為空的學生信息,並設置入學時間為當前時間。

use school;
-- 更新所有的入學時間為空的學生信息,並設置入學時間為當前時間
SET SQL_SAFE_UPDATES = 0 ; 
update tb_student set createdate=now() where isnull(createdate);
select * from tb_student;

在使用mysql執行update的時候,如果不是用主鍵當where語句,會報如下錯誤,使用主鍵用於where語句中正常。

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

注:在修改的時候,需加上SET SQL_SAFE_UPDATES = 0 ;取消安全更新模式。如果想要提高數據庫安全等級,可以在恢復回原有的設置,執行命令:SET SQL_SAFE_UPDATES = 1;

執行上面的語句,執行成功。

總結

好了,mysql中使用的增刪改查就總結到這里,如果有sqlserver數據庫的基礎,學mysql還是很簡單的。 下篇文章將介紹order by,group by等的使用。


免責聲明!

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



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