1. 程式人生 > 實用技巧 >ndroid訊息傳遞 EventBus 使用

ndroid訊息傳遞 EventBus 使用

今日內容

  1. 資料庫的基本概念

  2. MySQL資料軟體
    1.安裝
    2.解除安裝
    3.配置
    *MySQL服務啟動
    1. 手動
    2. cdm-->services.msc 開啟服務的視窗
    3. 使用管理員開啟cmd
    *net stop MySQL 關閉服務
    *net start MySQL 啟動服務
    *MySQL登入
    1. mysql -uroot -p1
    2. mysql -hip -p連線目標的密碼
    3. mysql -host=i -password=連線目標的密碼

     *MySQL退出
     	1. exit
     	2. quit
     *MySQL目錄結構
     	1. MySQL安裝目錄
     		*配置檔案:my.ini
     	2. MySQL資料目錄
     		*幾個概念
     			*資料庫:資料夾
     			*表:檔案
     			*資料
    
  3. SQL

資料庫的基本概念

1. 資料庫的英文單詞:DataBase 簡稱DB
2. 什麼資料庫?
	*用於儲存和管理資料的倉庫
3. 資料庫的特點
	1. 持久化儲存資料,是一個檔案系統
	2. 方便儲存和管理資料
	3. 使用了統一的方式操作資料庫--SQL
4. 常見的資料庫軟體

SQL

1.什麼是SQL?
	Structure Query Language:結構化查詢語言
2.SQL通用語法
	1. SQL 語句可以單行或多行書寫,以分號結尾。
	2. MySQL 資料庫的SQL不區分大小寫,關鍵字建議大寫。
	3. 3鍾註釋
		*單行註釋:--(後面一定帶有空格) 註釋內容或 # 註釋內容(MySQL特有)
		*多行註釋:/*註釋*/

3.SQL分類
	1.DDL(Data Definition Language)資料定義語言		
		用來對資料庫物件:資料庫、表、列等。關鍵字:Create,drop ,alter等
	2.DML(Data Mainpulation Language)資料操作語言		
		用來對資料庫中表的資料進行增刪改。關鍵字:insert delete update等
	3.DQL(Data Query Language)資料查詢語言		
		用來查詢資料庫中表的記錄(資料)。關鍵字:select ,where等
	4.DCL(Data Control Language)資料控制語言(瞭解)		
		用來定義資料庫的訪問許可權和安全級別,及建立使用者。關鍵字:GRANT ,REVOKE等

DDL:操作資料庫、表

1. 操作資料庫:CRUD
	1. C(Create):建立
		*建立資料庫:
			*Create database 資料庫名稱;
		*建立資料庫,判斷不存在,再建立:
			*create database if not exists 資料庫名稱;
		*建立資料庫,並指定字符集
			*create database 資料庫名稱 character set 字符集(gbk、uf-8等);
		*練習:建立db4資料,判斷是否存在,並指定字符集為gbk
			*create database if not exists db4 character set gbk;
	2. R(Retrieve):查詢
		* 查詢所有資料庫的名稱
			* show databases;
		*查詢某個資料庫的字符集:查詢某個資料庫的建立語句
			* show create database 資料庫名稱;
	3. U(Update):更新修改
		*修改資料庫的字符集
			*alter database 資料庫名稱 character set 字符集名稱;
	4. D(Delete):刪除
		*刪除資料庫
			* drop database 資料庫名稱;
		*判斷資料庫存在,存在再刪除
			* drop database if exists 資料庫名稱;
			* 
			*  exists 資料庫名稱;
	5. 使用資料庫
		* 查詢當前正在使用的資料庫名稱
			*select database();
		*使用資料庫
			*use 資料庫名稱;
