程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL數據庫CRUD語句快速入門

MySQL數據庫CRUD語句快速入門

編輯:MySQL綜合教程


MySQL數據庫CRUD語句快速入門   SQL語句 sql語句,一種用於操作數據庫的語言   數據庫, 簡單地理解為硬盤上的文件, 可以存放數據   sql 語句大致可以分類兩大類   進入數據庫的方法:  www.2cto.com     1. 命令行代碼:   進入數據庫C:\mysql -hlocalhost -P3306 -uroot -p123456   啟動數據庫 net start mysql   停止數據庫net stop mysql   一、針對數據庫database和表table的操作 1、database和table的常見操作 創建create   查看show   修改alter   刪除drop   // 創建一個數據庫   create database mydb;   // 查看所有的數據庫庫   show databases;   // 刪除 mydb   drop database mydb;   // 刪除 user 表   drop table user;   針對表中的記錄的操作  www.2cto.com     增 insert   刪 delete   改 update   查 select   2 操作數據庫 創建一個名稱為mydb1的數據庫   create database mydb1;   創建一個使用utf-8字符集的mydb2數據庫。   create database mydb2 character set utf8;   創建一個使用utf-8字符集,並帶校對規則的mydb3數據庫。   create database mydb3 character set utf8 collate utf8_general_ci;   查看當前數據庫服務器中的所有數據庫   show databases;   查看前面創建的mydb2數據庫的定義信息,字符信息   show create database mydb2;   刪除前面創建的mydb3數據庫   drop database mydb3;   將mydb2的字符集修改為gbk   alter database mydb2 character set gbk;   // 備份數據庫   use mydb2;   create table a   (   name varchar(20)   );   // 插入數據  www.2cto.com     insert into a (name) values("zhangsan");   insert into a (name) values("wangwu");   // 備份數據庫   mysqldump -uroot -proot mydb1 > d:\a.sql   這條命令跟mysql是一個級別的,所以不能在mysql下面使用。   // 刪除 mydb2   drop database mydb2;   // 恢復數據庫   create database mydb22;   source d:\a.sql   // source 命令   指定一個sql腳本   關閉報錯聲音   Mysql –uroot –p123456 -b   3、操作表 1. 創建表   創建員工表   Id 整形   name 字符型   sex 字符型或bit型   brithday 日期型   Entry_date 日期型   job 字符型   Salary 小數型   resume 大文本型   創建表:   create table employee   (   id int,   name varchar(20),   gender varchar(6),   brithday date,   entry_date date,   job varchar(20),   salary double,   reshme text   );   2. 修改表  www.2cto.com     在上面員工表的基礎上增加一個image列   alter table employee add image blob;   修改job列,使其長度為60   alter table employee modify job varchar(60);   刪除sex列。   alter table employee drop sex;   表名改為users。   rename table employee to user;   修改表的字符集為utf-8   alter table user character set utf8;   列名name修改為username   alter table user change column name username varchar(20);   查看所有表   show tables;   查看表的創建語句   show create table user;   查看表結構   desc user;   刪除 user 表   drop table user;   4、針對表中數據的增刪改查 針對表中的數據操作無外乎四個:增刪改查 crud create   1. insert語句  www.2cto.com     employee.sql   create table employee   (   id int,   name varchar(20),   sex varchar(10),   birthday date,   salary float,   entry_date date,   resume text   );   // 向員工表插入三條記錄   Insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(1,'zhangsan','male','1987-11-23',1500,'2010-2-18','good boy');   insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(2,'wangwu','male','1988-11-23',1200,'2010-2-18','good boy');   insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(3,'xiaohong','female','1983-11-23',1800,'2010-2-18','good girl');   insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(4,'趙楠','男','1986-11-23',3800,'2011-2-18','絕種好男人');   // 查看表的所有記錄   select * from employee;   // 查看數據使用的所有編碼   show variables like 'character%';   // 修改客戶端的編碼 為 gbk   set character_set_client=gbk;   // 修改結果集的編碼為gbk   set character_set_results=gbk;   // insert 語句的其他寫法   create table a   (   username varchar(20),   password varchar(20)   );   insert into a values('zs','111');   insert into a values('wangwu','2222'),('lisi','3333');   insert a values('aaa','bbb');   insert a (username) values('aaa');   2. update語句  www.2cto.com     將所有員工薪水修改為5000元   update employee set salary=5000;   將姓名為’zhangsan’的員工薪水修改為3000元。   update employee set salary=3000 where name='zhangsan';   將姓名為’lisi’的員工薪水修改為4000元,sex改為female。   update employee set salary=4000,sex='female' where name='wangwu';   將xiaohong的薪水在原有基礎上增加1000元   update employee set salary=salary+1000 where name='xiaohong';   3. delete語句   刪除表中name為’趙楠’的記錄。   delete from employee where name='趙楠';   刪除表中所有記錄。Delete是一條條的刪,如果條目很多的話,會效率很低   delete from employee;   使用truncate刪除表中記錄。 摧毀表再創建表 盡量用這個   truncate employee;   4. select語句   student.sql   create table student(   id int,   name varchar(20),   chinese float,   english float,   math float   );   insert into student(id,name,chinese,english,math) values(1,'張小明',89,78,90);   insert into student(id,name,chinese,english,math) values(2,'李進',67,53,95);   insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);   insert into student(id,name,chinese,english,math) values(4,'李一',88,98,92);   insert into student(id,name,chinese,english,math) values(5,'李來財',82,84,67);   insert into student(id,name,chinese,english,math) values(6,'張進寶',55,85,45);   insert into student(id,name,chinese,english,math) values(7,'黃蓉',75,65,30);   查詢表中所有學生的信息。   select * from student;   查詢表中所有學生的姓名和對應的英語成績。   select name,english from student;   過濾表中重復數據。   select distinct english from student;   在所有學生分數上加10分特長分。   select name,english+10,chinese+10,math+10 from student;   統計每個學生的總分。   select name,english+chinese+math as sum from student;   使用別名表示學生分數。   where 子句   查詢姓名為李一的學生成績   select * from student where name='李一';   查詢英語成績大於90分的同學   select * from student where english>90;   查詢總分大於200分的所有同學   select name,english+chinese+math sum from student where english+chinese+math>200;   此處可以不用as   運算符  www.2cto.com     查詢英語分數在 80-90之間的同學。   select * from student where english between 65 and 85;   查詢數學分數為89,90,91的同學。   select name,math from student where math in(89,90,91);   查詢所有姓李的學生成績。   select * from student where name like '李%';   // 查詢姓李的兩個字的學生   select * from student where name like '李_';   查詢數學分>80,語文分>80的同學。   select * from student where math>80 and chinese>80;   查詢英語>80或者總分>200的同學   select *,chinese+math+english from student where english>80 or chinese+english+math>200;   order by 子句   對數學成績排序後輸出。   select * from student order by math;   對總分排序後輸出,然後再按從高到低的順序輸出   select *,chinese+math+english from student order by chinese+math+english desc;   對姓李的學生成績排序輸出 order從句是需要放在where從句的後面   select *,chinese+math+english from student where name like '李%' order by chinese+math+english;   合計函數   count   統計一個班級共有多少學生?   select count(*) from student;   統計數學成績大於90的學生有多少個?   select count(*) from student where math>90;   統計總分大於230的人數有多少?   select count(*) from student where chinese+math+english>230;   sum   統計一個班級數學總成績?   select sum(math) from student;   統計一個班級語文、英語、數學各科的總成績   select sum(math),sum(chinese),sum(english) from student;   統計一個班級語文、英語、數學的成績總和   select sum(math+chinese+english) from student;   統計一個班級語文成績平均分   select sum(chinese)/count(*) from student;   缺考的不參與計算   select sum(chinese)/count(chinese) from student;   avg   語文平均分   select avg(chinese) from student;   max/min   語文最 高分   select max(chinese) from student;   select語句(6)   group by   訂單表   create table orders(   id int,   product varchar(20),   price float   );   insert into orders(id,product,price) values(1,'電視',900);   insert into orders(id,product,price) values(2,'洗衣機',100);   insert into orders(id,product,price) values(3,'洗衣粉',90);   insert into orders(id,product,price) values(4,'桔子',9);   insert into orders(id,product,price) values(5,'洗衣粉',90);   將商品歸類   select * from orders group by product;   顯示單類商品總結   select *,sum(price) from orders group by product;   商品分類 顯示單類商品總價大於100的   select *,sum(price) from orders group by product having sum(price)>100;   // 將單價大於20 的商品進行歸類顯示 按照價格排序   select * from orders where price>20 group by product order by price;   5、表的約束 表的約束就是在定義表時,我們可以在創建表的同時為字段增加約束,對將來插入的數據做一些限定   www.2cto.com   一、表的約束   表的約束就是在定義表時,為表中的字段加一些約束條件,對將來插入的數據做一些限定   1. 唯一約束 unique   create table a   (   id int,   username varchar(20) unique,   password varchar(20)   );   insert into a (id,username,password) values(1,'zhangsan','1111');   insert into a (id,username,password) values(2,'wangwu','1111');   2. 非空約束 not null   create table b   (   id int not null,   name varchar(20)   );   insert into b (id,name) values (1,'aaaa');   insert into b (id,name) values (1,'bbbb');   3. 主鍵約束 相當於 唯一約束+非空約束   數據庫中的每張表都應該至少有一個主鍵,通常是id   create table c   (   id int primary key,   name varchar(20)   );   insert into c(id,name) values (1,'aaaa');   insert into c(id,name) values (2,'bbbb');   create table d   (   firstname varchar(20),   lastname varchar(20),   primary key(firstname, lastname)   );   insert into d (firstname, lastname) values ('tom', 'cat');   insert into d (firstname, lastname) values ('tom', 'hks');   create table e   (   id int ,   name varchar(20)   );   insert into e (id,name) values(1,'aaa');   為表加上主鍵約束   alter table e add primary key(id);   此處修改的命令:   修改job列,使其長度為60。   alter table employee modify job varchar(60);   刪除主鍵約束   alter table e drop primary key;   www.2cto.com   4. 定義主鍵自動增長   這個的作用就是讓id鍵隨著條目的增加,自動往上增長。   注意主鍵類型必須是int,只有int類型的才可以自增   create table f   (   id int primary key auto_increment,   name varchar(20)   );   insert into f(name) values ('aaa');   insert into f(id,name) values (11,'bbb');   mysql> select * from f;   +----+------+   | id | name |   +----+------+   | 1 | aaa |   | 2 | aaa |   | 3 | aaa |   | 4 | aaa |   | 11 | bbb |   | 12 | aaa |   | 13 | aaa |   | 14 | aaa |   | 15 | aaa |   | 16 | aaa |   +----+------+   外鍵約束   約束力: 插入的外鍵值必須為被參照列存在的值   被參照表中被參照的數據不允許刪除   注意:外鍵約束並沒有非空和唯一的約束力   創建丈夫表和妻子表   create table husband   (   id int primary key auto_increment,   name varchar(20)   );   create table wife   (   id int primary key auto_increment,   name varchar(20),   husbandid int,   constraint husbandid_FK foreign key(husbandid) references husband(id)   );   www.2cto.com   外界約束:Constraint是定義外鍵約束的,foreign key是外鍵的名稱 參照某張表的主鍵   分別添加兩條記錄   insert into husband(name) values ('laobi');   insert into husband(name) values ('laoyu');   insert into wife(name,husbandid) values ('fengjie',2);   insert into wife(name,husbandid) values ('furongjie',1);   fengjie 找老公   select * from husband where id=(select husbandid from wife where name='fengjie');   delete from husband where name='laoyu';   6 表的關系 1 多對一   創建部門表   create table department   (   id int primary key auto_increment,   name varchar(20)   );   添加三個部門信息   insert into department(name) values('開發部');   insert into department(name) values('銷售部');   insert into department(name) values('人事部');   創建員工表   create table employee   (   id int primary key auto_increment,   name varchar(20),   departmentid int,   constraint departmentid_FK foreign key(departmentid) references department(id)   );   添加六個員工信息   insert into employee(name,departmentid) values ('張三',1);   insert into employee(name,departmentid) values ('李四',1);   insert into employee(name,departmentid) values ('王五',2);   insert into employee(name,departmentid) values ('趙六',3);   insert into employee(name,departmentid) values ('田七',3);   insert into employee(name,departmentid) values ('周八',null);   多表的查詢   查出1號部門所有的員工   select * from employee where departmentid=1;   查出開發部所有的員工   select * from employee where departmentid=(select id from department where name='開發部');   查出趙六在那個部門   select * from department where id=(select departmentid from employee where name='趙六');   --------------------------------------   www.2cto.com   聯合查詢   查出開發部所有的員工   select * from department,employee;   +----+--------+----+------+--------------+   | id | name | id | name | departmentid |   +----+--------+----+------+--------------+   | 1 | 開發部 | 1 | 張三 | 1 |   | 2 | 銷售部 | 1 | 張三 | 1 |   | 3 | 人事部 | 1 | 張三 | 1 |   | 1 | 開發部 | 2 | 李四 | 1 |   | 2 | 銷售部 | 2 | 李四 | 1 |   | 3 | 人事部 | 2 | 李四 | 1 |   | 1 | 開發部 | 3 | 王五 | 2 |   | 2 | 銷售部 | 3 | 王五 | 2 |   | 3 | 人事部 | 3 | 王五 | 2 |   | 1 | 開發部 | 4 | 趙六 | 3 |   | 2 | 銷售部 | 4 | 趙六 | 3 |   | 3 | 人事部 | 4 | 趙六 | 3 |   | 1 | 開發部 | 5 | 田七 | 3 |   | 2 | 銷售部 | 5 | 田七 | 3 |   | 3 | 人事部 | 5 | 田七 | 3 |   | 1 | 開發部 | 6 | 周八 | NULL |   | 2 | 銷售部 | 6 | 周八 | NULL |   | 3 | 人事部 | 6 | 周八 | NULL |   +----+--------+----+------+--------------+   笛卡爾集 多張表的所有記錄的排列組合   笛卡爾集當中有很多部匹配的數據(參照表外鍵列的值和被參照表主鍵的值不一致) 為了方便 以下稱為廢數據   www.2cto.com   加條件去掉廢數據   select * from department,employee where employee.departmentid=department.id;   加條件做查詢   select * from department,employee where employee.departmentid=department.id and department.name='開發部';   優化 給表加別名 只保留需要的數據   select e.* from department d,employee e where e.departmentid=d.id and d.name='開發部';   查出趙六在那個部門   select d.* from department d,employee e where e.departmentid=d.id and e.name='趙六';   2. 多對多   創建老師表   create table teacher   (   id int primary key auto_increment,   name varchar(20)   );   添加三個老師   insert into teacher(name) values ('老方'),('老余'),('老畢');   create table student   (   id int primary key auto_increment,   name varchar(20)   );   添加三個學生   insert into student(name) values('大毛'),('二毛'),('三毛'),('四毛'),('五毛'),('六毛'),('七毛'),('八毛'),('小毛');   www.2cto.com   創建中間表描述關系   create table tea_stu   (   teaid int,   stuid int,   primary key(teaid,stuid),   constraint teaid_FK foreign key(teaid) references teacher(id),   constraint stuid_FK foreign key(stuid) references student(id)   );   添加數據   insert into tea_stu (teaid,stuid) values (1,1),(1,2),(1,4),(1,5),(1,6),(1,8),(2,1),(2,3),(2,5),(2,7),(2,9),(3,2),(3,3),(3,4),   (3,5),(3,6),(3,7),(3,8);   查詢2號老師教過的學生   select s.* from student s,tea_stu ts where ts.stuid=s.id and ts.teaid=2;   查詢老余教過的所有的學生   select s.* from student s,tea_stu ts,teacher t where ts.stuid=s.id and ts.teaid=t.id and t.name='老余';   多表聯合查詢   查詢的結果為笛卡爾集   www.2cto.com   n張表聯合查需要n-1個條件來去掉廢數據   去掉廢數據的條件 參照表的外鍵列=被參照表的主鍵列   再加上查詢條件即可得到結果   3. 一對一   create table person  (      id int primary key auto_increment,      name varchar(20)  );   create table idcard  (      id int primary key,      location varchar(20),      constraint personid_FK foreign key(id) references person(id)  );   www.2cto.com   insert into person (name) values('zhangsan');  insert into person (name) values('lisi');   insert into idcard (id,location) values(2,'天津');   insert into idcard (id,location) values(1,'上海');   查李四的身份證  select idcard.* from person,idcard where idcard.id=person.id and person.name='lisi';

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved