MySQL的基本概念與操作

數據庫的基本概念

  1. 什麼是數據庫?
    用於存儲管理數據的倉庫。
  2. 數據庫的特點:
    持久化存儲數據的。其實數據庫就是一個文件系統
    方便存儲和管理數據
    使用了統一的方式操作數據庫 – SQL
  3. 數據庫的分類:
    數據庫根據存儲採用的數據結構的不同可以分爲許多種,其中包含早期的層次式數據庫、網絡式數據庫。
    目前佔市場主流的是關係型數據庫。當然還有非關係(NoSQL)型數據庫(鍵值對數據庫,例如:MongoDB、Redis)等其他類型的數據庫
  4. 常見的關係型數據庫:
    SQL Server : 微軟提供(收費、Java中使用不多)
    Oracle 甲骨文公司(收費、功能強大、性能優異,Java中使用者很多)
    DB2 : IBM(收費、中型/大型、銀行/電信等企業)
    MySQL : 瑞典MySQL AB(免費開源、小型、性能也不差、適用於中小型項目、可集羣)
    SQLite : 迷你數據庫,嵌入式設備中

MySQL數據庫軟件

  1. 安裝
    參考該博客: [https://blog.csdn.net/zhujialiang18/article/details/79780131]

  2. 卸載
    推薦使用Total Uninstall 6傻瓜式卸載

  3. 啓動
    MySQL服務啓動

     	1. cmd--> services.msc 打開服務的窗口
     	2. 使用管理員打開cmd
     		net start mysql : 啓動mysql的服務			
     		net stop mysql:關閉mysql服務
    

    MySQL登錄

     	1. mysql -uroot -p密碼
     	2. mysql -hip -uroot -p連接目標的密碼
     	3. mysql --host=ip --user=root --password=連接目標的密碼
    

    MySQL退出

     	1. exit
     	2. quit
    

SQL

  1. 什麼是SQL?

     Structured Query Language:結構化查詢語言
     其實就是定義了操作所有關係型數據庫的規則。每一種數據庫操作的方式存在不一樣的地方,稱爲“方言”。		
    
  2. SQL通用語法

     1. SQL 語句可以單行或多行書寫,以分號結尾。
     2. 可使用空格和縮進來增強語句的可讀性。
     3. MySQL 數據庫的 SQL 語句不區分大小寫,關鍵字建議使用大寫。
     4. 3 種註釋
     	 單行註釋: -- 註釋內容 或 # 註釋內容(mysql 特有) 
     	 多行註釋: /* 註釋 */
    
  3. SQL分類

     1. DDL(Data Definition Language)數據定義語言
     	用來定義數據庫對象:數據庫,表,列等。關鍵字:create, drop,alter 等
     2. DML(Data Manipulation 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 字符集名;

(2) R(Retrieve):查詢
查詢所有數據庫的名稱:

		 show databases;
查詢某個數據庫的字符集:查詢某個數據庫的創建語句:

		show create database 數據庫名稱;

(3) U(Update):修改
修改數據庫的字符集

		 alter database 數據庫名稱 character set 字符集名稱;

(4)D(Delete):刪除
刪除數據庫

		 drop database 數據庫名稱;
 判斷數據庫存在,存在再刪除
		 
		 drop database if exists 數據庫名稱;

(5) 使用數據庫
查詢當前正在使用的數據庫名稱

		 select database();
 使用數據庫
		 
		 use 數據庫名稱;

2. 操作表

(1) C(Create):創建
創建表:

		create table 表名(
				列名1 數據類型1,
				列名2 數據類型2,
				....
				列名n 數據類型n
			);
		注意:最後一列,不需要加逗號(,)

 約束:對錶中的數據進行限定,保證數據的正確性、有效性和完整性	
* 非空約束:not null,值不能爲null。保證所約束的列必須是不爲空的,即在插入記錄時,該列必須要賦值,例如:用戶註冊時,保存的密碼不能爲空。

		創建表時添加約束
			creare table stu(
				id int,
				name varchar(20) not null -- name爲非空
			);



* 唯一約束:unique,值不能重複。保證所約束的列必須是唯一的,即不能重複出現,例如:用戶註冊時,保存的用戶名不可以重複。

	 	創建表時,添加唯一約束
			creare table stu(
				id int,
				phone_number varchar(20) unique -- 添加了唯一約束
		
			);
		* 注意mysql中,唯一約束限定的列的值可以有多個null
	


* 主鍵約束:primary key。唯一且不能爲空,一張表只能有一個字段爲主鍵。


		在創建表時,添加主鍵約束
			create table stu(
				id int primary key,-- 給id添加主鍵約束
				name varchar(20)
			);
4. 自動增長:如果某一列是數值類型的,使用 auto_increment 可以來完成值得自動增長。

		在創建表時,添加主鍵約束,並且完成主鍵自增長
			create table stu(
				id int primary key auto_increment,-- 給id添加主鍵約束
				name varchar(20)
			);



5. 外鍵約束:foreign key,讓表於表產生關係,從而保證數據的正確性。

		 在創建表時,可以添加外鍵
			create table 表名(
				....
				外鍵列
				constraint 外鍵名稱 foreign key (外鍵列名稱) references 主表名稱(主表列名稱)
			);
	
	


複製表:

		create table 表名 like 被複制的表名;
數據庫數據類型

		tinyint:佔用1個字節,相對於java中的byte
		smallint:佔用2個字節,相對於java中的short
		int:佔用4個字節,相對於java中的int
		bigint:佔用8個字節,相對於java中的long
		float:4字節單精度浮點類型,相對於java中的float
		double:8字節雙精度浮點類型,相對於java中的double
		date:日期,只包含年月日,yyyy-MM-dd
		datetime:日期,包含年月日時分秒	 yyyy-MM-dd HH:mm:ss
		timestamp:時間戳型	包含年月日時分秒	 yyyy-MM-dd HH:mm:ss	
				如果將來不給這個字段賦值,或賦值爲null,則默認使用當前的系統時間,來自動賦值
		char(n) 定長字符串,最長255個字符。n表示字符數
		varchar(n):變長字符串,最長不超過 65535個字節,n表示字符數,一般超過255個字節,超過會使用text類型,例如
					* name varchar(20):姓名最大20個字符
					* zhangsan 8個字符  張三 2個字符;

(2) R(Retrieve):查詢
查詢某個數據庫中所有的表名稱:

		show tables;
查詢表結構:

		desc 表名;

(3)U(Update):修改
修改表名

		 alter table 表名 rename to 新的表名;
修改表的字符集
		 
		alter table 表名 character set 字符集名稱;
修改列名稱 類型
		 
		alter table 表名 change 列名 新列別 新數據類型;
		alter table 表名 modify 列名 新數據類型
刪除列
		 
		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. 列名和值要一一對應。
     		3. 如果表名後,不定義列名,則默認給所有列添加值
     			insert into 表名 values(值1,值2,...值n)
     		4. 除了數字類型,其他類型需要使用引號(單雙都可以)引起來
     		5. 插入數據時或者查詢數據時先確保編碼是否一致		
    
  2. 刪除數據
    語法:

     	delete from 表名 [where 條件];
     	* 注意:
     	1. 如果不加條件,則刪除表中所有記錄
     	2. 如果要刪除所有記錄
     		1. delete from 表名; -- 不推薦使用。有多少條記錄就會執行多少次刪除操作
     		2. TRUNCATE TABLE 表名; -- 推薦使用,效率更高 先刪除表,然後再創建一張一樣的表。
    

    查詢某個數據庫的字符集:查詢某個數據庫的創建語句:

     	show create database 數據庫名稱;
    
  3. 修改數據
    語法:

     	 update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
     	 * 注意:
     	  如果不加任何條件,則會將表中所有記錄全部修改
     	  如果修改列存在null值時:null值和任何值計算結果還是null, 因此, 可以通過ifnull函數將null置爲零對待.
    

DQL:查詢表中的記錄

  1. 語法

     	 select
     	 	字段列表
     	 from
     		表名列表
     	 where
     		條件列表
      	group by
     		分組字段
      	having
     		分組之後的條件
      	order by
     		排序
      	limit
     		分頁限定
    
  2. 基礎查詢
    (1) 多個列名的查詢:

     	select 列名1,列名2... from 表名;
     	* 注意:
     		* 如果查詢所有,則可以使用*來替代列表
    

    (2)去除重複:

     	select  distinct 列名 from 表名;
    

    (3)起別名:

     	select 列名1 as XXX, from 表名;
     	as也可以省略	
    
  3. 條件查詢
    (1) where子句後跟條件

     	......form 表名 where 子句;
    

    (2)運算符
    運算符
    (3)排序查詢

    1. 語法:

       order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...
      
    2. 排序方式:

       * ASC:升序,默認的
       * DESC:降序
      
    3. 注意:

       如果有多個排序條件,則當前邊的條件值一樣時,纔會判斷第二條件
      

    (4)聚合函數

     	1. count:計算個數
     	2. max:計算最大值
     	3. min:計算最小值
     	4. sum:計算和
     	5. avg:計算平均值
     
     	* 注意:聚合函數的計算,排除null值。
     		解決方案:
     			1. 選擇不包含非空的列進行計算
     			2. IFNULL函數
    

    (5)分組查詢

    1. 語法:

       group by 列名
      

      where 和 having 的區別?

       where 在分組之前進行限定,如果不滿足條件,則不參與分組。having在分組之後進行限定,如果不滿足結果,則不會被查詢出來
       where 後不可以跟聚合函數,having可以進行聚合函數的判斷。
      

(6)分頁查詢
1. 語法:

		limit 開始的索引,每頁查詢的條數
		
2. 公式:

		開始的索引 = (當前的頁碼 - 1) * 每頁顯示的條數
3. 注意:

		limit 是一個MySQL"方言"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章