2. 操作表
	1. C(Create):建立
		1. 語法:
			creat table 表名(
				列名1 資料型別1,
				列名2 資料型別2,
				....
				列名n 資料型別n;
			);
			*注意:最後一列不需要加逗號;
		2. 資料型別
			1. int 整型,
				*age int,
			2. double 小數型別
				*score double(5,2),(共5位,小數留兩位)
			3. date:日期,只包含年月日 yyyy-MM-dd 
			4. datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
			5. timestamp:時間時間戳型別 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
				*如果將來補個這個欄位賦值,或賦值為null,則預設使用當前的系統時間,來自動賦值。

			6. varchar:字串
				*name varchar(20):姓名最大20個字元
				*zhangsan 8個字元 張三2個字元
		*建立表
			create table student(
				id int,
				name varchar(32),
				age int,
				score double(4,1)
				birthday date,
				insert_time timestamp
			);
		*複製表
			*create table 表名 like 需要被複制的表名;
	2. R(Retrieve):查詢
		*查詢資料庫中所有的表名稱
			*show tales;
		*查詢表結構
			*desc 表名;
	3. U(Update):更新修改
		1. 修改的表名:
			*alter table 表名 rename to 新的表名;
		2. 修改表的字符集:
			*alter table 表名 character set 字符集;
		3. 新增一列:
			*alter table 表名 add 列名 資料型別;
		4. 修改列名稱 型別:
			**alter table 表名 change 列名 新列名 新資料型別;
			*alter table 表名 modify 列名 新資料型別;
		5. 刪除列:
			*alter table 表名 drop 列名;
	4. D(Delete):刪除
		*drop table 表名;
		*drop table if exists 表名;

DML 增刪改表中的資料

1. 新增資料:
	*語法:
		*insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
	*注意的事項:
		1. 列名和值要一一對應。
		2. 如果表名後,不定義列名,則預設給所有列新增值
			*insert into 表名 values(值1,值2,...值n);
		3. 除了數字型別,其他型別需要使用引號(單雙都可以)引起來
2. 刪除資料:
	*語法:
		*delete from 表名 where 條件;
	*注意
		1. 如果不加條件,則刪除表中所有記錄。
		2. 如果要刪除所有記錄
			1. delete from 表名;--不推薦使用。有多少條記錄就會執行多少次刪除操作
			2. truncate table 表名;--推薦使用。先刪除表,然後再建立一張一樣的表。
3. 修改資料:
	*語法
		*update 表名 set 列名1 = 值1,列名2 = 值2,...where 條件
	*注意
		1. 如果不加任何條件,則表中所有的記錄全部修改

DQL :查詢表中的記錄

*select * from 表名;
1. 語法:
	*select
		欄位列表
	 from
		表名列表
	 where
		條件列表
	 group by
		分組欄位
	 having
		分組之後的條件
	 order by 
		排序
	 limit
		分頁限定
2. 基礎查詢
	1. 多個欄位的查詢
		* select 欄位1,欄位2...from 表名;
		* 注意
			*如果查詢所有欄位,則可以使用*來代替欄位列表。
	2. 去除重複
		* distinct
	3. 計算列
		* 一般可以使用四則運算計算一些列的值。(一般只會進行數值型的計算)
		* ifnull(表示式1,表達上):null 參與的計算,計算結果都為null。
			*表示式1:哪個欄位需要判斷是否為 null
			*如果該欄位為 null 後的替換值。
	4. 起別名
		* as :as 也可以省略,不過要有空格
3. 條件查詢
	1. where 字句後跟條件
	2. 運算子
		* <、>、<=、>=、=
		* between...and..
		* in(集合)
		* like :模糊查詢
			* _:單個任意字元
			* %:多個任意字元
		* is null
		* and 或 &&
		* or 或 ||
		* not 或 !




1. DQL:查詢語句
	
	1. 排序查詢
		* order by 字句
			* order by 排序欄位1 排序方式1 , 排序欄位2 排序方式2....
		* 排序方式:
			* ASC:升序(預設)
			* DESC:降序
		* 注意:
			* 如果有多個排序條件,則當前邊的條件值一樣時,才會判斷第二條件。
	2. 聚合查詢:將一列資料作為一個整體,進行縱向的計算。
		* count:計算個數
			1. 一般選擇非空的列:主鍵
			2. count(*)-- 不推薦使用
		* max: 計算最大值
		* min:計算最小值
		* sum:計算和
		* avg:計算平均值
	* 注意:聚合函式的計算,排除 null 的值;
		* 解決方案:
			1. 選擇不包含非空的列進行計算
			2. ifnull 函式
	3. 分組查詢: 
		1. 語法:group by 分組欄位;
		2. 注意:
			1. 分組之後查詢的欄位:分組欄位、聚合函式  
			2. 在 where 和 having 的區別
				1. where在分組之前進行限定,如果不滿足條件,則不參與分組。having 在分組之後進行限定,如果不滿足結果,則不會被查詢出來
				2. where 後不可以跟聚合函式,having可以進行聚合函式的判斷
	4. 分頁查詢
		1. 語法:limit 開始的索引,每頁查詢的條數;	
		2. 公式:開始的索引 = (當前的頁碼-1)* 每頁顯示的條數
			-- 每頁顯示3條記錄
				select * from student limit 0,3; -- 第1頁 
				select * from student limit 3,3; -- 第2頁 
				select * from student limit 6,3; -- 第3頁 
		3. limit 是MySQL的“方言”

