數據庫:按照數據結構來組織、存儲、管理數據的倉庫
好處:可以存儲大量的數據、安全
常見的數據庫有哪些:oralce 數據庫 oralce公司
sql-server 數據庫 微軟公司
mysql 數據庫 oralce 公司
權限
dba:數據庫管理員(Database Manager admin)
DCL(Data Control Language):數據庫控制語言,用來定義訪問權限和安全級別
如何創建用戶:create user 用戶名@地址 identified by '密碼';
地址:給的是電腦IP地址
如何查看電腦的IP地址:cmd命令 ipconfig
本機地址爲 localhost
如何查看數據庫中有哪些用戶
進入系統數據庫中:use mysql;
查看用戶表:select host,user from user;
給用戶權限
grant 權限1,權限2,... on 數據庫名稱.* to 用戶名@地址;
查看用戶的權限
show grants for 用戶名@地址;
刪除用戶名的操作
drop user 用戶名@地址;
管理數據庫:
1.登錄
2.操作數據庫:
查看有哪些數據庫: show databases;
創建數據庫: create database 數據庫名稱;
刪除數據庫: drop database 數據庫名稱;
使用數據庫: use 數據庫名稱;
查看當前數據庫名稱:select database();
查看數據庫中的編碼:status;
修改數據庫中的編碼:alter database 數據庫名稱 character set gbk;
查看錶中的編碼: show create table 表名;
修改表的編碼: alter table 表名 character set gbk;
修改表中字段的編碼:alter table 表名 change 字段 字段 數據類型 set gbk;
3.數據庫中操作表
常用的數據類型
日期:date 年-月-日(3個字節)
時間:time 時:分:秒(3個字節)
日期+時間:datetime 年-月-日 時:分:秒(8個字節)
整型:int (4個字節,正負21億)
浮點型:
float(m,d)(4個字節,單精度,m總個數,d小數位)
double(m,d)(8個字節,雙精度,m總個數,d小數位)
字符串:varchar(n)(n設置字符的長度)
注:定義表的時候告訴字段只能放什麼數據
查看數據庫中有哪些表: show tables;
創建表: create table 表名(字段名稱1 數據類型1,字段名稱2 數據類型2);
刪除表: drop table 表名;
查看錶的信息: desc 表名;
添加字段: alter table 表名 add 字段名稱 數據類型;
刪除字段: alter table 表名 drop 字段名稱;
修改字段: alter table 表名 change 修改的字段 新的字段 數據類型;
修改字段類型: alter table 表名 modify 字段 數據類型;
修改表的名稱: alter table 舊的表名 rename to 新的表名;
4.往表中操作數據
添加數據: insert into 表名(字段1,字段2,...) values(值1,值2,...);
可以添加多條數據
insert into 表名(字段1,字段2,...) values(值1,值2,...),(值1,值2,...);
可以只添加一個字段(沒有添加的字段數據默認爲null)
注:字符串數據要用''引起來
刪除數據: update 表名 set 修改的字段1='值1',字段2='值2' where 條件;
刪除整行數據: delete from 表名 where 條件;
5.select 基本查詢
查詢所有的列: select * from 表名;
查詢指定的列: select 列名1,列名2 from 表名;
6.where 條件查詢
運算符的查詢
= 、 != 、 <> 、 < 、 > 、 <= 、 >=
select * from 表名 where 條件;
連接查詢
and
select * from 表名 where 條件1 and 條件2;
區間查詢
between ... and ...;
select * from 表名 where 列名 between 值1 and 值2;
邏輯查詢
1.or 或者
select * from 表名 where 條件1 or 條件2;
2.in 在...裏面(領域範圍)
select * from 表名 where 列名 in(值1,值2,...);
3.not in 不在...裏面
select * from 表名 not in(值1,值2,...);
4.is null 是空的
select * from 表名 where 列名 is null;
5.is not null 不是空的
select * from 表名 where 列名 is not null;
模糊查詢:模糊查詢用like(相似)
其中"_"爲一個空格佔一個位置(一個位置一個字符)
其中"%"佔多個位置)(多個字符)
1.select * from 表名 where 列名 like"_h%";
查詢第二個字母爲"h"的...
2.select * from 表名 where 列名 like"zhang%";
查詢姓"zhang"什麼的...
3.select * from 表名 where 列名 like"%a%";
查詢什麼中包含"a"的...
7.去除重複
去除重複 distinct
select distinct 列名 from 表名;
8.取別名
取別名 as(可以省略)
列取別名
select 列名 as '別名' from 表名;
表取別名
select e.ename,e.empno from emp e;
9.排序
排序(不管做什麼操作都是查詢結果後排序)
order by asc(升序)
desc(降序)
select * from 表名
order by 列名 asc/desc;
10.聚合函數
聚合函數
count(統計)
select count(列名) from 表名;
select count(distinct 列名) from 表名;
sum(求和)
select sum(列名) from 表名;
avg(平均數)
select avg(列名) from 表名;
max(最大值)
select max(列名) from 表名;
min(最小值)
select min(列名) from 表名;
11.分組查詢
分組查詢(有重複的數據纔可以分組)
select 列名1,列名2 from 表名
group by 列名1;
12.having 子句
having 子句
having 是對“分組後”數據的約束
select 列名1,列名2 from 表名
group by 列名1
having 條件;
13.分頁查詢
分頁查詢
limit
select * from 表名 limit 值1(從哪裏開始),值2(查詢多少條數據);
14.連接查詢
內連接:都滿足條件就給查出來
select e.ename,e.deptno,d.dname,d.loc
from emp e join dept d on e.deptno=d.deptno;
外連接:查詢出的結果存在不滿足條件的可能
左連接:先查詢出左表,然後查詢右表,右表中滿足條件的顯示出來,不滿足條件的顯示null
select e.empno,e.ename,e.deptno,d.dname,d.loc
from emp e left join dept d on e.deptno=d.deptno;
右連接:先查詢右表,然後查詢左表,左表中滿足條件的顯示出來,不滿足條件的顯示爲null
select e.empno,e.ename,d.deptno,d.dname,d.loc
from emp e right join dept d on e.deptno=d.deptno;
子查詢:嵌套查詢,即select 中包含 select
單行單列 (用於條件)
單行多列 in (用於條件)
多行單列 all,any (用於條件)
多行多列 作爲臨時表(用於表)
表的約束
完整性約束是爲了表的數據的正確性,如果數據不正確,那麼一開始就不能添加到表中
主鍵:唯一約束
主鍵列的值不能爲null,也不能重複
每張表最好只能有一個主鍵,指定主鍵約束使用 primary key 關鍵字
not null 如果給空是不能插入數據的
primary key 如果主鍵有重複的不能插入數據
primary key 主鍵
auto_increment 自動遞增
外鍵約束
主外鍵構成表與表關聯的唯一途徑
外鍵是另一張表的主鍵
constraint fk_約束名稱 foreing key(外鍵字段) references 關聯的表(關聯的字段);
簡單的存儲過程
概念類似於函數,就是把一段代碼封裝起來
當要執行這段代碼的時候,可以通過調用該存儲過程來實現
create procedure 程序名稱()
begin
sql語句
end;
調用存儲過程
call 程序名稱();
帶參數的存儲過程
create procedure 程序名稱(參數)
begin
sql語句
end;
調用存儲過程
call 程序名稱(參數);
索引:主要思想是將數據分段,從而減少查詢時的無效數據,提高查詢效率
什麼是視圖:視圖是有查詢結果形成的一張虛擬表
什麼時候要用到視圖:某個查詢結果出現的非常頻繁,也就是要經常拿這個查詢結果來做子查詢
create view 視圖名 as select 語句;
可以用視圖名這個臨時表來使用