MySql數據庫操作(一)

數據庫

定義
數據庫是持久存儲有組織可共享數據的容器
分類:
關係型數據庫:MySQL、Oracle、SQL Server、SQLite、DB2
非關係型數據庫:Redis、MongoDB

數據庫管理系統

定義
數據庫管理系統是操作和管理數據庫的軟件
包括:
MySql Oracle DB2

SQL分類

在這裏插入圖片描述

存儲引擎

定義
存儲引擎是給數據庫提供數據存儲、處理和保護等核心服務的程序
包括:
InnoDB MyISAM
注:MySQL5.5後的默認存儲引擎爲InnoDB

兩個存儲引擎的區別
在這裏插入圖片描述

數據庫操作的語法

創建數據庫: CREATE DATABASE [IF NOT EXISTS] 數據庫名;
查看數據庫: SHOW DATABASES;
使用數據庫: USE 數據庫名;
刪除數據庫: DROP DATABASE [IF EXISTS] 數據庫名;

數據表字段操作的語法

創建表語法(create 屬於ddl)
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 數據類型 [屬性],
字段名2 數據類型 [屬性],
… …
字段名n 數據類型 [屬性]
) ;

設置存儲引擎和指定數據表編碼格式:
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 數據類型 [屬性],
字段名2 數據類型 [屬性],
… …
字段名n 數據類型 [屬性]
) [ 存儲引擎 ] [ 表字符集 ];

加入註釋
CREATE TABLE [ IF NOT EXISTS ] 表名 (
字段名1 數據類型 [屬性] COMMENT [字段註釋],
字段名2 數據類型 [屬性] COMMENT [字段註釋],
… …
字段名n 數據類型 [屬性] COMMENT [字段註釋]
) [ 存儲引擎 ] [ 表字符集 ] [表註釋];

查看數據庫中的表:
SHOW TABLES;

顯示錶結構:
DESC 表名;
刪除表語法(DROP屬於DDL)
DROP TABLE [ IF EXISTS ] 表名;
修改表名: ALTER TABLE 舊錶名 RENAME AS 新表名
添加字段: ALTER TABLE 表名 ADD 字段名 字段類型 [ 屬性 ]
修改字段:
ALTER TABLE 表名 MODIFY 字段名 字段類型 [ 屬性 ]
修改屬性:
alter table student modify sex enum(‘男’,‘女’);
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 字段類型 [ 屬性 ]
刪除字段:
ALTER TABLE 表名 DROP 字段名;
展示表的創建過程
show create table 表名;
更改表的存儲引擎
ALTER TABLE 表名 ENGINE = 存儲引擎

數據表中數據的操作

dml 數據操作語言 insert 添加 數據的 delete 刪除數據 update 修改數據
1. 添加數據

  1. 標準的添加的sql語句
    insert into student(id,name,sex,birthday,grade,scid) values(1,‘張三’,‘男’,‘2017-12-12’,60.23,2 );

  2. 常用的添加的sql語句 student 表名後面不寫字段默認的是 這個表的所有的字段名
    insert into student values(2,‘李四’,‘女’,‘2006-06-06’,99,5);

  3. 指定 字段添加數據
    insert into student(id,name,sex,scid) values(3,‘王五’,‘男’,6);

  4. 指定字段的賦值
    insert into student set id=4,name=‘趙六1’,sex=‘男’,birthday=‘2016-11-01’ ;
    insert into student set id=3, name=‘趙六’, sex=‘男’, birthday=‘2016-10-01’;

修改 update
指定字段名 的值
update student set name=‘李七’ where id=4;
update 表名 set 字段名=新字段值,字段名=新字段值,字段名=新字段值,字段名=新字段值 where 指定字段名=指定字段名的值;
update student set name=‘瀟瀟’, sex=‘女’ , grade =65, scid=9 where id=4;
update student set name=‘李七’;
刪除 delete 單刪
指定 一個 字段 進行刪除 前提條件 這個字段的值 是 唯一的
1.delete from student where id=4;
delete from student;
刪除數據
2.truncate table student;
3.drop table student;
DELETE語句和TRUNCATE TABLE語句對比
在這裏插入圖片描述

dql 數據查詢語言 selete 查詢 展示數據的
* 代表的是 所有的字段名
– 空 null
select * from student
– 要求 只展示studnet 表中的 編號 和名稱
select id,name,sex,birthday ,grade,scid from student;

– 要求 只展示studnet 表中的 編號 和名稱
select id ,name from student;

約束

定義
約束是爲了確保表中數據的完整性而做出的限制。
主鍵約束:primary key
唯一約束:unique
非空約束:not null
默認約束:default
外鍵約束:foreign key
檢查約束:check
約束 規則
在 創建表的時候 可以 添加約束 或者是在修改 表結構的時候 添加約束

      create   table  student(
         id     int     primary key ,         -- 主鍵  非空  null  且唯一          方便  外面的表便於數據引用  和 對錶中的字段的約束        
         name     varchar(30)   not  null,           --  名稱不能 爲 空    
         sex    varchar(3)    default '男' ,                  -- 默認 是 男  
         email    varchar(60)     unique    --  唯一約束     
        );   
  -- check   檢查性約束 

