數據庫是一個軟件,包含服務端和客戶端
一般安裝數據庫指的是安裝服務端(基本上所有數據庫都會自帶命令行客戶端)
學習客戶端:MySQL Command Line
Windows CMD
啟動服務:net start myaql
停止服務:net stop mysql
連接:mysql -uroot用戶名 -p密碼 -h主機地址(登錄本機的就不用這個)
退出:quit、exit、\q
數據概念:
發展:人工記錄(紙質)
軟件? ? ? (office)
數據庫? ? (MySQL? ? Oracle? ? SQLServer)
數據庫分類:
關系型數據庫:
MySQL (中小型,開源,Oracle)
Oracle(大型,收費)
SQLServer(中大型,收費,微軟)
SQLLinte(安卓包含)
說明:一個數據庫內裝若干個表格,以表存儲數據,
關系指的是行和列的關系和表與表之間關系。
非關系型數據庫:
NOSQL? ? ManggoDB
如何查看當前數據庫服務器下有哪些數據庫:
show databases;
創建數據庫
create database 這里寫自己取的名稱;
如何刪除數據庫:
drop database 創建的數據庫的名稱;
如何創建數據表:
先找到需要創建數據表的數據庫:
use 數據庫名稱;
? ? ? ? ? ? ? create table? 表名(
? ? ? ? ? ? ? ? ? ? ? ? 編號 int,整數
? ? ? ? ? ? ? ? ? ? ? ? 名稱 varchar(范圍),字符串
? ? ? ? ? ? ? ? ? ? ? ? 價格 double,小數
? ? ? ? ? ? ? ? ? ? ? ? ? 日期? date,日期
? ? ? ? ? ? ? ? ? ? );
如何查看數據庫中創建的數據表:
show tables;
刪除數據表:
drop table 數據表名稱;
查看數據表的結構:
desc 數據表名稱;
如何添加數據到數據表中(1):
insert into 數據表的名稱? values(列1的值,列2的值,列3的值,列4的值,............);
在需要添加數據的列中插入某列的數據(2):
inert into 數據表名稱(列名,列名,列名,列名.......) values(值,值,值,值);
查看數據表中的數據:
select * from 數據表的名稱;
數據類型:
日期和時間類型:
字符串類型:
數據表的約束:
一、主鍵約束:區分表中的數據行,唯一的,不能為空。
? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int primary key,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(10)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );
二、非空約束:要求這一列插入數據時必須給值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int primary key,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );
三、默認值:在某一列中設置默認值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int?primary key,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? age int?default '默認的字符'
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );
四、唯一約束:不允許重復的
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? create table 數據表名稱(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id int?primary key,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? name varchar(20)?not null,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? age int?default '默認的字符',
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? tel varchar(15)?unique
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? );
五、外鍵約束:
在主鍵列表中:constrain fk_主外鍵表名稱_副外鍵表名稱_外鍵列名稱 foreign key(主外鍵列名稱) references 副外鍵表名稱(外鍵列名稱)
SQL語言(Struct query language)
數據庫方言:各個數據庫特有的一種語法(不是特別多)。
標準SQL:各個數據庫通用的語法。
分類:DDL(數據定義語言) create alter drop
? ? ? ? ? ?DML(操作語言) insert delete update
? ? ? ? ? ?DQL(數據查詢語言) select
? ? ? ? ? ?DCL(數據控制語言)事務控制語言
alter 修改表結構的語句:
1、重命名表
? ? ? alter table 原數據表名 rename to 新數據表名;
2、添加列
? ? ? ? alter table 數據表名 add 列名? 類型 約束;
3、刪除列
? ? ? ?alter table 數據表名 drop 列名;
4、修改列
? ? ? ?alter table 數據表名 change 舊列名 新列明 類型 約束;
5、添加約束
主鍵約束:
alter table 主鍵數據表名 add constraint 主鍵名 primary key(主鍵列);
非空約束:
alter table 數據表名 change 列名 列名 數據類型 not null;
alter table 數據表名 modify 列名 數據類型 not null;
唯一約束:
alter table 數據表名 modify 列名 數據類型 unique;
默認值:
alter table 數據表名 modify 列名 數據類型?;
外鍵約束:
alter table 主鍵數據表名 add constraint fk_主鍵數據表名_副鍵數據表名_主鍵列名?foreign key(主外鍵列名稱) references 副外鍵表名稱(外鍵列名稱);
6、刪除約束
刪除主鍵約束:
alter table? 主鍵數據表名 drop primary key;
這樣刪除不徹底,還需要刪除非空約束:
alter table 數據表名 modify 列名 數據類型 null;
刪除外鍵約束:
alter table 主鍵數據表名 drop foreign key fk_主鍵數據表名_副鍵數據表名_主鍵列名;
刪除唯一約束:
alter table 主鍵數據表名?drop index 列名;
插入語句:
刪除數據:
delete from 數據表名 where 數據表列名 過濾條件
過濾條件:
運算符過濾:=、<、>、<=、>=、!=或者 <>
關鍵字過濾:is null(為空)? in('關鍵字','關鍵字',.......)
between 數值? and 數值
模糊篩選: like '字符'
_一個任意字符
%任意多個任意字符
邏輯運算符:
and 兩個條件同時滿足,只能在一個單元(一行)內使用。
or 滿足任意一個條件
注意過濾條件的使用:當多個條件時,需把同一個條件用()隔開
修改數據:
update 數據表名 set 列名='新值',列名='新值',.........where 列名 過濾條件;
注:更改多個列時用,隔開
查詢數據:
select 要查詢的列 from 數據表名;
給列取臨時別名:
select 列名 as '別名';
select 列名 '列名';
注意:在開發中盡量避免使用*,因為*效率低!
排序:
select 列名 from 表名 order by 列名 asc(升序);
select 列名 from 表名 order by 列名 desc(降序);
結果限定:
select 列名 from 表名 limit 跳過的長度 ,要取出的長度;(如果沒有跳過的長度,那就代表要跳過的長度為零)
列運算:
把查詢結果進行數學運算,不會影響表中的數據,只是這次查詢中生效
用+ - * / %
當有null時,和任何數據運算都為null
ifnull(列名,0),取代原列名
concat('字符',原列名),原列名前加字符
分組,方便統計
統計總數:count(列名,*)
注意:null 不計入統計
去除重復 distinct
統計最大值:max(列)
統計最小值:min(列)
統計平均值:avg(列)
統計和:sum(列)
日期函數:
獲取年:year(列名)
獲取月:month(列名)
獲取號:day(列名)
獲取本地日期時間:now()
分組:
select 列名 from 表名 group by 分組列
注:如果是用列名進行篩選在group by前用where進行條件篩選,如果是用統計函數進行篩選在group by后用having進行條件篩選!
SQL語言執行順序:
from→where→group→select→having→order by→limit
復合查詢:
子查詢(嵌套查詢)
select 列名 from 表名 where? 列名 運算符(select 列名 from 表名)
處理多行子查詢:子查詢返回了多個值。
any:任意
>any:大于最小的那一個
<any:小于最大的那一個
all:全部
>all:大于最大的那一個
<all:小于最小的那一個
in:集合
連接查詢:
等值連接
select 列名 from 表名 ,表名......where 連接條件;
多表連接查詢時盡量使用別名,以解決列名沖突;沒有表名要使用表名.列名如圖:
外鏈接:
左外連接:左外全部顯示,右邊無法匹配的顯示null
select 列名 from 表名?left join?表名?on?連接條件
右外連接:右外全部顯示,左邊無法匹配的顯示null
select 列名 from 表名?right join?表名?on?連接條件
全外連接:
注:MySQL中不支持使用 ,只能用union,同時union all 合并結果不會去掉重復,使用union合并結果會去掉重復
select 列名 from 表名?left join?表名?on?連接條件union?select 列名 from 表名right join表名?on?連接條件
數據庫軟件:navicat.11.2.16.premium_cs_x64.zip
在數據庫軟件中查詢多個外連接表:
虛表:不是數據庫物理存在的表,是把一個查詢結果視為一張表使用,使用虛表要使用別名。
視圖表:
創建視圖表:
create view 自定義表名 as 后面跟上自己所需要顯示的表列和條件
使用視圖表:select * from 視圖表名
刪除視圖表:drop view 視圖表名
注意:可以修改視圖表中的數據,但是不能刪除視圖表中的數據(使用連接查詢的視圖包含 join)不能添加視圖表中的數據,原數據表里的數據發生變化會在視圖表中變化體現出來。