mysql 資料庫 基礎整理
1、 mysql 基本使用命令
-
啟動mysql伺服器
-
windows中啟動伺服器
net start mysql;
關閉:net stop mysql; -
Linux啟動伺服器,預設開啟的
service mysql start;
關閉:service mysql stop;
-
-
進入mysql
命令:mysql -u 使用者名稱 -p
然後輸入密碼即可進入, 如果看到 mysql> 則成功進入 -
**window與Linux的資料庫命令一致
-
檢視資料庫的版本
select version(); -
select now();
-
退出
exit 或者 quit
2 庫的操作
-
展示所有的資料庫
show databases;
展示所有的已經存在的資料庫
mysql預設會有管理自己的庫,表,使用者,配置的資料庫 -
建立一個數據庫
格式:create database 資料庫名 charset=“utf8”;
例:create database school charset=“utf8”; -
刪除一個數據庫
格式:drop database 資料庫名;
例:drop database school; -
改
-
使用某個倉庫
格式:use 資料庫名; -
檢視當前使用的資料庫
格式:select database();
3 表的操作
-
查詢當前庫中的所有表
格式:show tables; -
建立一個表
格式:create table 表名(欄位名 欄位描述,欄位名n 欄位描述,…)
例:create table student(id int primary key auto_increment,name varchar(20) not null,age int default 17,address varchar(20),sex bit default 1);
auto_increment:自增 -
查看錶的結構
格式1:desc 表名;
格式2:show create table student; -
刪除一個表
格式:drop table 表名;
例:drop table student; -
修改表
-
修改表名
格式:rename table 舊錶名 to 新表名;
例:rename table student to students; -
修改表結構
格式:alter table 表名 add|drop|change;- 新增一個新的欄位
格式:alter table 表名 add 欄位名 欄位描述;
例:alter table students add phonenum varchar(20); - 刪除一個欄位
格式:alter table 表名 drop 欄位名;
例:alter table students drop phonenum; - 修改一個欄位
格式:alter table 表名 change 要修改的欄位名 新的欄位名 新的欄位描述;
例:alter table students change phonenum phone varchar(20);
- 新增一個新的欄位
-
開發過程中儘量不要修改已經有資料的欄位,設計表的時候儘量涉及一些預留欄位
-
4 資料的操作
-
增加資料
- 插入一條資料
格式: insert into 表名 values(對應的值1,對應的值2,對應的值n)
例:insert into students values(0,“三胖”,19,“濟南”,1,12345);
注意:插入的值要與表對應欄位一一對應如果是自動增長的資料型別,將該值設定為 0即會自動的增長 - 缺少值插入
格式: insert into 表名(欄位1,欄位2,欄位n,…) values(欄位1對應的值,欄位2對應的值,欄位n對應的值,…);
例:insert into students(name, age, sex) values (“四胖”,13,0); - 插入多條資料
格式: insert into 表名 values(對應的值1,對應的值2,對應的值n),(對應的值1,對應的值2,對應的值n) ,(對應的值1,對應的值2,對應的值n) …;
例:insert into students values(0,“五胖”,10,“青島”,1,12345),(0,“六胖”,15,“槐蔭”,0,12345);
- 插入一條資料
-
刪除資料
格式: delete from 表名 where 條件
例:delete from students where id=2;
delete from students where name=“四胖”; -
修改資料
格式: update 表名 set 欄位名 = 值1,欄位名2 = 值2 where 條件
例:update students set name = “五五胖”,address=“中國” where id=3; -
查詢資料的表中的所有資料
查詢所有資料 格式: select * from 表名;
例:select * from student;
5 查詢語句
-
格式1: select 欄位名1,欄位名n,… from 表名 where 查詢條件
格式2: select 欄位名1 as 別名,欄位名n,… from 表名 where 查詢條件- select表示查詢
- select後面是查詢結果要顯示的欄位名
例:select name, age from students; - *表示顯示所有欄位的資料
- from 後面是表名,表示從那個表中查詢
- where 條件 表示以某個條件進行篩選
- 如果沒有where條件,表示查詢所有
- 欄位名1 as 別名 可以給顯示的欄位名取個別名,方便檢視
需求:展示所有學生的姓名和年齡
select name as “姓名”, age as “年齡” from students;
查詢所有: select * from 表名
-
查詢條件 表示式
- 比較運算子
.> 大於
< 小於
.>= 大於等於
<= 小於等於
= 等於
!= 不等於- 需求: 查詢班上大於15歲的學生 ?
select * from students where age>15; - 查詢班上小於等於15歲的學生 ?
select * from students where age<=15; - 查詢班上不等於15歲的學生 ?
select * from students where age!=15;
- 需求: 查詢班上大於15歲的學生 ?
- 邏輯運算子
且 and
或 or
非 not- 需求: 查詢班上大於10歲且小於20歲的學生 ?
select * from students where age>10 and age<20; - 需求: 查詢班上除了中國的學生
select * from students where not address=“中國”;
- 需求: 查詢班上大於10歲且小於20歲的學生 ?
- 模糊運算子
格式: … where 欄位名 like ‘字串’
任意字元: % 任意多個任意字元
_ 一個任意字元- 需求: 查詢姓五的同學?
select * from students where name like"五%"; - 查詢姓五的同學,且只有2個字?
select * from students where name like"五_"; - 查詢名字中包含 五 字的同學
select * from students where name like"%五%";
- 需求: 查詢姓五的同學?
- 範圍運算子
- 格式:格式1: … where 欄位名 in (值1,值2,值3)
是否等於 () 中的某一個值 - 格式:… where 欄位名 between 值1 and 值2
需求: 查詢出住在 槐蔭 或者 青島 或者… 的同學 ?
select * from students where address in (“槐蔭”,“青島”);
- 格式:格式1: … where 欄位名 in (值1,值2,值3)
- 空值判斷
- 格式1: … where 欄位名 is null;
需求:將address為空的所有資料篩選出來?
select * from students where address is null; - 格式2: … where 欄位名 is not null;
需求:將address不為空的所有資料篩選出來?
select * from students where address is not null;
- 格式1: … where 欄位名 is null;
- 運算子的優先順序
- 以上運算子可以綜合使用
- 加上()
- 比較運算子
-
聚合函式
- count(*) 統計查詢結果的數量
- max(欄位名) 統計某個欄位的最大值
- min(欄位名) 統計某個欄位的最小值
- avg(欄位名)
- sum(欄位名) 統計某個欄位的總和
格式: select 聚合函式 from 表名 where 條件
需求: 查詢該表總共有多少學生
select count(*) from students;
需求: 獲取學生的最大年齡?
select max(age) from students;
需求: 統計年齡的平均值 ?
select avg(age) from students;
-
分組 group by
格式: select … from 表名 where 條件 group by 欄位名
**統計某個欄位有多少種值
需求: 檢視有多少種地址 ?
select address from students group by address;
需求:查詢每個地址有多少人?
select address,count() from students group by address;
需求: 再查詢出槐蔭有多少人 ?
select address,count() from students group by address having address=“槐蔭”;having 條件 表示在某個結果集上繼續篩選
注意: where 與having 後面都是跟一個條件表示查詢,
但是where是先篩選, having是在where的結果後再篩選 -
排序 order by
格式: select … from 表名 where 條件 order by 欄位名 排序規則;(預設升序)
需求:查詢所有學生,並按年齡排序
select * from student order by age desc;
降序:desc
升序:asc
6 表的設計(表的關係)
-
一對一關係
場景: 學生 1—檔案表 1 -
一對多關係
場景: 班級 1 ----學生 多 -
多對多關係
場景: 學生 多 — 課程 多
注意:需要第3張表來維護關係
7 一對一案例
**在一對多的案例上的外健上加上唯一性的約束即可 unique
8 一對多關係
-
設計表
- 班級表
create table classes(classid int primary key auto_increment,classneme varchar(20)); - 學生表
create table stu(students int primary key auto_increment,stuname varchar(20) not null,classid int,foreign key(classid) references classes(classid));
外來鍵格式:foreign key(外來鍵欄位名) references 表名(關聯欄位名)
classid是外健,需要關聯班級表的classid主鍵
- 班級表
-
插入資料
- 班級表
insert into classes values(0,“py01”),(0,“py02”),(0,“py03”),(0,“java01”),(0,“java02”),(0,“h501”),(0,“ui01”),(0,“h502”),(0,“ui02”); - 學生表
insert into stu values(0,“張三”,4);
insert into stu values(0,“李四”,1);
insert into stu values(0,“王五”,1);
insert into stu values(0,“趙六”,2);
insert into stu values(0,“田七”,1);
注:如果關聯的外健的值在關聯的表中不存在,則無法插入
insert into stu values(0,“胖八”,11);
- 班級表
-
查詢資料
- 檢視所有的學生姓名及其所在的班級:
例:select stu.stuname,classes.classneme from stu,classes where stu.classid=classes.classid;
注:表名.欄位名 可以指定到對應表中的欄位,再多表聯合的時候使用 - 展示py01班的所有學生
select stu.stuname,classes.classneme from stu,classes where stu.classid=classes.classid and classes.classid=1; - 展示所有學生的所有資訊
select stu.,classes. from stu,classes where stu.classid=classes.classid ;
- 檢視所有的學生姓名及其所在的班級:
-
連線關係查詢
- 內連線 inner join
- 左外連線 left join 或 left out join
- 右外連線 right join 或 right out join
select stu.stuname,classes.classname from classes left join stu on stu.classid=classes.classid and classes.classid=1; - 格式:select … from 表1 inner/left/right join 表2 on 條件;
9 多對多
-
設計表
- 學生表
create table student3(studentid int primary key auto_increment,stuname varchar(20) not null); - 課程表
create table courses(courses int primary key auto_increment,coursesname varchar(20)); - 學生-課程 表即選修課表
create table elective(studentid int,
coursesid int,
primary key(studentid,coursesid),
foreign key(studentid) references student3(studentid),
foreign key(coursesid) references courses(courses));
- 學生表
-
插入資料
插入學生
insert into student3 values(0,“張三”);
insert into student3 values(0,“李四”);
insert into student3 values(0,“王五”);
insert into student3 values(0,“趙六”);
insert into student3 values(0,“田七”);
插入課程
insert into courses values(0,“python”);
insert into courses values(0,“java”);
insert into courses values(0,“h5”);
insert into courses values(0,“ui”);
插入選修課資料
insert into elective values(1,1);
insert into elective values(1,2);
insert into elective values(1,4);
insert into elective values(3,1);
insert into elective values(3,4);
注意:如果關聯了外健,而外健的值在關聯的表中不存在,則無法成功插入 -
查詢資料
select student3.,courses. from student3,courses,elective where student3.studentid=elective.studentid and courses.courses=elective.coursesid;