前言:mysql
我是一隻至關白的小白,這是個人第一篇博客,記錄學習的點滴.當中有些許我在課堂上記錄的範例,若是發現疏漏錯誤的地方請指正,謝謝各位大神sql
連接數據庫數據庫
mysql -uroot -p
mysql -uroot -p你的密碼 # 可直接追加明文密碼(不安全,不推薦)
複製代碼
退出數據庫安全
quit/exit/ctrl + d(快捷鍵)
複製代碼
顯示當前數據庫版本bash
select version();
複製代碼
顯示當前時間服務器
select now();
複製代碼
查看當前使用的數據庫函數
select database();
複製代碼
查看全部數據庫學習
show databases;
複製代碼
建立數據庫 create database 數據庫名 charset=utf8; (MySQL默認建立編碼爲latin1,爲方便轉碼需在建立數據庫時指定編碼 charset=utf8 )ui
create database xxxx charset=utf8;
複製代碼
查看建立數據庫的語句 show create database 數據庫名編碼
show create database xxxx;
複製代碼
使用數據庫 use 數據庫的名字 可以使用該命令直接跳轉數據庫
use xxxx;
複製代碼
從sql文件中導入數據 source 具體地址/areas.sql;
source xxx.sql;
複製代碼
刪除數據庫 drop database 數據庫名; 注:若數據庫名稱中包含符號"-",則刪除時需在數據庫名稱上包裹``符號(鍵盤Tab鍵上方)
drop database `xxxx-xxxx`;
drop database xxxx;
複製代碼
查看當前數據庫中全部表
show tables;
複製代碼
數據類型 數據類型是指在建立表的時候爲表中字段指定數據類型,只有數據符合類型要求才能存儲起來, 使用數據類型的原則是:夠用就行,儘可能使用取值範圍小的,而不用大的,這樣能夠更多的節省存儲空間。
經常使用數據類型以下:
整數:int,bit 小數:decimal 字符串:varchar,char 日期時間: date, time, datetime 枚舉類型(enum)
數據類型說明:
decimal表示浮點數,如 decimal(5, 2) 表示共存5位數,小數佔 2 位. char表示固定長度的字符串,如char(3),若是填充'ab'時會補一個空格爲'ab ',3表示字符數 varchar表示可變長度的字符串,如varchar(3),填充'ab'時就會存儲'ab',3表示字符數 對於圖片、音頻、視頻等文件,不存儲在數據庫中,而是上傳到某個服務器上,而後在表中存儲這個文件的保存路徑. 字符串 text 表示存儲大文本,當字符大於 4000 時推薦使用, 好比技術博客.
數據約束 約束是指數據在數據類型限定的基礎上額外增長的要求.
常見的約束以下:
主鍵 primary key: 物理上存儲的順序. MySQL 建議全部表的主鍵字段都叫 id, 類型爲 int unsigned(無符號整形,即爲正數),建立主鍵時一般加上 auto_increment 表示自動增加. 非空 not null: 此字段不容許填寫空值. 唯一 unique: 此字段的值不容許重複. 默認 default: 當不填寫字段對應的值會使用默認值,若是填寫時以填寫爲準. 外鍵 foreign key: 對關係字段進行約束, 當爲關係字段填寫值時, 會到關聯的表中查詢此值是否存在, 若是存在則填寫成功, 若是不存在則填寫失敗並拋出異常.
建立表 create table 數據表名字 (字段 類型 約束,字段 類型 約束)
create table xxxx(xxxx varchar(30) not null,xxxx int unsigned);
複製代碼
查看錶結構 desc 數據表的名字;
desc xxxx;
複製代碼
範例:建立 students 表(id、name、age、high、gender、cls_id、is_delete)
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0, tinyint 表示字節大小爲 -128~127 或 0~255
height decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0);
複製代碼
查看錶的建立語句(可查看主鍵、引擎InnoDB等、自動增加變量、編碼等信息) show create table 表名字;
show create table students;
複製代碼
修改表-添加字段 alter table 表名 add 列名 類型;
alter table students add birthday datetime;
複製代碼
修改表-修改字段:不可重命名,僅修改類型及約束 alter table 表名 modify 列名 類型及約束;
alter table students modify birthday date not null;
複製代碼
修改表-修改字段:可重命名,表名、類型、約束都可修改 alter table 表名 change 原名 新名 類型及約束;
alter table students change birthday hobby varchar(30) default "你猜";
複製代碼
修改表-刪除字段 alter table 表名 drop 列名;
alter table students drop hobby;
複製代碼
刪除表 drop table 表名;
drop table xxxx;
複製代碼
刪除數據庫 drop database 數據庫;
drop database xxxx;
複製代碼
curd 的解釋: 建立 Create , 更新 Update , 讀取 Retrieve , 刪除 Delete
增長
模擬樣表(僅供理解)
| Field | Type | Null | Key | Default | Extra |
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| age | int(10) unsigned | YES | | NULL | |
| high | decimal(3,2) | YES | | NULL | |
| gender | enum('男','女','保密') | YES | | 保密 | |
| cls_id | int(11) | YES | | NULL | |
複製代碼
全列插入 insert [into] 表名(字段...) values(...) 主鍵字段 能夠用 0 null default 來佔位
insert into students values(0,'吳彥祖','25','1.85','男','66'); -- 此插入需保證插入值數與字段數一致
insert into students values(null,'吳彥祖','25','1.85','男','66');
insert into students values(default,'吳彥祖','25','1.85','男','66');
複製代碼
枚舉中的下標從 1 開始 1->'男' 2->'女' ....
insert into students values(default,'吳彥祖','25','1.85',1,'66');
複製代碼
部分插入
insert into students(name,gender) values("蔡徐坤",2);
複製代碼
一次插入多條數據
insert into students(name) values("吳亦凡"),("張藝興");
insert into students values(default,'吳彥祖','25','1.85','男','66'),
(default,'蔡徐坤','18','2.50',2,'99');
複製代碼
修改
update 表名 set 列1=值1,列2=值2... where 條件; 所有修改
update students set name = 'CXK';
複製代碼
按條件修改
update students set name = "CXK" where id = 3;
複製代碼
按條件修改多個值
update students set name = 'CXK',age = 20 where id = 2;
複製代碼
查詢
查詢全部列 select * from 表名;
select * from students;
複製代碼
定條件查詢 select * from students where id < 6;
select * from students where name = "CXK";
複製代碼
查詢指定列 select 列1,列2,... from 表名;
select name,age from students;
複製代碼
可使用as爲列或表指定別名 select 字段[as 別名] , 字段[as 別名] from 數據表;
select name as 姓名,age as 年齡 from students;
複製代碼
字段的順序
select age,name from students;
複製代碼
刪除
物理刪除 delete from 表名 where 條件 delete from students -> 整個數據表中的全部數據所有刪除
delete from students where id = 3;
複製代碼
邏輯刪除 用一個字段來表示 這條信息是否已經不能再使用了 給students表添加一個 is_delete 字段 bit 類型 alter table 表名 add 字段 類型 default 默認值;
alter table students add is_delete bit default 0;
update students set is_delete = 1 where id = 2;
複製代碼
查詢全部字段 select * from 表名;
select * from students;
複製代碼
查詢指定字段 select 列1,列2,... from 表名;
select name,age from students;
複製代碼
使用 as 給字段起別名 select 字段 as 名字.... from 表名;
select name as 姓名 from students;
複製代碼
select 表名.字段 .... from 表名;
select students.name from students;
複製代碼
能夠經過 as 給表起別名 select 別名.字段 .... from 表名 as 別名;
select s.name from students as s;
複製代碼
消除重複行(查性別) distinct 字段
select distinct gender from students;
複製代碼
條件查詢 比較運算符
= < <= != = <> select .... from 表名 where .....
查詢年紀大於18歲的信息
select * from students where age > 18;
複製代碼
一樣能夠查詢,並輸出對應信息(如下觸類旁通)
select id,name,gender from students where age > 18;
複製代碼
< 查詢年紀小於18歲的信息
select * from students where age < 18;
複製代碼
= <= 查詢小於或者等於18歲的信息
select * from students where age <= 18;
複製代碼
= 查詢年齡爲18歲的全部學生的名字
select * from students where age = 18;
複製代碼
!= 或者 <> 查詢年齡不爲18歲的全部學生的名字
select * from students where age != 18;
select * from students where age <> 18;
複製代碼
邏輯運算符
and 18和28之間的全部學生信息
select * from students where age > 18 and age < 28;
複製代碼
18歲以上的女性
select * from students where age > 18 and gender = '女';
複製代碼
or 18以上或者身高高過180(包含)以上
select * from students where age > 18 or height >= 180;
複製代碼
not 不在 18歲以上的女性 這個範圍內的信息 錯誤:select * from students where not age > 18 and gender = '女';
select * from students where not (age > 18 and gender = '女');
複製代碼
模糊查詢(where name like 要查詢的數據) like % 替換任意個 _ 替換1個 查詢姓名中 以 "小" 開始的名字
select name from students where name like '小%';
複製代碼
查詢姓名中 有 "小" 全部的名字
select name from students where name like '%小%';
複製代碼
查詢有2個字的名字
select name from students where name like '__';
複製代碼
查詢有3個字的名字
select name from students where name like '___';
複製代碼
查詢至少有2個字的名字
select name from students where name like '__%';
複製代碼
rlike 正則 查詢以 周開始、倫結尾的姓名
select name from students where name rlike '^周.倫$*'
複製代碼
範圍查詢 in (1, 3, 8)表示在一個非連續的範圍內 查詢 年齡爲18或34的姓名
select * from students where age = 18 or age = 34;
select * from students where age in (18,34);
複製代碼
not in 不在非連續的範圍以內 年齡不是 18或34歲的信息
select * from students where age not in (18,34)
複製代碼
between ... and ...表示在一個連續的範圍內 查詢 年齡在18到34之間的的信息 包含兩端從小到大
select * from students where age between 18 and 34;
複製代碼
not between ... and ...表示不在一個連續的範圍內 查詢 年齡不在18到34之間的的信息
select * from students where age not between 18 and 34;
複製代碼
空判斷 判空is null 查詢身高爲空的信息
select * from students where height is null;
複製代碼
判非空is not null
select * from students where height is not null;
複製代碼
order by 字段 默認 asc (升序) asc 從小到大排列,即升序 desc 從大到小排序,即降序
查詢年齡在18到34歲之間的男性,按照年齡從小到大到排序
select * from students where age > 18 and age < 34
and gender = '男' order by age asc;
select * from students where (age between 18 and 34)
and gender = '男' order by age;
複製代碼
查詢年齡在18到34歲之間的女性,身高從高到矮排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc;
複製代碼
order by 多個字段 查詢年齡在18到34歲之間的女性,身高從高到矮排序, 若是身高相同的狀況下按照年齡從小到大排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc,age asc;
複製代碼
若是年齡也相同那麼按照id從大到小排序
select * from students where (age between 18 and 34)
and gender = '女' order by height desc,age asc,id desc;
複製代碼
總數 count 查詢男性有多少人
select count(*) from students where gender = '男';
複製代碼
最大值 max 查詢最大的年齡
select max(age) from students;
複製代碼
查詢女性的最高 身高
select max(height) from students where gender ='女';
複製代碼
最小值 min
select min(height) from students where gender = '男';
複製代碼
求和 sum 計算全部人的年齡總和
select sum(age) from students;
複製代碼
平均值 avg 計算平均年齡
select avg(age) from students;
複製代碼
計算平均年齡 sum(age)/count(*)
select sum(age)/count(*) from students;
複製代碼
四捨五入 round(保留前的結果 , 1) 保留1位小數 拓展:小數後默認保留六位,若須要精確值可將值擴大10的次方倍數再進行存儲 如:3.1415 * 10^4 -> 存儲 計算全部人的平均年齡,保留2位小數
select round(avg(age),2) from students;
複製代碼
計算男性的平均身高 保留2位小數
select round(avg(height),2) from students where gender = '男';
複製代碼
group by select 分組字段 from 表名 group by 分組字段; 按照性別分組,查詢全部的性別
select gender from students group by gender;
複製代碼
計算每種性別中的人數
select gender,count(*) from students group by gender;
複製代碼
計算男性的人數
select gender,count(*) from students where gender = '男' group by gender;
複製代碼
查詢每組性別的平均年齡
select gender,avg(age) from students group by gender;
複製代碼
group_concat(...) 查詢同種性別中的姓名 返回一組的姓名
select gender,group_concat(name) from students group by gender;
複製代碼
查詢男性的姓名、年齡、id '_' 只爲方便閱讀
select gender,group_concat(name,'_',age,'_',id) from students
where gender = '男' group by gender;
複製代碼
having(注意having和group by 連用 having後一般也要跟 聚合函數) 查詢平均年齡超過30歲的性別,以及姓名
select gender ,avg(age), group_concat(name) from students
group by gender having avg(age) > 30;
複製代碼
查詢每種性別中的人數多於2個的信息
select gender,count(*) from students group by gender
having count(*) > 2;
複製代碼
limit start, count limit 放在最後面(注意)
起始位置 = (第N頁-1)*每一頁的個數
限制查詢出來的數據個數 查詢前5個數據
select * from students limit 0,5;
複製代碼
每頁顯示2個,第1個頁面
select * from students limit 0,2;
複製代碼
每頁顯示2個,第2個頁面
select * from students limit 2,2;
複製代碼
每頁顯示2個,第3個頁面
select * from students limit 4,2;
複製代碼
每頁顯示2個,第4個頁面
select * from students limit 6,2;
複製代碼
每頁顯示2個,顯示第6頁的信息, 按照年齡從小到大排序
select * from students order by age asc limit 10,2;
複製代碼
inner join ... on select ... from 表A inner join 表B on 條件; 查詢 有可以對應班級的學生以及班級信息
select * from students inner join classes
on students.cls_id = classes.id;
select * from students inner join classes
on students.cls_id = classes.id where students.gender ='女';
複製代碼
按照要求顯示姓名、班級
select students.name,classes.name from students inner join classes
on students.cls_id = classes.id;
複製代碼
給數據表起名字
select s.name,c.name from students as s
inner join classes as c on s.cls_id = c.id;
複製代碼
查詢 有可以對應班級的學生以及班級信息,顯示學生的全部信息 students.*,只顯示班級名稱 classes.name.
select students.* ,classes.name from students inner join classes
on students.cls_id = classes.id;
複製代碼
在以上的查詢中,將班級名顯示在第1列
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id;
複製代碼
查詢 有可以對應班級的學生以及班級信息, 按照班級名進行排序
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id order by classes.name;
複製代碼
當時同一個班級的時候,按照學生的id進行從小到大排序
select classes.name ,students.* from students inner join classes
on students.cls_id = classes.id order by classes.name asc ,students.id asc;
複製代碼
left join 對於右表不存在的數據使用 null 填充
查詢每位學生對應的班級信息
select * from students left join classes on
students.cls_id = classes.id;
查詢沒有對應班級信息的學生
select * from students left join classes on
students.cls_id = classes.id where classes.name is null;
select * from students left join classes on
students.cls_id = classes.id having classes.name is null;
right join on
將數據表名字互換位置,用left join完成
select * from students right join classes on
classes.id = students.cls_id;
複製代碼
查詢出高於平均身高的信息(height)
獲得平均身高
select avg(height) from students;
複製代碼
大於平均 身高
select * from students where height > 172.076923;
複製代碼
select * from students where
height > (select avg(height) from students);
複製代碼