1. 程式人生 > 其它 >08、Java--Mysql基礎

08、Java--Mysql基礎

Mysql

MySQL基礎

目前常用的資料庫如下:

SQL Server
Oracle
Sum
Mysql
HSQL
PostgreSQL
SQLite
IBM db2

安裝完成Mysql後在dos視窗下使用 mysql -u 賬號 -p 密碼 來連線資料庫。MySQL的資料和手冊:

http://www.mysql.cn/

基礎語法

關係型資料庫需要操作它,需要傳送特定格式的命令,那麼sql語言幾乎是所有關係型資料庫通用的。

名稱 說明
SQL(結構化查詢語言) SQL是用來存取關係型資料庫的語言,具有查詢、操縱、定義和控制關係型資料庫的四方面功能。
DDL(資料定義問題) 資料定義語音 - Data Definition Language,用來定義資料庫物件,如資料包、檢視、索引等。
DML(資料操縱問題) 資料處理語言 - Data Manipulation Language,在資料庫表中更新、增加和刪除記錄,如:update、insert、delete等。
DCL(資料控制問題) 資料控制語言 - Data Control Language,指用於設定使用者許可權和控制事務語句,如:grant、revoke、if...else、while、begin transation
DQL(資料查詢問題) 資料查詢語言 - Data Query Language,如:slect 可以去查詢相關的檔案Mysql5.1_zh.chm,SQL語句不區分大小寫的。

對庫操作

預設存在資料庫有四個,不要隨意更改,否則導致資料庫出錯。

其中對庫的操作語法如下:

語句 描述
create database db_name 建立資料庫
show databases 顯示資料庫語句
show create database db_name 顯示資料庫建立語句。
select database() 檢視當前資料庫。
use db_name 切換資料庫:。
drop database db_name 刪除資料庫。
alter database db_name character set 字符集 collate 校對規則 修改資料庫。

建立一個使用utf8字符集,並帶校對規則的mydb3資料庫:

create database mydb character set utf8 collate utf8_unicode_ci;

對xx表操作

表是二維表,分為行和列,每行對應著一個實體類的例項物件,沒列對應每個實體類的具體的欄位名和型別。

建立表

建立表的語法如下所示:

create table table_name(
    field1  datatype,
    field2  datatype,
    field3  datatype
)

其中datatype表示資料型別:

型別 描述
String、varchar、char 字串型別。
blob、text、mediumblob、mediumtext、longblob、longtext 大資料型別。
tinyint、smallint、int、bigint、float、double 數值型。
bit、0、1 邏輯型。
date(日期)、time(時間)datatime(日期時間)、timestamp(時間戳) 日期型

注意:mysql語句中的註釋是 --

建立一張表用於測試用:

create table student(
  id int(32) primary key auto_increment,
  name varchar(32),
  age int(32),
  gender varchar(16)
);

如下圖所示:

查看錶

語句 描述
show tables 檢視所有表。
show create table 表名 查看錶的建立語句。
desc 表名 查看錶的詳細結構。

注:建立表的時候通常會新增額外的約束,這些約束都是為了保證表中的資料的有效性和完整性。

特性 描述
primarey key 主鍵約束:宣告為主鍵的欄位必須非空,並且不能重複。
auto_increment 主鍵必須是數值型別,表示主鍵自動增長。
unique 唯一約束,欄位必須唯一,但是可以是空。
not null 非空約束:不能為空。

修改表

語句 描述
rename table db_name to new_name 修改表的名稱。
change [column] old_col_name column_definition 修改列的名稱。
alter table db_name character set utf8 修改表的字元編碼。

刪除表

語句 描述
drop table db_name 刪除表

新增一列

alter table 表名 add 欄位名 型別(長度) [約束]

給student表中的學生新增地址列:

alter table student add address varchar(32);

如下圖所示:

修改列型別

alter table 表名 modify 要修改的欄位名 型別(長度) [約束]

修改student表中的name欄位長度為16,且不能為空:

alter table student modify name varchar(16) not null;

如下圖所示:

修改列的名稱

alter table 表名 change 舊列名 新列名 型別(長度) [約束]

修改student表中的address欄位為addr欄位:

alter table student change address addr varchar(32);

如下圖所示:

刪除表的列

alter table 表名 drop 列名

刪除student表中的gender欄位:

 alter table student drop gender;

如下圖所示:

修改表名

rename table 表名 to 新表名

修改表的編碼

alter table 表名 character set 編碼

除了可以修改表的字符集之外,還可以檢視當前表的編碼:

操作表記錄

插入記錄

insert into 表名(列名1,列名2,列名3……) values(值1,值2,值3……)
insert into 表名 values(值1,值2,值3……)

向表中插入多條資料:

 insert into student values(1, 'legend', 22, 'shenzhen');
 insert into student values(2, 'vinvent', 25, 'hunan');
 insert into student values(3, 'uding', 20, 'yunnan');

如下圖所示:

修改記錄

修改記錄有帶條件和不帶條件等兩種方式:

update 表名 set 欄位名=值, 欄位名=值, 欄位名=值……
update 表名 set欄位名=值, 欄位名=值, 欄位名=值…… where 條件

其中不帶條件的會將表中列下所有記錄都更改。

update student set age=28 where name='uding';

如下圖所示:

刪除記錄

delete from 表名;

delete刪除的時候是一條一條的刪除記錄,它配合事務,可以將刪除的資料找回。id不會重置。

truncate刪除,它是將整個表摧毀,然後再建立一張一模一樣的表。它刪除的資料無法找回。id會重置。

查詢記錄

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

1>檢視年齡為25歲的學生:

2>單獨查詢某些列:

3> 使用表別名查詢所有記錄:

注意:其中as可以被省略。

4>查詢所有的學生,按年齡進行排序(升序、降序)