約束

* 概念: 對錶中的資料進行限定,保證資料的正確性、有效性和完整性。
* 分類:
	1. 主鍵約束:primary key
	2. 非空約束:not null;
	3. 唯一約束:unique
	4. 外來鍵約束:foreign key;
* 非空約束:not null 
	1. 建立表時新增約束
		create table stu(
			id int,
			name varchar(20) not null --name為非空
		)
	2. 建立表完後,新增非空約束
		* alter table stu modify name varchar(20) not null;
	3. 刪除name的非空約束
		* alter table stu modify name varchar(20);
* 唯一約束
	1. 建立表時,新增唯一約束
		create table stu1(
			id int,
			phne_number varchar(20) unique-- 添加了唯一約束
		);
	2. 注意MySQL中,唯一約束限定的列的值可以有多個 null
		select * from stu1;
		insert into stu1 values(1,"121"),(2,"125");
	3. 刪除唯一約束
		alter table stu1 drop index phne_number;

	4. 在建立表後,新增唯一約束
		alter table stu1 modify phne_number varchar(20) unique;
* 主鍵約束:primary key.
	1. 注意:
		1. 含義:非空且唯一
		2. 一張表只能有一個欄位為主鍵
  1. 主鍵就是表中記錄的唯一標識
    2. 建立表時,新增主鍵約束
    create table stu2(
    id int primary key, -- 該id新增主鍵約束
    name varchar(20)
    );
    3. 刪除主鍵
    alter table stu3 drop primary key;
    4. 建立表後,新增主鍵
    alter table stu3 modify id int primary key;
    5. 自動增長:
    1. 概念:如果某一數值型別的,使用auto_increment 可以用來完成值的自動增長
    2. 在建立時,新增主鍵約束,並且完成主鍵自增長
    create table stu(
    id int primary key auto_increament, -- 給主鍵新增約束
    name varchar(20)
    );
    3. 刪除自動增長
    alter table stu4 modify id int;
    4. 新增自動增長
    alter table stu4 modify id int auto_increment;
    • 外來鍵約束:foreign key
      1. 在建立表時,可以新增外來鍵
        *語法:
        create table 表名(
        ....
        外來鍵列
        constraint 外來鍵名稱 foreign key 外來鍵列名稱 references 主表名稱(主列表名)
      2. 刪除外來鍵
        • alter table 表名稱 drop foreign key 外來鍵名稱;
      3. 在建立表後新增外來鍵
        *alter table 表名稱 add constraint 外來鍵名稱 foreign key(外來鍵欄位名稱) references 主表名稱(主列表名);
      4. 級聯操作
        1. 新增級聯操作
          • 語法:alter table 表名 add constraint 外來鍵名稱 foreign key(外來鍵欄位 名稱) references 主表名稱(主列表名) on update cascade;
        2. 分類:(謹慎使用)
          1. 級聯的更新:on update cascade
          2. 級聯的刪除:on delete cascade

資料庫的設計

1. 多表之間的關係
	1. 分類:
		1. 一對一:
			* 如:人和身份證
			* 分析:一個人只有一個身份證,一個身份證只能對應一個人
		2. 一對多(多對一):
			* 如:部門和員工
			* 分析:一個部門有多個員工,一個員工只能對應一個部門
		3. 多對多:
			* 如:學生和課程
			* 分析:一個學生可以選擇很多門課程,一個課程也可以被很多學生選擇
	2. 實現關係:
		1. 一對多(多對一):
			* 如:部門和員工
			* 實現方式:在多的一方建立外來鍵,指向一的一方的主鍵。
		2. 多對多:
			* 如:學生和課程
			* 實現方式:多對多關係實現需要藉助第三張中間表。
				中間表至少包含兩個欄位,這兩個欄位作為第三張表的外來鍵,分別指向兩張表的主鍵。