MySQL常用操作

MySQL篇

今日任務

Ø  完成對MySQL數據庫和表以及表數據的CRUD操作

Ø  完成對系統模型可以分析其中表關係並完成建表操作

Ø  完成對MySQL數據庫的多表查詢及建表操作.

1.1      數據庫整體介紹

【MySQL的概述】

Ø 什麼是數據庫:

數據庫就是一個文件系統,需要通過標準SQL語句才能訪問.

Ø 常見的數據庫:

MySQL  :開源免費的數據庫,中小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始         收費.

Oracle :收費的大型數據庫.Oracle公司的產品.Oracle收購SUN公司

DB2     :IBM公司的數據庫產品,收費的.銀行系統中用的比較多

SQLServer:MS公司.收費的中型的數據庫.

SyBase :已經不用了,但是供了一個非常專業數據建模的工具PowerDesigner.

SQLite : 嵌入式的小型數據庫,應用在手機端,比如android和ios

Java相關的數據庫:MYSQL,Oracle.

Ø 關係型數據庫:

數據庫中存的實體和實體之間的關係.

Ø MySQL數據庫服務器結構

見圖解

【MYSQL的安裝和卸載】

安裝和卸載的過程記錄下服務器安裝的路徑和數據文件存放的路徑.卸載的時候將這個兩個路徑下的文件一併都刪除掉.

如果使用mysql -u root -p不好使,可以將mysqlbin目錄配置到path變量值裏面

【MYSQL的SQL語句】

Ø 什麼是SQL

SQL:結構化查詢語言.

Ø SQL的分類:

數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。

數據操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。

※ 數據查詢語言(DQL),例如:SELECT語句。(一般不會單獨歸於一類,因爲只有一個語句)。

數據控制語言(DCL),例如:GRANT、REVOKE等語句。

※事務控制語言(TCL),例如:COMMIT、ROLLBACK等語句。

SQL語言包括四類種主要程序設計語言類別的語句:數據定義語言(DDL),數據操作語言(DML) 及數據控制語言(DCL)還有事務控制語言(TCL)。

1.2      SQL語句的使用

1.2.1    使用SQL語句對數據庫進行CRUD操作

【創建數據庫】

語法:

    * createdatabase 數據庫名;

    * createdatabase 數據庫名character set 字符集;

【查看數據庫】

* 查看數據庫服務器中的所有的數據庫:show databases;

* 查看某個數據庫的定義的信息:show create database 數據庫名;

【刪除數據庫】

* drop database 數據庫名稱;

【修改數據庫】

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

【其他的數據庫操作命令】

* 切換數據庫:use 數據庫名;

* 查看正在使用的數據庫:select database();

1.2.2    使用SQL語句對數據庫中表進行CRUD的操作

【創建表】

create table 表名(

   字段名 類型(長度) 約束,

   字段名 類型(長度) 約束

);

Java               MYSQL

int                 int

float              float

double             double

char/String       char/varchar(char固定長度字符串,varchar可變長度的字                           符串)

Date               date,time,datetime,timestamp

文件類型            BLOB、TEXT   TEXT指的是文本文件  BLOB二進制文件

單表約束:

    * 主鍵約束(一個表中只能有一個主鍵,肯定是唯一的):primary key

    * 唯一約束(必須是唯一的,但是一個表中可以有多個):unique

    * 非空約束:not null

創建一個商品分類表:

    分類id int類型主鍵 自動增長(auto_increment)

    分類名稱 字符串類型長度20

create table category(id int primary keyauto_increment,

name   varchar(20));

注意:建表之前一定先選擇數據庫

use 數據庫名;

【查看錶】

查看數據庫中的所有表:show tables;

查看錶結構:desc 表名;

查看錶的創建信息:show create table 表名;

【刪除表】

drop table 表名;

【修改表】

alter table 表名 add 列名 類型(長度) 約束;       修改表添加列

alter table 表名 modify 列名類型(長度) 約束; 修改表修改列的類型長度及約束

alter table 表名 change 舊列名新列名 類型(長度) 約束;   修改表列名

alter table 表名 drop 列名;                      修改表刪除列

rename table 表名 to 新表名;                      修改表名

alter table 表名 character set 字符集;          修改表的字符集

1.2.3    使用SQL語句對錶中的記錄進行CRUD操作

創建商品表:

 

【插入記錄】

語法:

* insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..);  向表中 插入某些列

* insert into 表 values (值1,值2,值3..); 向表中插入所有列

注意:

* 1.列名數與values後面的值的個數相等

* 2.列的順序與插入的值得數據類型要保持一致

* 3.插入值得時候不能超過最大長度.

* 4.值如果是字符串或者日期需要加’’.

cmd下插入中文的亂碼的解決:

* 修改mysql.ini文件.

    * [mysql]下面的字符集改爲gbk

    * 重啓mysql服務.services.msc