其中升序是asc,降序是desc。

多條件查詢

1> 查詢學生表中年齡大於20 並且地址在深圳的記錄

2> 查詢學生表中地址在深圳或者湖南的記錄

聚合函式

1> 獲得所有學生的年齡總和

2> 獲得學生的平均年齡

3> 獲得學生的總數

分組操作

1> 首先為學生表新增分類

alter table student add cid varchar(32);

2> 初始化資料,配置不同的cid

3> 根據cid分組,分組統計每組學生的數量

4> 根據cid分組,分組統計每組學生的平均年齡,且年齡大於20歲以上

注意:查詢條件如果是聚合函式,則使用having。

多表設計

外來鍵約束

表是用來儲存現實生活中的資料的,而現實生活中資料和資料之間往往具有一定的關係,我們在使用表來儲存資料時,可以明確的宣告

表和表之前的依賴關係,命令資料庫來幫我們維護這種關係,向這種約束就叫做外來鍵約束。

一對一關係

一對一的關係在實際開發中應用並不多,因為一對一的關係完全可以建立成一張表。

兩種建表原則如下:

1)外來鍵唯一:主表的主鍵和從表的外來鍵唯一,形成主外來鍵關係。
2) 外來鍵是主鍵:主表的主鍵和從表的主鍵,形成主外來鍵關係。

一對多關係

一對多的建表原則是:在從表(多方)建立一個欄位,欄位作為外來鍵指向主表(一方)的主鍵。

我們建立兩張表,分別是分類表和商品表,其中一個分類對應多個商品。

--分類表:
create table category(
    cid varchar(32) primary key,
    cname varchar(100)
);
--商品表:
create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double,
    category_id varchar(32)
);

然後分別向分類表和商品表中新增資料:

--分類表
insert into category(cid,cname) values('c001','家電');
insert into category(cid,cname) values('c002','服飾');
insert into category(cid,cname) values('c003','化妝品');
--商品表
insert into product(pid,pname,price,category_id) values('p001','聯想','5000','c001');
insert into product(pid,pname,price,category_id) values('p002','海爾','5000','c001');
insert into product(pid,pname,price,category_id) values('p003','雷神','5000','c001');
insert into product(pid,pname,price,category_id) values('p004','JACK JONES','800','c002');
insert into product(pid,pname,price,category_id) values('p005','真維斯','200','c002');
insert into product(pid,pname,price,category_id) values('p006','花花公子','440','c002');
insert into product(pid,pname,price,category_id) values('p007','勁霸','2000','c002');
insert into product(pid,pname,price,category_id) values('p008','香奈兒','800','c003');
insert into product(pid,pname,price,category_id) values('p009','相宜本草','200','c003');

注意:插入資料如果出現編碼問題,只需要通過set names gbk即可設定編碼。

此時,product和category表是沒有任何關係的,需要設定外來鍵來確定兩張表的關係,將從表categoryid作為外來鍵欄位來對映主表product的cid欄位。

alter table product add foreign key(category_id) references category(cid);

新增外來鍵來確定表之間關係的語法如下:

語法:alter table 從表 add [constraint] [外來鍵名稱] foreign key (從表外來鍵欄位名) references 主表 (主表的外來鍵);
[外來鍵名稱]:用於刪除外來鍵約束的,一般建議_fk結尾。 

我們在刪除的時候就可以通過如下語句來刪除外來鍵約束:

alter table 從表 drop foreign key 外來鍵名稱;

多表操作需要注意如下地方:

從表不能夠新增(更新)主表中不存在的資料。
主表不能夠刪除(更新)從表中已經使用的資料。

多對多關係

多對多關係需要建立第三張表作為中間表,中間表中至少有兩個欄位分別作為外來鍵指向各一方的主鍵。其中兩張表都是主表,中間表為從表。

我們建立三張表,分別是訂單表、商品表、訂單項表,其中訂單和商品為多對多關係,訂單項則是中間表指向各方的主鍵。

--商品表
create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double,
    category_id varchar(32)
);
--訂單表
create table orders(
    oid varchar(32) primary key,
    totalprice double
);
--訂單項表
create table orderitem(
    oid varchar(50),
    pid varchar(50)
);

然後我們建立訂單表和商品表的關係,設定聯合主鍵(可省略)

alter table orderitem add primary key(oid,pid);
  1. 訂單表和訂單項表的主外來鍵關係:
alter table orderitem add constraint orderitem_orders_fk foreign key(oid) references orders(oid);
  1. 商品表和訂單項表的主外來鍵關係
alter table orderitem add constraint orderitem_product_fk foreign key(pid) references product(pid);

多表查詢

交叉連線查詢

交叉連線查詢得到的是兩個表的乘積,通常稱之為笛卡爾積。

語法:select * from 表一, 表二;

如下圖所示:

內連線查詢

內連線查詢分為隱式內連線和顯示內連線,是取得兩個表中存在連線匹配關係的記錄(交集)。

1> 隱式內連線

語法:select * from A, B where 條件;

2> 顯式內連線

語法:select * from A inner join B on 條件 

注意:隱式內連線和顯示內連線查詢到的結果是一樣的,其中顯示內連線中inner關鍵字可以省略。

外連線查詢

外連線查詢分為左外連線和右外連線。其中outer關鍵字可以省略。

  1. 左外連線

左外連線查詢到的是左表的全部資料和兩張表之間的交集。

語法:select * from A left outer join B on 條件;
  1. 右外連線

右外連線查詢到的是右表的全部資料和兩張表之間的交集。

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

子查詢

一條select語句結果作為另一條select語法的一部分。

1> 通過查詢語句查詢到化妝品分類的cid。

2> 將上方查詢語句作為另外一條查詢語句語法的一部分: