MySQL

easily use MySQL

Vasiliy

MySQL Introduction

一個開放原始碼關聯式資料庫管理系統

  1. 建立多個關係資料表來存入資訊
  2. 可以通過多表關係來查詢資料
  3. 將系統自身的資訊也提供為一個表或目錄,稱為系統表,用於互動查詢。

MySQL資料庫

--建立資料庫 並選擇語系
create database 資料庫名稱 character set 語系


--刪除資料庫
drop database 資料庫名稱
--建立資料庫test並選擇語系utf8
create database test character set utf8


--刪除資料庫test
drop database test

MySQL資料表

--新建資料表
CREATE TABLE  資料表名稱(
    欄位名稱1   變數型態   欄位1額外條件,
    欄位名稱2   變數型態   欄位2額外條件,
    ......
    --其他設定條件
    PRIMARY KEY (欄位)
)

--刪除資料表
DROP TABLE 資料表名稱

--清空資料
TRUNCATE 資料表名稱
--新建資料表test
--test_id     為int型態並且為遞增
--test_name   為text型態
--test_id     為主鍵
CREATE TABLE  test(
    test_id     int   AUTO_INCREMENT,
    test_name   text,
    PRIMARY KEY (test_id)
)

--刪除資料表test
DROP TABLE test

--清空資料表test的所有資料
TRUNCATE test

練習

1.新增一個名為easylearn的資料庫

2.新增一個名為easylearn的資料表

3.欄位資訊為:

   test_id           int型態  auto_increase(遞增)

   test_name    text型態

   test_body     text型態

 

PDO(PHP Data Objects)

use PDO to connect MySQL

不要用舊的方法mysqli
之後的新版本將被捨棄使用

而且安全率非常的低

 

$db = new PDO(
	'資料庫類型:host:資料庫IP;dbname=資料庫名稱',
        '資料庫使用者',
	'資料庫使用者密碼'
	//下面為其他參數條件
);
$db = new PDO(
	'mysql:host=localhost;dbname=test',
        'root',
	''
	//下面為其他參數條件
);

利用PDOMySQL下指令

//串接PDO並與MySQL資料庫連線
$db = new PDO(
    'mysql:host=localhost;dbname=test',
    'root',
    ''
);

//對MySQL下指令
$stmt=$db->prepare('資料庫指令');

//把資料庫指令的輸入數值以陣列方式丟進來,做數值過濾
//並且執行指令
$stmt->execute('陣列數值');

新增(INSERT)

INSERT INTO `資料表`(`欄位1`,`欄位2`,......)
VALUES ('數值1','數值2',......),
       ('數值1','數值2',......),
            ......
--搜尋 test_id=1 的資料並且只有顯示test_id與test_name兩種資訊
INSERT INTO `test`(`test_name`)
VALUES ('test1'),('test2')

/*-------新增-------*/
//串接PDO並連接MySQL
$db = new PDO(
	'mysql:host=localhost;dbname=test',
        'root',
	''
);
//執行新增指令
$stmt=$db->prepare('INSERT INTO `test`(`test_name`) VALUES (:test_name_0),(:test_name_1)');
//把參數丟進去
$stmt->execute(
    array(
        ':test_name_0'    => 'test1',
        ':test_name_1'    => 'test2',
    )
);

INSERT In PHP

練習

1.創建一個form表單把test_nameGET方法給

insert.php

2.在insert.php

新增test_name = $GET['test_name']

刪除(DELETE)


DELETE FROM `資料表` 
WHERE 條件式

--刪除test資料表 test_id = 1的值
DELETE FROM `test` WHERE 'test_id' = 1

/*-------刪除-------*/
//串接PDO並連接MySQL
$db = new PDO(
	'mysql:host=localhost;dbname=test',
        'root',
	''
);
//執行刪除指令
$stmt=$db->prepare('DELETE FROM `test` WHERE `test_id` = :test_id');
//把參數丟進去
$stmt->execute(
    array(
        ':test_id'    => '1'    
    )
);

DELETE In PHP

練習

1.創建一個form表單把test_idGET方法給

delete.php

2.在delete.php

刪除test_id = $GET['test_id ']的所有資訊

 

 

更新(UPDATE)