【修改記錄】

語法:

* update 表名 set 字段名=值,字段名=值 [where 條件];

注意:

* 1.列名的類型與修改的值要一致

* 2.修改值得時候不能超過最大長度

* 3.值如果是字符串或者日期需要加’’

#where後的條件寫法:#

    * >,<,=,>=,<=,<>

    * like 使用佔位符 _ 和 %  _代表一個字符 %代表任意個字符.

    * in在某個範圍中獲得值.

增加cid這一列:alter table product add cid int;

【刪除記錄】

語法:

* delete from 表名 [where 條件];

注意:刪除表中所有記錄使用delete from 表名; 還是用truncatetable 表名;

* 刪除方式:delete 只是將記錄刪除. 而truncate直接將表結構記錄刪除.

* 事務控制DML(transaction),delete屬於DML.如果在一個事務中,delete數據,這些數據可以找回.truncate刪除的數據找不回來.

【查詢記錄】

語法:

* select [distinct]*[列名,列名] from 表 [where 條件].

簡單查詢:

* 1.查詢所有的商品:

* 2.查詢商品名和商品價格:

* 3.別名查詢.使用的關鍵字是as.as可以省略的. 

    * 3.1表別名:  select * from product as p;

    * 3.2列別名:

* 4.去掉重複值的查詢:

select運算查詢:

* 1.將所有商品的價格+20元進行顯示.

條件查詢:

* 1.查詢商品名稱爲xxx的商品所有信息:

* 2.查詢商品價格>3000元的所有的商品信息:

(order by)排序查詢:

* 1.查詢所有的商品,按價格進行排序.(asc-升序,desc-降序)

* 2.查詢名稱有xxx的商品的信息並且按價格降序排序.

聚合函數:

* sum(),avg(),max(),min(),count();

* 1.獲得所有商品的價格的總和:

* 2.獲得所有商品的平均價格:

* 3.獲得所有商品的個數:

分組查詢:使用group by

* 1.根據cid字段分組,分組後統計商品的個數:

如果使用分組想要加條件進行篩選使用的關鍵字是having

select 列名或者* from 表名 group by 列名 having 條件;

* 2.根據cid分組,分組統計每組商品的平均價格,並且平均價格> 3000:

1.3      SQL創建多表及多表的關係

1.3.1    需求

分類表和商品表之間是不是有關係?如果有關係,在數據庫中如何表示這種關係.

1.3.2    技術分析和使用

【外鍵約束】

多個表之間是有關係的,那麼關係靠誰來維護?

多表約束:

外鍵約束寫法:

alter table product addforeign key (cid) references category(id);       

 

【多表的關係】

Ø 一對多關係:

客戶和訂單,分類和商品...

一對多建表原則:在多的一方創建一個字段,字段作爲外鍵指向一的一方的主鍵.

Ø 多對多關係:

學生和課程...

多對多關係建表原則:需要創建第三張表,中間表中至少兩個字段,這兩個字段分別作爲外鍵指向各自一方的主鍵.

Ø 一對一關係:

在實際的開發中應用不多.因爲一對一可以創建成一張表.

兩種建表原則:

唯一外鍵對應:假設一對一是一個一對多的關係,在多的一方創建一個外鍵指向一的一方的主鍵,將外鍵設置爲unique.

主鍵對應:讓一對一的雙方的主鍵進行建立關係.

 


1.5      分析商城表關係完成多表的查詢

1.5.1    需求

在商城的案例中很多涉及多表查詢的功能,[我的購物車]

1.5.2    技術分析和使用

【多表查詢】

Ø 交叉連接查詢(基本不會使用-得到的是兩個表的乘積)

語法:

* select * from A,B;

Ø 內連接查詢(使用的關鍵字 inner join  -- inner可以省略)

* 隱式內連接:

    * select* from A,B where 條件;

* 顯示內連接:

    * select * from A inner join B on 條件;

Ø 外連接查詢(使用的關鍵字 outer join -- outer可以省略)

* 左外連接:left outer join

    * select* from A left outer join B on 條件;

* 右外連接:right outer join

    * select* from A right outer join B on 條件;

【子查詢】

SQL語句的嵌套查詢:查詢“手機產品”分類的商品信息:

首先要查詢"手機產品"的id:

              select id from category where name='手機產品';

       然後拿id去商品表裏面和cid進行匹配查詢:

              select * from product where cid=(select id from category wherename='手機產品');

【練習】

按分類的名稱統計商品的個數:

select c.name,count(*)from category c,product p where c.id=p.cid     groupby c.name;

根據訂單的id查詢商品和訂單項的信息:

給你訂單的id=1,查詢這個訂單具有的商品信息

    select * from product p,orderItem o where p.id=o.pid and o.oid=1;

【MySQL的分頁查詢】

* select * from product limit a,b;  --a:從哪開始,b:查詢多少條.

 

發佈了33 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章