外鍵約束
列後加入:references 主表名(主鍵列);
foreign key (字段名) references 主表名 (主鍵列);
alter table 表名 add foreign key(列名) references 主表名(主鍵列)

刪除約束 alter table 表名 drop foreign key 外鍵名;

唯一約束
列級約束 xs_idnum VARCHAR(11) unique
表級約束 unique(字段1,字段2)
修改表 alter table 表名 modify 字段名 字段類型 unique;
alter table 表名 add [constraint <唯一鍵名>] unique(字段名 字段類型);
alter table 表名 drop index 惟一鍵名稱;
檢查約束
列後加入:check(xs_sex=‘男’ OR xs_sex=‘女’);
刪除約束: alter table 表名 drop check 檢查約束名稱;

默認約束
修改表時添加約束:
alter table 表名 alter 字段名 set default 默認值
刪除約束 alter table 表名 alter 字段名 drop default;
非空約束
alter table 表名 modify 字段名 字段類型 not null;加入非空約束
alter table 表名 modify 字段名 字段類型 null;取消非空約束

E-R圖

定義
E-R圖是用來描述現實世界實體及實體間關係的概念數據模型
E-R圖符號
在這裏插入圖片描述

數據表中的查詢

條件查詢是通過WHERE子句進行檢索的查詢方式
select * from 表名 where 字段 = 值;
select* from comments where cmtId=1;

多條件查詢是利用邏輯運算符把多個條件組合起來的條件查詢
select * from 表名 where 字段1=值 邏輯值 字段2=值;
SELECT * FROM comments WHERE cmtId=1 AND cmtAuthor=‘張三1’;

IN關鍵字(查詢符合括號內條件的數據 )
select 字段列1,字段2……from 表名 where 字段名 in(值1,zhi2);
SELECT * FROM comments WHERE newsId IN(1,2);

between and(查詢值1和值2區間的數據,並且包含值1和值2)
select 字段列1,字段2 ,…FROM 表名 where 字段x between 值1 and 值2;
SELECT * FROM comments WHERE cmtId BETWEEN 1 AND 10

模糊查詢是使用SQL 通配符替代一個或多個字符的條件查詢
select * from表名 where 字段 like ‘包含通配符的值’;
_ 一個字符 A LIKE ‘C_’ CS、 Cd等
% 任意長度的字符串 B LIKE ‘CO%’ CONST、COKE等
[ ] 括號中所指定範圍內的一個字符 C LIKE ‘9W0[1-2]’ 9W01或9W02
[^] 不在括號中所指定範圍內的一個字符 D LIKE ‘9W0[^1-2]’ 9W03或9W07等

distinct關鍵字(去掉SELECT查詢返回的記錄結果中重複的記錄, 相同記錄只返回一條)
SELECT DISTINCT 字段名1, 字段名2… FROM 表名
SELECT DISTINCT cmtContent FROM comments ;