UPDATE `資料表` 
SET `欄位1`='數值',`欄位2`='數值',...... 
WHERE 條件式

--更新test資料表 
--test_id = 2的 test_name 都變成Hello World!!
UPDATE `test` 
SET `test_name`='Hello World!!'
WHERE `test_id` = 2

/*-------更新-------*/
//串接PDO並連接MySQL
$db = new PDO(
	'mysql:host=localhost;dbname=test',
        'root',
	''
);
//執行更新指令
$stmt=$db->prepare('UPDATE `test` SET `test_name`=:test_name WHERE `test_id` = :test_id');
//把參數丟進去
$stmt->execute(
    array(
        ':test_name'  => 'Hello World!!',
        ':test_id'    => '2'    
    )
);

UPDATE In PHP

練習

1.創建一個form表單把test_id,test_nameGET方法給update.php

2.在update.php

test_id = $GET['test_id ']

更新test_name = $GET['test_name']

 

查詢(search)

SELECT `欄位1`,`欄位2`,......(*)
FROM `資料表`
WHERE 條件式
--搜尋 test_id=1 的資料並且只有顯示test_id與test_name兩種資訊
SELECT `test_id`,`test_name`
FROM `test`
WHERE `test_id` = '1'

--搜尋test表所有資訊
SELECT * FROM `test` WHERE 1
//串接PDO並連接MySQL
$db = new PDO(
	'mysql:host=localhost;dbname=test',
        'root',
	''
);
//執行搜尋指令
$stmt=$db->prepare('SELECT `test_id`,`test_name` FROM `test` WHERE `test_id` = :test_id');

//把輸入數值:test_id 變為 1
$stmt->execute(
    array(
        ':test_id'   => 1    
    )
);
//顯示執行結果
$result=$stmt->fetchAll(PDO::FETCH_ASSOC);
	
var_dump($result);

search In PHP

練習

1.創建一個form表單把test_idGET方法給search.php

2.在search.php

如果$GET['test_id '] == all 印出全部資料

反之印出test_id = $GET['test_id ']

 

 

排序(order by)

--生冪 ASC
--降冪 DESC
ORDER BY `欄位1` 生冪或降冪 ,
         `欄位2` 生冪或降冪 ,
            ......
--把test_id生冪的印出來
SELECT * FROM `test` WHERE 1 ORDER BY `test_id` ASC

限制(limit)


LIMIT 想取出多少筆資料 
OFFSET 從第幾筆開始(0為第一筆資料)
--列出兩筆資料
SELECT * FROM `test` WHERE 1 LIMIT 2
--列處兩筆資料 從第三筆資料開始算起
SELECT * FROM `test` WHERE 1 LIMIT 2 OFFSET 2

練習

1.創建一個form表單把type,limit,offsetGET方法給search.php

2.在search.php

印出資料

if type ==0 則 以生冪顯示

else 則以降冪顯示

 

limit 為 顯示多少筆資料

offset從第幾筆開始

 

 

加入(JOIN)

這個只有在關聯式資料庫才有,

意思就是把多個資料表加在一起

Select 資料表1.資料欄位, 資料表2.資料欄位,......
FROM 資料表1
INNER JOIN 資料表2 ON 條件式
SELECT `test1`.`test_name`, `test2`.`test2_type`
FROM `test1`
INNER JOIN `test2` ON `test1`.`test_id` = `test2`.`test_id`

自製 simpleSQL

//設置資料表
$SQL->setDateTable(資料表str);
//清空暫存指令
$SQL->fresh();
//新增
$SQL->insert(欄位一維陣列)
    ->value(數值二維陣列)
    ->execute();
//刪除
$SQL->delete()
    ->where(條件二維陣列)
    ->execute();
//更新
$SQL->update(欄位一維陣列)
    ->set(數值一維陣列)
    ->where(條件二維陣列)
    ->execute();
//搜尋
$SQL->select(欄位一維陣列)
    ->where(條件二維陣列)
    ->order(二維陣列)
    ->limit(limit參數1,offset參數2)
    ->execute();
//客製化(自己輸入指令的)
$SQL->customsize(query字串,陣列)
    ->execute();

下載

MySQL

By andy26283

MySQL

  • 129