Chapter 12 က Database ပုဒ္စာတစ္ပုဒ္ပါ။ Lab Test ေမးမယ့္ ေမးခြန္းပံုစံထဲမွာ Database လဲပါပါတယ္။
ေမးခြန္းပံုစံက
Form with Database (or) Form with include and Function/Form with File.
Database ပိုင္းမွာ ပါတဲ့အဆင့္ေတြကို ေအာက္ကအတိုင္း အလြယ္နည္းနဲ့ မွတ္ထားလိုက္ေပါ့...
1. Database Create
2. DBLink (use Database)
3. Table Create
4. Functions (Insert, Select, Specific Select, Update, Delete)
စာေမးပြဲမွာ ေမးခဲ့ရင္ေတာ့ Functions ေတြထဲက ၂ မ်ိဳး (အမ်ားဆံုး ၃ မ်ိဳးေလာက္) ပဲေမးမွာပါ။
DBMS ကိုလဲေတာ္ေတာ္ေလး ရထားတယ္ဆိုရင္ေတာ့ ဒီအပိုင္းမွာ ေတာ္ေတာ္ေလးလြယ္ေနမွာပါ။
ပထမဆံုး Database Create လုပ္ပါမယ္။
DBMS(04) မွာလိုဆိုရင္ေတာ့ Create Database dbname; အဲလိုမ်ိဳးေပါ့။
PHP မွာကေတာ့ ေအာက္ကပံုစံပါ။ အလြတ္မွတ္မိေနေအာင္ ႀကည့္ထားရပါမယ္။
<!-- DBCreate-->
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE firstDB",$con))
{ echo "Database created"; }
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?>
dbcreate.php ဆိုျပီး Save လုပ္ထားလိုက္ပါ။
$con ဆိုတာက mysql connection တစ္ခုအေနနဲ့ variable သတ္မွတ္ေပးတာ..။ သူ ့မွာထည့္ရမွာက
mysql_connect( " ", " " , " ") ကြင္းစ ကြင္းပိတ္ထဲမွာ db host (localhost), username(root), password( ) အဲဒီ Format နဲ့ထည့္ရမွာပါ။ password ထဲမွာေတာ့ ေမးခြန္းကိုႀကည့္ျပီး ထည့္ရလိမ့္မယ္။ ေမးခြန္းမွာ password ေပးခိုင္းရင္ေတာ့ထည့္ေပးလိုက္ေပါ့။
if(!$con) ဆိုျပီး စစ္တာက error ကိုစစ္တာပါ။ $con ရဲ ့ေရွ ့မွာ not sign(!) ေလးပါတဲ့အတြက္.. connection မျဖစ္ဖူးဆိုရင္ mysql_error() ဆိုတဲ့ method ကိုေခၚလိုက္တာပါ။
mysql_query ဆိုတဲ့ method ကေတာ့ SQL query ေတြထည့္ရင္ သံုးတာပါ။ ဥပမာ.... Create Database တို ့
Create Table တို ့ ဘာတို ့ေပါ့။ ေနာက္က်ရင္ေတြ ့ရဦးမွာပါ။ အဲဒီ Query ထဲကို $con ကိုထည့္ေပးရတယ္။ Query ကိုလဲ error တက္ရင္ error message ျပဖို ့condition စစ္တယ္ေပါ့။
Sql Connection ကို ေခၚသံုးျပီးရင္ အျမဲတမ္း ျပန္ပိတ္ေပးရတယ္။
mysql_close($con) ဆိုတ့ဲ့ method နဲ့ ျပန္ပိတ္ေပးရတယ္။ (ျပန္ပိတ္တာအျမဲတမ္းေမ့ က်န္တတ္တယ္)
ေနာက္တစ္ခု DBLink ပါ။ သူကေတာ့ DBMS(04) မွာတူတာက DB use လုပ္တာနဲ့တူပါတယ္။
> Use Dataabase dbname;
<!-- dblink.php -->
<?php
$con = mysql_connect("localhost","root","");
if(!$con)
{
die('Could not connect: ' . mysql_error());
}
else
{
//echo "Connected <br/>";
}
$databasename="firstDB";
$db_selected = mysql_select_db($databasename, $con) ;
if(!$db_selected)
{
Die("Can't use $databasename:".mysql_error());
}
?>
dblink.php ဆိုျပီး Save လုပ္လိုက္ပါ။
သူကလဲ အေပၚကအတိုင္း Database Connection လုပ္တယ္။ error စစ္တယ္။ ျပီးေတာ့ databasename သတ္မွတ္တယ္။ database ကို select (use) လုပ္တယ္။ Select လုပ္တာမွာ mysql_select_db( ) ဆိုတဲ့ method ကိုေခၚျပီး သံုးတယ္။ method ထဲမွာ dbname နဲ့ connection ထည့္ေပးရပါတယ္။
ေနာက္တစ္ဆင့္က Table Create လုပ္တာပါ။
<!-- tablecreate.php -->
<?php
include("dblink.php");
$sql = "CREATE TABLE Persons
(FirstName varchar(15),LastName varchar(15), Age int)";
$ret=mysql_query($sql,$con);
if($ret) {
echo "<p>Table Persons is created!</p>";
}
else {
echo "<p>Something went wrong: ", mysql_error() + "</p>";
}
mysql_close($con);
?>
Tablecreate.php ဆိုျပီး Save လုပ္လိုက္ပါ။ Table Create ထဲမွာေတာ့ include(dblink.php) ဆိုျပီး dblink ကို ေခၚထားပါမယ္။ ဘာလို ့လဲဆိုေတာ့ သံုးဖို ့select လုပ္ထားတဲ့ Database ရွိမွ အဲဒီ Database ထဲမွာ Table ကို Create လုပ္ရမွာမို့ပါ။ sql ဆိုျပီး Variable တစ္ခုယူျပီးေတာ့ အဲထဲမွာ query ကိုထည့္ထားပါတယ္။
အဲဒီ $sql နဲ့ connection ကို mysql_query method ထဲ variable တစ္လုံုးယူျပီး ထည့္လိုက္မယ္။ က်န္တာကေတာ့ Table Create လုပ္တာကို error စစ္တာပါပဲ...။
<!-- menu.php -->
<?php
echo "<a href ='insertForm.php'> Insertion </a> |
<a href='selectAll.php'>Select ALL</a> |
<a href='selectForm.php'>Select</a> |
<a href='updateForm.php'>Update</a> |
<a href='deleteForm.php'>Delete</a>";
?>
Menu က သိပ္ေတာ့ ရွင္းစရာ မရွိပါဘူး။ သူ ့ကို run လိုက္ရင္ ေအာက္က ပံုအတိုင္းရမွာပါ။
<!--insertion.php-->
<html>
<head>
<title>Insertion Form</title>
</head>
<body>
<?php
include('menu.php');
include("dblink.php");
if(!isset($_POST['submit']))
{
echo "<form action='insertForm.php' method='POST'>
<p>First Name :
<input type='text' name='firstname'> </p>
<p>Last Name :
<input type='text' name='lastname'> </p>
<p>Age :
<input type='text' name='age'> </p>
<input type='submit' name='submit' value='Insert'>
<input type='reset' name='reset' value='Clear'>
</form> ";
}
else
{
$firstName=$_POST['firstname'];
$lastName=$_POST['lastname'];
$age=$_POST['age'];
$mysql_query="INSERT INTO Persons(FirstName,LastName, Age)
VALUES('$firstName','$lastName', '$age')";
$results=mysql_query($mysql_query,$con);
echo "<br/><br/>";
if($results>0)
{
echo ("Insert one record successful!");
}
else
{
echo ("Insert fail!");
}
mysql_close($con);
echo "<br/><br/>";
echo "<a href='insertForm.php'>Back</a>";
}
?>
</body>
</html>
ဒါက insert လုပ္တဲ့ code ပါ။ အဲဒီမွာက အရင္ဆံုး Insert Form ကိုအရင္လုပ္တယ္။ အဲမွာက ပထမဆံုး Insert Form ကိုအရင္လုပ္တယ္။ ေအာက္က ပံုအတိုင္းေပါ့။ (Form ေတြတည္ေဆာက္တာက ရျပီးသားထင္လို ့မရွင္းျပေတာ့ပါ)
Form ကိုတည္ေဆာက္ျပီးမွ insert လုပ္တဲ့ command နဲ့ Sql connection ကို Query ထဲထည့္လိုက္ရံုပါပဲ...။
Query ေတြကလဲ သိပ္မခက္ပါဘူး။
က်န္တဲ့ Selection, Update နဲ့ Delete တို ့ကလဲ သေဘာတရားခ်င္း တူတူပဲ ျဖစ္လို ့.. ကိုယ့္ဘာသာကိုယ္ ျပန္ႀကည့္လို္ ့ရေလာက္ပါျပီ :D
UCSY Tutorials
Thursday, September 19, 2013
Friday, August 9, 2013
VB.NET Practical: Sample Question 1
Question ကို ေဒါင္းလုပ္ လုပ္ပါ။
Download
Question ထဲမွာ Form ကိုမေပးထားပါဘူး။ ကိုယ့္ဘာကို ဖတ္ႀကည့္ျပီး Form design ကိုေဆာက္ရမွာ။
ေအာက္က ပံုအတိုင္းပါပဲ။
ပထမဆံုး SQL Database တစ္ခုေဆာက္ရမယ္။ Database ေဆာက္ပံုေဆာက္နည္းကို အရင္ကေျပာျပီးသားမို ့ ဒီမွာမေျပာေတာ့ဘူး။ Database ေဆာက္ပီးသားလို ့မွတ္ထားလိုက္။ Form ကေနပဲစမယ္။ Display Button ကို ႏွစ္ခ်က္ႏွိပ္လိုက္ရင္ coding ေရးရမယ့္ေနရာ ေရာက္မယ္။
coding ေတြကေတာ့....
Imports System
Imports System.Data
Imports System.Data.SqlClient
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mdept, mname As String
mdept = InputBox("Enter desired Department name: ")
Dim connString As String = ("Data Source=.\sqlexpress; Integrated Security=True; database= staff")
Dim cn As SqlConnection = New SqlConnection(connString)
Dim sql As String = "select * from staff_info;"
Try
Dim ds As New DataSet()
Dim da As SqlDataAdapter = New SqlDataAdapter(sql, cn)
da.Fill(ds)
Dim dv As DataView = New DataView(ds.Tables(0))
dv.RowFilter = "Dept='" & mdept & "'"
dv.Sort = "Salary"
Dim drv As DataRowView
Dim data As String = " "
For Each drv In dv
Dim i As Integer
For i = 0 To dv.Table.Columns.Count - 1
data = data & drv(i) & vbTab
Next
data = data & vbLf
Next
MessageBox.Show(data, "All Staff Info", MessageBoxButtons.OK)
Catch ex As Exception
MessageBox.Show("Error Occured :" & ex.ToString)
Finally
cn.Close()
End Try
End Sub
End Class
အေရးႀကီးတ့ဲ အပိုင္းေလးေတြကို အနီေရာင္နဲ့ျပထားတယ္။ ေမးခြန္းမွာ ပါတဲ့အတိုင္း Filter နဲ့စစ္တာရယ္။ Descending order စီတာရယ္ကို လုပ္ထားတာပါ။ သိပ္ေတာ့အခက္ႀကီး မဟုတ္ပါဘူး။ လက္ေတြ ့လုပ္ႀကည့္ဖို ့ပဲလိုတာပါ။
Tuesday, August 6, 2013
DBMS Practical (Transaction)
DBMS မွာ Transaction ပိုင္းကို Lab လုပ္တာ ဒီႏွစ္မွ စလုပ္တာပါ။ အဲဒါေႀကာင့္ Lab test မွာေမးမယ္ဆို ေမးလို ့ရတာေပါ့ေနာ္..သိပ္ေတာ့မေသခ်ာဘူး။ ဘာပဲျဖစ္ျဖစ္ ေမးလာရင္ ေျဖလို ့ရေအာင္ ႀကိဳတင္ျပင္ဆင္ထားသင့္တာေပါ့။ :D
Transaction ပိုင္းက နဲနဲ ရွုပ္တာကလြဲရင္ လြယ္လြယ္ေလးပါ။ Transaction မွာ Commit နဲ့ RollBack ဆိုျပီး ႏွစ္မ်ိဳးရွိတယ္... (ေအာက္မွာ ဥပမာေတြနဲ့ နားလည္ေအာင္ ရွင္းျပထားပါတယ္)
သေဘာေျပာရရင္... Database တစ္ခုကို User ႏွစ္ေယာက္သံုးတယ္...။ User 1 က table တစ္ခုကို Create လုပ္ထားမယ္။ User 2 ကလဲ အဲဒီ Database ကို သံုးေနတယ္။ အဲဒီအခ်ိန္မွာ Transaction စတယ္။ User 1 က table ထဲက Data တစ္ခုကို Update လုပ္လိုက္တယ္။
တစ္ခ်ိန္ထဲမွာပဲ User 2 က အဲဒီ Table ကို Select * လုပ္ျပီး ႀကည့္မယ္။ User 1 က Commit/ Roll back တစ္ခုခု မလုပ္ေသးတဲ့အတြက္ User 2 ကႀကည့္ရင္ နဂို Table အတိုင္းပဲ ျမင္ရမွာပါ။ Update လုပ္လိုက္တာကိုေတာ့ User 2 က ျမင္ရမွာမဟုတ္ပါဘူး။ Commit/Roll Back တစ္ခုခု လုပ္လိုက္ရင္ေတာ့ User 2 ဘက္မွာပါ Update လုပ္ျပီး Data ေတြကို ေတြ ့ရမွာပါ။
ဥပမာေလးတစ္ခုနဲ့ ႀကည့္တာေပါ့... (ဒီ Sample program က အခန္းထဲမွာ ဆရာမေပးသြားတာပါ)
ပထမဆံုး Database တစ္ခုေဆာက္လိုက္မယ္။
mysql> Create Database TRANSACTION;
ျပီးရင္ေတာ့ Database ကိုသံုးမယ္လို ့ command တစ္ခုေပးမယ္
mysql> use TRANSACTION;
Table တစ္ခုေဆာက္မယ္...
mysql> Create Table account(id integer primary key, balance integer);
Table ထဲကို Data ထည့္မယ္။
mysql> insert into account values (1001,1000),(1002,2000);
Data ေတြျပန္ႀကည့္ ႀကည့္မယ္..။
ဒါေတြကို User 1 မွာ လုပ္တယ္လို ့ထားလိုက္.. ေနာက္ထပ္ Mysql Command Prompt တစ္ခုဖြင့္မယ္။ ထံုးစံအတိုင္း root နဲ့ ၀င္လိုက္ :D ... အဲဒီ ေနာက္ထပ္ဖြင့္လိုက္တာက User 2 ေပါ့ေနာ္။ အဲဒီ User 2 ကေန TRANSACTION Database ကို use လုပ္လိုက္။
mysql> Use TRANSACTION;
အဲဒီကေနပဲ... Select * လုပ္ျပီး Table ထဲက Data ေတြကို ႀကည့္ႀကည့္။
mysql> select * from account;
ျမင္ရတယ္ေနာ္... အရင္အတိုင္းပဲ... Data ေတြဘာမွမေျပာင္းဘူးေနာ္.... ပံုနဲ့မျပေတာ့ဘူး တူတူပဲမလို့။
အခု User 1 ကို ျပန္သြားမယ္ (ပထမ Mysql Command Prompt)
Transaction method ကိုသံုးဖို ့အတြက္ အရင္ဆံုး begin နဲ့ ေခၚလိုက္မယ္။
mysql> begin;
ဘာမွေထြေထြထူးထူးမရွိဘူးေနာ္... ပံုမွန္အတိုင္း Query Ok ..... ပဲေပၚမွာ။
အခု Update လုပ္ေတာ့မယ္... User 1 ကေနေနာ္... မရွုပ္သြားနဲ့ဦး။ ;)
mysql> update account set balance = balance - 200 where id = 1001;
balance ထဲကေန 200 ကို ႏွုတ္လိုက္တာ... အဲေတာ့ balance ထဲမွာ 200 ေလ်ာ့သြားျပီေနာ္...
ဟုတ္မဟုတ္ျပန္ႀကည့္မယ္။။
Ok ေနာ္... 1001 ထဲက balance မွာ 800 ပဲရွိေတာ့တယ္....
User 2 (ဒုတိယ Mysql Command Prompt) ကို သြားလိုက္...
User 2 ကေနလဲ select * လုပ္ျပီး Data ေတြႀကည့္ႀကည့္လိုက္ ေလ်ာ့သြားလားလို ့
မေလ်ာ့ဘူးေနာ္... User 2 ဘက္မွာက Data ေတြကို Update မလုပ္ခင္က အတိုင္းပဲ ျမင္ရမယ္။ ဘာလို့လဲ ဆိုေတာ့ Commit (or) Roll Back မလုပ္ရေသးလို ့။ User 1 ဘက္ကေန Commit လုပ္ႀကည့္လိုက္မယ္။
mysql> commit;
ျပီးရင္ Select * နဲ့ ျပန္ႀကည့္ႀကည့္မယ္ (User 1 ဘက္ကေနအရင္ႀကည့္ေနာ္)
mysql> select * from account;
Date ေတြ Update ျဖစ္သြားတယ္ေနာ္... ေကာင္းျပီ.. User 2 ကေနလဲ အဲလို ႀကည့္ႀကည့္ပါဦး။
mysql> select * from account;
ေတြ ့ျပီေနာ္... User 2 ဘက္က Data ေတြပါ ခ်ိန္းသြားတယ္...။ User 2 ဘက္က Data ဆိုေပမယ့္ တကယ္က Database တစ္ခုထဲကုိ User ႏွစ္ေယာက္ ျပိဳင္သံုးတာပါ။
အခုလုပ္သြားတာက Transaction က Commit နဲ့ လုပ္ျပသြားတာပါ။
ေနာက္တစ္မ်ိဳး roll back နဲ့လုပ္ႀကည့္တာေပါ့။ Roll back ကိုေတာ့ User 2 ဘက္ကေန လုပ္ႀကည့္မယ္။ ပထမဆံုး User 2 ကေန begin ဆိုျပီး စလုပ္မယ္။
mysql>begin;
Table ထဲက id= 1002 ရဲ ့balance ကို update လုပ္မယ္။
mysql> update account set balance= balance+500 where id=1002;
table ကိုျပန္ႀကည့္ ႀကည့္မယ္။
mysql> select * from account;
ေတြ ့တယ္ေနာ္... id 1002 ရဲ ့ balance တန္ဖိုးက 2500 ျဖစ္သြားပီ။ user2 ကိုခဏထား။
user 1 ကေနျပန္ႀကည့္ႀကည့္မယ္။
mysql> select * from account;
သူ ့မွာေတာ့ balance တန္ဖိုးမေျပာင္းဘူး။ ဘာလို့လဲ ဆိုေတာ့ Transaction method အတိုင္း commit/ roll back မလုပ္ေသးလို ့ တစ္ဘက္ user မွာ update မလုပ္ေသးဘူး။ အခု Roll back လုပ္ႀကည့္မယ္။ ဘယ္မွာလုပ္ရမလဲဆိုေတာ့ user 2 မွာလုပ္ရမွာေပါ့။
mysql>rollback;
roll back လုပ္ျပီးလို ့ မွန္သြားျပီဆိုတဲ့ Query Ok ဆိုတာေပၚလာျပီဆိုရင္ ကြ်န္ေတာ္တို့ Table ကို ျပန္ႀကည့္မယ္။ user 2 ကေန အရင္ႀကည့္မယ္။
mysql> select * from account;
ေတြ ့ပါတယ္ေနာ္... Table ထဲက id 1002 ရဲ ့တန္ဖိုးက နဂိုတန္ဖိုးအတိုင္းပဲ ျပန္ျဖစ္သြားျပီ။ Update လုပ္တာကို Cancel လုပ္လိုက္တဲ့ သေဘာေပါ့။ (commit ဆိုတာကေတာ့ Update လုပ္တာကို Save လုပ္လိုက္တဲ့ သေဘာပါပဲ)
user 1 ကေန ျပန္ႀကည့္ႀကည့္ပါဦး။
mysql> select * from account;
သူလဲ ဒီတိုင္းပါပဲ... တန္ဖိုးေတြ မေျပာင္းလဲဘဲ ထြက္လာတယ္။
ဒါပါပဲ Transaction ရဲ ့သေဘာကို နားလည္မယ္ထင္ပါတယ္။
Transaction ပိုင္းက နဲနဲ ရွုပ္တာကလြဲရင္ လြယ္လြယ္ေလးပါ။ Transaction မွာ Commit နဲ့ RollBack ဆိုျပီး ႏွစ္မ်ိဳးရွိတယ္... (ေအာက္မွာ ဥပမာေတြနဲ့ နားလည္ေအာင္ ရွင္းျပထားပါတယ္)
သေဘာေျပာရရင္... Database တစ္ခုကို User ႏွစ္ေယာက္သံုးတယ္...။ User 1 က table တစ္ခုကို Create လုပ္ထားမယ္။ User 2 ကလဲ အဲဒီ Database ကို သံုးေနတယ္။ အဲဒီအခ်ိန္မွာ Transaction စတယ္။ User 1 က table ထဲက Data တစ္ခုကို Update လုပ္လိုက္တယ္။
တစ္ခ်ိန္ထဲမွာပဲ User 2 က အဲဒီ Table ကို Select * လုပ္ျပီး ႀကည့္မယ္။ User 1 က Commit/ Roll back တစ္ခုခု မလုပ္ေသးတဲ့အတြက္ User 2 ကႀကည့္ရင္ နဂို Table အတိုင္းပဲ ျမင္ရမွာပါ။ Update လုပ္လိုက္တာကိုေတာ့ User 2 က ျမင္ရမွာမဟုတ္ပါဘူး။ Commit/Roll Back တစ္ခုခု လုပ္လိုက္ရင္ေတာ့ User 2 ဘက္မွာပါ Update လုပ္ျပီး Data ေတြကို ေတြ ့ရမွာပါ။
ဥပမာေလးတစ္ခုနဲ့ ႀကည့္တာေပါ့... (ဒီ Sample program က အခန္းထဲမွာ ဆရာမေပးသြားတာပါ)
ပထမဆံုး Database တစ္ခုေဆာက္လိုက္မယ္။
mysql> Create Database TRANSACTION;
ျပီးရင္ေတာ့ Database ကိုသံုးမယ္လို ့ command တစ္ခုေပးမယ္
mysql> use TRANSACTION;
Table တစ္ခုေဆာက္မယ္...
mysql> Create Table account(id integer primary key, balance integer);
Table ထဲကို Data ထည့္မယ္။
mysql> insert into account values (1001,1000),(1002,2000);
Data ေတြျပန္ႀကည့္ ႀကည့္မယ္..။
ဒါေတြကို User 1 မွာ လုပ္တယ္လို ့ထားလိုက္.. ေနာက္ထပ္ Mysql Command Prompt တစ္ခုဖြင့္မယ္။ ထံုးစံအတိုင္း root နဲ့ ၀င္လိုက္ :D ... အဲဒီ ေနာက္ထပ္ဖြင့္လိုက္တာက User 2 ေပါ့ေနာ္။ အဲဒီ User 2 ကေန TRANSACTION Database ကို use လုပ္လိုက္။
mysql> Use TRANSACTION;
အဲဒီကေနပဲ... Select * လုပ္ျပီး Table ထဲက Data ေတြကို ႀကည့္ႀကည့္။
mysql> select * from account;
ျမင္ရတယ္ေနာ္... အရင္အတိုင္းပဲ... Data ေတြဘာမွမေျပာင္းဘူးေနာ္.... ပံုနဲ့မျပေတာ့ဘူး တူတူပဲမလို့။
အခု User 1 ကို ျပန္သြားမယ္ (ပထမ Mysql Command Prompt)
Transaction method ကိုသံုးဖို ့အတြက္ အရင္ဆံုး begin နဲ့ ေခၚလိုက္မယ္။
mysql> begin;
ဘာမွေထြေထြထူးထူးမရွိဘူးေနာ္... ပံုမွန္အတိုင္း Query Ok ..... ပဲေပၚမွာ။
အခု Update လုပ္ေတာ့မယ္... User 1 ကေနေနာ္... မရွုပ္သြားနဲ့ဦး။ ;)
mysql> update account set balance = balance - 200 where id = 1001;
balance ထဲကေန 200 ကို ႏွုတ္လိုက္တာ... အဲေတာ့ balance ထဲမွာ 200 ေလ်ာ့သြားျပီေနာ္...
ဟုတ္မဟုတ္ျပန္ႀကည့္မယ္။။
Ok ေနာ္... 1001 ထဲက balance မွာ 800 ပဲရွိေတာ့တယ္....
User 2 (ဒုတိယ Mysql Command Prompt) ကို သြားလိုက္...
User 2 ကေနလဲ select * လုပ္ျပီး Data ေတြႀကည့္ႀကည့္လိုက္ ေလ်ာ့သြားလားလို ့
မေလ်ာ့ဘူးေနာ္... User 2 ဘက္မွာက Data ေတြကို Update မလုပ္ခင္က အတိုင္းပဲ ျမင္ရမယ္။ ဘာလို့လဲ ဆိုေတာ့ Commit (or) Roll Back မလုပ္ရေသးလို ့။ User 1 ဘက္ကေန Commit လုပ္ႀကည့္လိုက္မယ္။
mysql> commit;
ျပီးရင္ Select * နဲ့ ျပန္ႀကည့္ႀကည့္မယ္ (User 1 ဘက္ကေနအရင္ႀကည့္ေနာ္)
mysql> select * from account;
Date ေတြ Update ျဖစ္သြားတယ္ေနာ္... ေကာင္းျပီ.. User 2 ကေနလဲ အဲလို ႀကည့္ႀကည့္ပါဦး။
mysql> select * from account;
ေတြ ့ျပီေနာ္... User 2 ဘက္က Data ေတြပါ ခ်ိန္းသြားတယ္...။ User 2 ဘက္က Data ဆိုေပမယ့္ တကယ္က Database တစ္ခုထဲကုိ User ႏွစ္ေယာက္ ျပိဳင္သံုးတာပါ။
အခုလုပ္သြားတာက Transaction က Commit နဲ့ လုပ္ျပသြားတာပါ။
ေနာက္တစ္မ်ိဳး roll back နဲ့လုပ္ႀကည့္တာေပါ့။ Roll back ကိုေတာ့ User 2 ဘက္ကေန လုပ္ႀကည့္မယ္။ ပထမဆံုး User 2 ကေန begin ဆိုျပီး စလုပ္မယ္။
mysql>begin;
Table ထဲက id= 1002 ရဲ ့balance ကို update လုပ္မယ္။
mysql> update account set balance= balance+500 where id=1002;
table ကိုျပန္ႀကည့္ ႀကည့္မယ္။
mysql> select * from account;
ေတြ ့တယ္ေနာ္... id 1002 ရဲ ့ balance တန္ဖိုးက 2500 ျဖစ္သြားပီ။ user2 ကိုခဏထား။
user 1 ကေနျပန္ႀကည့္ႀကည့္မယ္။
mysql> select * from account;
သူ ့မွာေတာ့ balance တန္ဖိုးမေျပာင္းဘူး။ ဘာလို့လဲ ဆိုေတာ့ Transaction method အတိုင္း commit/ roll back မလုပ္ေသးလို ့ တစ္ဘက္ user မွာ update မလုပ္ေသးဘူး။ အခု Roll back လုပ္ႀကည့္မယ္။ ဘယ္မွာလုပ္ရမလဲဆိုေတာ့ user 2 မွာလုပ္ရမွာေပါ့။
mysql>rollback;
roll back လုပ္ျပီးလို ့ မွန္သြားျပီဆိုတဲ့ Query Ok ဆိုတာေပၚလာျပီဆိုရင္ ကြ်န္ေတာ္တို့ Table ကို ျပန္ႀကည့္မယ္။ user 2 ကေန အရင္ႀကည့္မယ္။
mysql> select * from account;
ေတြ ့ပါတယ္ေနာ္... Table ထဲက id 1002 ရဲ ့တန္ဖိုးက နဂိုတန္ဖိုးအတိုင္းပဲ ျပန္ျဖစ္သြားျပီ။ Update လုပ္တာကို Cancel လုပ္လိုက္တဲ့ သေဘာေပါ့။ (commit ဆိုတာကေတာ့ Update လုပ္တာကို Save လုပ္လိုက္တဲ့ သေဘာပါပဲ)
user 1 ကေန ျပန္ႀကည့္ႀကည့္ပါဦး။
mysql> select * from account;
သူလဲ ဒီတိုင္းပါပဲ... တန္ဖိုးေတြ မေျပာင္းလဲဘဲ ထြက္လာတယ္။
ဒါပါပဲ Transaction ရဲ ့သေဘာကို နားလည္မယ္ထင္ပါတယ္။
Sunday, July 28, 2013
PHP Lesson 4 : Array
$a = array ("A", "B", "C");
Array ကို ေႀကျငာနည္းပါ။ simple program ေလးတစ္ပုဒ္ေလာက္ ေရးႀကည့္ရေအာင္။
<?php
$a = array("A","B","C");
echo $a;
var_dump($a);
print_r($a);
echo "<pre>";
var_dump($a);
echo "</pre>";
?>
ဒီ code ေတြကို စက္ထဲမွာ စမ္းႀကည့္ပါ .... Array ကို output ထုတ္သြားတဲ့ ပံုစံအမ်ိဳးမ်ိဳး ေတြ ့ရလိမ့္မယ္။
ဒီ program မွာ ကြ်န္ေတာ္တို ့weather ဆုိတဲ့ array တစ္ခုေဆာက္လိုက္တယ္။ ျပီးေတာ့မွ Array ထဲက value ေတြကို echo ဆိုျပီး ျပန္ထုတ္တယ္။ $weather[5] ဆိုတာမွာ snow.. $weather[6] မွာ wind ..။ အဲလိုေလးပါပဲ... လြယ္ပါတယ္။ တစ္ခုရွိတာက array ထဲက value ေတြကို count လုပ္တဲ့အခါမွာ $weather[0] ဆိုတာက စ count လုပ္ရတယ္။ $weather[0] က rain ဆိုတဲ့ value ကို ေခၚလိုက္တာပါ။ ခက္ခက္ခဲခဲေတာ့မရွိပါဘူး။
ပထမဆံုးအေနနဲ့ cities ဆိုတဲ့ array တစ္ခုေဆာက္ထားတယ္.. အဲဒီ ေအာက္က foreach ဆိုျပီး looping ပတ္ထားတာက Array ထဲမွာ ရွိတဲ့ value ေတြကို print လုပ္တာပါ... foreach($cities as $c) အဲဒီမွာ $c ဆိုတာက Array ထဲက value ေတြကို print out လုပ္တဲ့အခါက်ရင္ comma ခံျပီး print လုပ္တာပါ။
ျပီးေတာ့ sort ဆိုတဲ့ method သံုးျပီး array ကို sorting စီတယ္။
Array ကို ေႀကျငာနည္းပါ။ simple program ေလးတစ္ပုဒ္ေလာက္ ေရးႀကည့္ရေအာင္။
<?php
$a = array("A","B","C");
echo $a;
var_dump($a);
print_r($a);
echo "<pre>";
var_dump($a);
echo "</pre>";
?>
ဒီ code ေတြကို စက္ထဲမွာ စမ္းႀကည့္ပါ .... Array ကို output ထုတ္သြားတဲ့ ပံုစံအမ်ိဳးမ်ိဳး ေတြ ့ရလိမ့္မယ္။
Array Exercise 1
<html>
<head>
<title>Simple Array - Weather</title>
</head>
<body>
<h2>How's the weather?</h2>
<?php
$weather=array(
"rain",
"sunshine",
"clouds",
"hail",
"sleet",
"snow",
"wind"
);
echo "<p>We've seen all kinds of weather this
month. At the beginning of the month, ";
echo "we had $weather[5] and $weather[6]. Then came
$weather[1] with a few weather[2] ";
echo "and some $weather[0]. At least we didn't get
any $weather[3] or $weather[4].</p>";
?>
</body>
</html> ဒီ program မွာ ကြ်န္ေတာ္တို ့weather ဆုိတဲ့ array တစ္ခုေဆာက္လိုက္တယ္။ ျပီးေတာ့မွ Array ထဲက value ေတြကို echo ဆိုျပီး ျပန္ထုတ္တယ္။ $weather[5] ဆိုတာမွာ snow.. $weather[6] မွာ wind ..။ အဲလိုေလးပါပဲ... လြယ္ပါတယ္။ တစ္ခုရွိတာက array ထဲက value ေတြကို count လုပ္တဲ့အခါမွာ $weather[0] ဆိုတာက စ count လုပ္ရတယ္။ $weather[0] က rain ဆိုတဲ့ value ကို ေခၚလိုက္တာပါ။ ခက္ခက္ခဲခဲေတာ့မရွိပါဘူး။
Array Exercise 2
<html>
<head>
<title>Simple
Array Loop - Cities</title>
</head>
<body>
<h2>Large
Cities<br /></h2>
<?php
$cities=array(
"Tokyo",
"Mexico City",
"New York City",
"Mumbai",
"Seoul",
"Shanghai",
"Lagos",
"Buenos Aires",
"Cairo",
"London"
);
foreach($cities
as $c)
{
echo
"$c, ";
}
//Sort
array.
sort($cities);
//Print
array as bulleted list.
echo
"\n<ul>\n" ;
foreach($cities
as $c)
{
echo
"<li>$c</li>\n";
}
echo
"</ul>" ;
//Add
four cities to array.
array_push($cities,
"Los Angeles", "Calcutta", "Osaka",
"Beijing") ;
//Sort
again, and print bulleted list.
sort($cities);
echo
"\n<ul>\n";
foreach($cities
as $c)
{
echo
"<li>$c</li>\n";
}
echo
"</ul>";
?>
</body>
</html>ပထမဆံုးအေနနဲ့ cities ဆိုတဲ့ array တစ္ခုေဆာက္ထားတယ္.. အဲဒီ ေအာက္က foreach ဆိုျပီး looping ပတ္ထားတာက Array ထဲမွာ ရွိတဲ့ value ေတြကို print လုပ္တာပါ... foreach($cities as $c) အဲဒီမွာ $c ဆိုတာက Array ထဲက value ေတြကို print out လုပ္တဲ့အခါက်ရင္ comma ခံျပီး print လုပ္တာပါ။
ျပီးေတာ့ sort ဆိုတဲ့ method သံုးျပီး array ကို sorting စီတယ္။
Wednesday, July 17, 2013
လိုက္စုထား သေလာက္ Tutorial ေမးခြန္းေလးေတြ တင္ေပးမယ္ေနာ္............. အေျဖေတာ ့မေသခ်ာမွာ စိုးလို ့မတင္ေပးေသးဘူး................. ဆရာ မဆီက ရမွ တင္ေပးမယ္ေနာ္ 203 ကပို အေရးၾကီးပါတယ္ ေမးခြန္းေဟာင္းလဲ မရွိဘူး tutorial ေမးခြန္းေလးေတြ ၾကည့္ၿပီး ေမးခြန္းပံုစံနဲ ့ၾကည့္ရမွာပါ အေျဖကို ဆက္ဆက္တင္ေပးပါမယ္ေနာ္ အခု ့မေသခ်ာမွ စိုးလုိ ့ပါ ပထမႏွစ္ဝက္တုန္းက OS အေျခ အေန မေကာင္းတဲ ့သူေတြ ဆို ပိုၾကိဳးစားသင့္တယ္
Tutorial
203
1:Two sorted arrays A={7,23,39,81} and B={14,47,55,62,74,95} will be merged into an array C.Decribe the comparisons necessary to determine which element will be copied in merging operation.
2:Write the status of the list a =22,55,44,66 at the end pass at insertion sort
3:Write True or False
(a)In the selection sort,the largest keys accumulate on the left
(b)In the selection sort,items with indices less than or equal to outer are sorted
(c)In Priority queue,the front of the queue is always at the top of the array at items.
Tutorial
203
1:Two sorted arrays A={7,23,39,81} and B={14,47,55,62,74,95} will be merged into an array C.Decribe the comparisons necessary to determine which element will be copied in merging operation.
2:Write the status of the list a =22,55,44,66 at the end pass at insertion sort
3:Write True or False
(a)In the selection sort,the largest keys accumulate on the left
(b)In the selection sort,items with indices less than or equal to outer are sorted
(c)In Priority queue,the front of the queue is always at the top of the array at items.
Tuesday, July 9, 2013
1st year အတြက္ ေလ့လာစ၇ာ C++ Data Structure ebook
C
++ ေလ့လာခ်င္သူမ်ားအတြက္ ေလ့လာစရာ Data Structures Using C++ 2nd Edition DS
Malik ေနာက္ဆံုးထြက္စာအုပ္ ေတြ႕လာလို႔တင္ေပးလိုက္ပါတယ္.. Programming
သမားေတြအတြက္ အသံုးတည့္လိမ့္မယ္လို႔ ယံုၾကည္ပါတယ္.. ျမန္မာလိုေတာ့
မဟုတ္ပါဘူး.. ေအာက္မွာ ေဖၚျပထားတဲ့ Chapter ေတြကို ၾကည့္လိုက္တာနဲ႔
Programming သမားေတြအတြက္ ဘယ္လို အသံုးတည့္မယ္ဆိုတာ သိႏိုင္မွာပါ-
This book includes following chapters...
1. Software Engineering Principles and C++ Classes
2. Object-Oriented Design (OOD) and C++
3. Pointers and Array-Based Lists
4. Standard Template Library (STL) I
5. Linked Lists
6. Recursion
7. Stacks
8. Queues
9. Searching and Hashing Algorithms
10. Sorting Algorithms
11. Binary Trees and B-Trees
12. Graphs
13. Standard Template Library (STL) II
အဆင္ေျပပါေစ..
credit to - ေမာင္ေပါက္
This book includes following chapters...
1. Software Engineering Principles and C++ Classes
2. Object-Oriented Design (OOD) and C++
3. Pointers and Array-Based Lists
4. Standard Template Library (STL) I
5. Linked Lists
6. Recursion
7. Stacks
8. Queues
9. Searching and Hashing Algorithms
10. Sorting Algorithms
11. Binary Trees and B-Trees
12. Graphs
13. Standard Template Library (STL) II
အဆင္ေျပပါေစ..
credit to - ေမာင္ေပါက္
Subscribe to:
Posts (Atom)