order by 關鍵字(一組數據按照升序或降序排列)
SELECT 字段名列表 FROM 表名 [WHERE <查詢條件>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
SELECT * FROM comments order by cmtId DESC

limit關鍵字(MySQL查詢語句中使用LIMIT子句限制結果集)
SELECT <字段名列表> FROM <表名> [WHERE <查詢條件>]
[ORDER BY <排序的列名> [ASC 或 DESC]] [LIMIT [位置偏移量, ]行數];
SELECT * FROM comments LIMIT 2,5

null 關鍵字
SELECT * FROM comments where cmtAuthor is null;(is not null )

聚合函數(聚合函數是可以對一組值進行計算,並返回單個值的函數)
SELECT 聚合函數 FROM <表名>
SELECT COUNT(*) AS 總數 FROM comments;

分組查詢(按照指定的字段分類彙總結果的查詢方式 )
SELECT <字段名列表> FROM <表名>
[WHERE <查詢條件>]
[GROUP BY <分組的字段名>]
[ORDER BY <排序的列名> [ASC 或 DESC]]
[LIMIT [位置偏移量, ]行數];
SELECT newsId 新聞編號,COUNT(*) AS 數量 FROM comments GROUP BY newsId

高級查詢

字符串連接
select concat(‘my’,‘s’,‘ql’)字符串連接;
– 字符串替換
select insert(‘這是sql語言’,2,3,‘mysql’)字符串替換;
– 字符串轉小寫
select lower(‘aADASDAFaFSDFGREW’)字符串轉小寫;
– 字符串轉大寫
select upper(‘asdafsdsaafs’)字符串轉大寫;
– 字符串截取 從1開始
select substring(‘老二是我兒’,1,3)字符串截取 ;
– 字符串字符個數
select char_length(‘老二是我兒’)字符串字符個數;
– 字符串去左右空格
select trim(’ 老二是我兒 ')字符串去左右空格;
– 將字符串重複count次後返回
select repeat(‘老二’,3)將字符串重複count次後返回;
– 將字符串反轉後返回
select reverse(‘老二是弟弟’)將字符串反轉後返回;
– 獲取當前日期
select curdate()獲取當前日期;
– 獲取當前時間
select curtime()獲取當前時間;
– 獲取當前時間日期
select now();
– 返回日期date爲一年中的第幾周
select week(now())返回日期date爲一年中的第幾周;
– 返回日期date的年份
select year(now())返回日期date的年份;
– 返回時間time的小時值
select hour(now())返回時間time的小時值;
– 返回時間time的分鐘值
select minute(now())返回時間time的分鐘值;
– 返回日期參數date和date之間相隔的天數
select datediff(now(),‘2018-8-8’);
– 計算日期參數date加上n天后的日期
select adddate(now(),5)計算日期參數date加上n天后的日期;
– 返回大於或等於數值X的最小整數
select ceil(2.3)向上取整;
– 返回小於或等於數值x的最大整數
select floor(2.3)向下取整;
– 返回0~1間的隨機數
select rand() 返回0到1間的隨機數;
– 求一個數的絕對值
select abs(-48954)絕對值;
– 求一個數的平方根
select sqrt(9)平方根;
– 求一個數的冪運算符
select power(2,3)冪運算;
– 返回當前數據庫名
select database()返回當前數據庫名;
– 返回當前客戶的連接id
select connection_id()返回當前客戶的連接id;
– 返回最後一個select查詢進行檢索的總行數
select found_rows()返回最後一個select查詢進行檢索的總行數;
– 返回當前登錄用戶名
select user()返回當前登錄用戶名;
– 返回mysql服務器的版本
select version()返回mysql服務器的版本;

連接查詢

– 兩表查詢

   --  查詢 員工  的 詳細信息 包含他的所在部門的名稱

       select  *  from  dept;      
  
   --  隱式內連接  
      select     *  from    emp e,  dept d    where e.deptno=d.did ; 

    --  內連接    inner   join    on  篩選條件的關鍵字    查出的數據是兩表的交集的數據  
     select   *  from   emp   inner  join  dept     on  emp.deptno=dept.did;

外連接 左 left join on 連接 右連接 right join on

     -- 左連接 是   以 左爲主     left  join   表名   on 條件           
      
     select   *  from   emp    left  join  dept   on   emp.deptno=dept.did;

     -- 右連接 是   以 左爲主   right   join  表名   on 條件      

      select   *   from  emp    right  join  dept   on   dept.did=emp.deptno;

– 全連接 – FULL join

--  UNION    
select   *  from   emp    left  join  dept   on   emp.deptno=dept.did
UNION
select   *   from  emp    right  join  dept   on   dept.did=emp.deptno;        

--   分組   group  by  
  --  查詢  每個部門中 的 員工的 數量 並顯示 部門的名稱  以及員工的數量        
    -- select  dept.dname , count(*)  from   emp    right  join  dept    on   emp.deptno  = dept.did   group  by    emp.deptno; 


--  按照 有員工的部門 的編號進行分組  並 計算出部門中的員工的個數
         
 select  dept.dname, count(*)   from    emp   inner  join   dept   on   emp.deptno=dept.did   group by  dept.did;
   
-- 按照 有員工的部門 的編號進行分組  並 計算出部門中的員工的個數 且 員工的個數大於 1的 

select  dept.dname, count(*)   from    emp   inner  join   dept   on   emp.deptno=dept.did   group by  dept.did  having count(*) >1;
   
 --   各個部門薪水最高的員工信息
        -- in()                  
select   e.*, d.dname  from   emp   e  inner  join  dept d on e.deptno=d.did  where  e.sal      in  (select  max(sal)   from   emp   group  by  deptno )

子查詢

EXISTS子查詢
SELECT 字段 FROM 表名 WHERE EXISTS(子查詢);
注:子查詢有返回結果:EXISTS子查詢結果爲TRUE,外層查詢執行
子查詢無返回結果:EXISTS子查詢結果爲FALSE,外層查詢不執行

範式

定義
範式是爲了設計冗餘較小、結構合理的關係型數據庫而遵循的規範

  1. 第一範式是爲確保數據表的字段都符合原子性的範式
  2. 第二範式(2NF)是指在1NF的基礎上,表中必須有主鍵,
    其它列必須與主鍵完全依賴的範式
  3. 第三範式(3NF)是 在2NF的基礎上,非主鍵列必須
    直接依賴於主鍵的範式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章