標籤:log 路徑 rem val table 統計 其他 delete 並且
一.MySQL資料庫啟動與登陸
安裝這裡就不細說了。安裝完成之後記得將安裝路徑配置進環境變數。然後進入到命令列下啟動資料庫。註:MySQL資料庫安裝完成後預設的是開啟狀態。
- 開啟MySQL資料庫,註:此處輸入的服務名是安裝時候設定的服務名稱,MySQL5.7的版本預設的服務名稱是MySQL57
二.建表
show databases;
create database lianxi DEFAULT character set utf8
use lianxi;
create table user_info(id int not null auto_increment primary key,name char(20),age int,gender char(1),deparment_id int,constraint 約束名稱 foregin key(deparment_id) references dep_info(id))engine = innodb default charset=utf8;create table dep_info(id int not null auto_increment primary key,title char(32),)engine=innode default charset=utf8;
create table boy(id int not null auto_increment primary key,name char(32))engine = innodb default charset=utf8;create table girl(id int not null auto_increment primary key,name char(32))engine = innodb default charset=utf8;create table b2g(id int not null auto_increment primary key,b_id int,g_id int,constraint 約束名稱1 foregin key(b_id) references boy(id),constraint 約束名稱2 foregin key(g_id) references girl(id))engine = innodb default charset = utf8;
應用情境:
1、根據具體業務
2、HTML的情境
建立的時候只需要輸入資料的情況下:單表
建立的時候必須要我們選擇一個其他資料的情境下:一對多
建立的時候針對某些欄位可以進行多選的情況下:多對多
drop database db_name;
三.增刪改查
insert into table_name(field) values(value),(value2) ;--> 兩個(value)表示插如多行資料insert into table_name(cname) select field from table_name; --> 把select查到的結果,當作資料來賦值給value
delete from table_name; --> 自增列會繼續之前的IDtruncate table table_name; --> 物理刪除,速度快,重新計算ID
delete from table_name where filed = values and/or ... --> 只刪除合格資料delete from table_name where filed in (1,2,3,4); delete from table_name where id between 5 and 10;
update table_name set field = ‘value‘; --> 更新所有資料的field欄位的值,加 where 只修改匹配到的行update table_name set id = 8 , name = ‘daxin‘ where age = 18;
select * from table_name where id > 2;select field as ‘別名‘ from table_name --> 加別名select * from table_name where id in (1,2);select * from table_name where cid in (select tid from teacher);
select * from table_name order by field asc/desc(正序/倒序)select * from table_name order by field asc limit 1 取第一個值select * from table_name limit 1,2(起始位置,找幾個)select * from table_name where field like ‘%key%‘ --> 尋找field欄位包含key的資料% 表示任意個任一字元, _表示任意一個字元
select * from table_name group by field --> 分組顯示,會去重,需要使用彙總函式來統計重複的次數select field,count(id) from table_name group by field --> 對id欄位進行彙總(其他的還有min(),max(),sum(),avg()等)
1、擷取每個班級多少人
SELECT class.caption,count(sid) from classLEFT join student on student.class_id = class.cid group by class.caption;
2、擷取每個班級有多少人並且選出認識大於2的班級
注意:如果針對 group by 的結果進行篩選,那麼需要使用 having 不能在使用 where 了.
SELECT class.caption,count(sid) as number from classLEFT join student on student.class_id = class.cidgroup by class.captionHAVING number >= 2;
3、每個課程的不及格的人數
select course.cname,count(sid) from scoreleft join course on score.corse_id = course.cidwhere number < 60group by course.cname;
四.連表
select student.sid,student.sname,class.caption from student LEFT JOIN class on student.class_id = class.cid ;
把class表中的欄位放在student表的左邊,並且進行 student.class_id = class.cid 匹配後顯示,資料量以from指定的表為基準
left join:
以 from 指定的表為基準,對資料進行顯示
right join: -->不常用
以 join 後面的表為基準進行顯示。
inner join:(join 使用的就是)
只保留連個表中都有資料的條目
例子:
1、id=1的老師任教的課程名稱
2、老師姓名瞎貓任教的課程命令
3、已選課程id=1,所有學生的姓名
4、已選體育課,所有學生的姓名
5、已選波多任教任意課程,所有學生姓名
union:
把兩個SQL的結果進行組合(上下合并)
select * from student
union / union all
select * from teacher;
注意上下兩個表中的列數要統一
注意:
1、如果所有資料都一致,那麼union會對結果進行去重
2、union all ,會儲存所有的
五.基礎資料型別 (Elementary Data Type)
MySQL的資料類型大致分為:數值、時間 和 字串。
數字:
整數
tinyint 小整數,資料類型用於儲存一些範圍的整數數值範圍。
smallint
int
bigint
小數
float 浮點型(長度越長越不精準)
double 浮點型(雙精確度,精度比float稍高) 範圍比float更大
decimal 精準(內部使用字串進行儲存的) -> 適合對精度有要求的
字串
char(19)[字元長度] 定長字串 --> 佔用空間大,但是效率高
varchar(19)[字元長度] 不定長字串 --> 佔用空間是可變的,但是效率低
注意:最大可以存放255個字元
text() 65535個字元
mediumtext() 16777215個字元
longtext() 4294967254個字元
二進位:
TinyBlob
Blob
MediumBlob
LongBlob
存檔案:雖然可以用二進位進行儲存,但是一般是隱藏檔在伺服器上的路徑(URL)
時間:
date YYYY-MM-DD
time HH:MM:SS
year YYYY
DATETIME YYYY-MM-DD HH:MM:SS -->常用
TIMESTAMP 時間戳記格式
Python之操作MySQL資料庫