พอจะมีวิธีเพิ่มข้อมูลลงใน Database ทีละ หลายๆเรคคอร์ดไหมครับ

เริ่มโดย ChilTunDer, 29 มกราคม 2013, 22:17:13

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

ChilTunDer

ผมจะเพิ่มข้อมูลลงในตาราง โดยแต่ละตารางจะมีจำนวนข้อมูลไม่ต่ำกว่า 2 แสน เรคคอร์ด

ไม่ทราบว่าพอจะมี script ไหนช่วยผมได้บ้างครับ

โดยข้อมูลไม่จำเป็นต้อถูกต้องครับ จะเป็นข้อมูลที่มาจากการ random ก็ได้ เช่น

id = 0000000001, name = aa01, lname a01, email = aa001

อะไรประมาณนี้ครับ

เป็น php หรืออะไรก็ได้ครับ

:wanwan031:

Railway

มันน่าจะทำได้ทีละเรคคอร์ดนะครับ แต่วนรอบเอา อยากได้กี่รอบก็วนเอา เบสิกและง่ายที่สุดแล้วครับ

Maxio

แบบนี้ได้มั้ยครับ ทีละหลาย record

INSERT INTO Table (ID,Name,Email)
    VALUES ('0001','Somchai','somchai@xxx'),
           ('0002','Thai','thai@xxx'),
           ('0003','Tong','tong555@xxx'),
           ('0004','Boon','boon69@xxx'), ...

 
แต่ผมว่า วนลูปก็ได้นะ gen id ตามจำนวนลูป name email ก็ใช้ string random เอา
หรือแบบอันบน ก็ทำเป็น string ยาวๆๆๆเลย  :wanwan004:

ChilTunDer

อ้างถึงจาก: Maxio ใน 30 มกราคม 2013, 00:15:03
แบบนี้ได้มั้ยครับ ทีละหลาย record

INSERT INTO Table (ID,Name,Email)
    VALUES ('0001','Somchai','somchai@xxx'),
           ('0002','Thai','thai@xxx'),
           ('0003','Tong','tong555@xxx'),
           ('0004','Boon','boon69@xxx'), ...

 
แต่ผมว่า วนลูปก็ได้นะ gen id ตามจำนวนลูป name email ก็ใช้ string random เอา
หรือแบบอันบน ก็ทำเป็น string ยาวๆๆๆเลย  :wanwan004:

ถ้าผมใช้ for วันนี่ ผมต้องเขียน ตรงส่วนของ Values ยังไง หรอครับ

Boyjato



Punisher

อ้างถึง
DECLARE @UCode int;
DECLARE @LCode int
DECLARE @i int
DECLARE @char varchar(255);
DECLARE @Marks varchar(255);
DECLARE @num varchar(255);

SET @Lcode = 1
SET @Ucode = 9999
SET @char = 'abcdfghjklmnpqrstvwxyz'
SET @marks='aeiou'
SET @num='123456789'
SET @i=1
WHILE @i<=200000 BEGIN
insert into test_1(code1,name1,email)
select
ROUND(((@Ucode - @Lcode -1) * RAND() + @Lcode), 0) as code,
SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@marks,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@marks) + 1, 1) + SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) as name1,
SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@marks,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@marks) + 1, 1) + SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@num,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@num) + 1, 5) + '@hotmail.com'
SET @i=@i+1
END
sql server ลองเอาไปประยุกต์ดูครับ :wanwan044:

dead13th

เว็บลงประกาศฟรี www.post2ads.net

ChilTunDer

อ้างถึงจาก: Punisher ใน 30 มกราคม 2013, 16:13:55
อ้างถึง
DECLARE @UCode int;
DECLARE @LCode int
DECLARE @i int
DECLARE @char varchar(255);
DECLARE @Marks varchar(255);
DECLARE @num varchar(255);

SET @Lcode = 1
SET @Ucode = 9999
SET @char = 'abcdfghjklmnpqrstvwxyz'
SET @marks='aeiou'
SET @num='123456789'
SET @i=1
WHILE @i<=200000 BEGIN
insert into test_1(code1,name1,email)
select
ROUND(((@Ucode - @Lcode -1) * RAND() + @Lcode), 0) as code,
SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@marks,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@marks) + 1, 1) + SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) as name1,
SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@marks,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@marks) + 1, 1) + SUBSTRING(@char,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@char) + 1, 2) + SUBSTRING(@num,ABS(CAST(CAST(NewID() AS VARBINARY) AS int)) % LEN(@num) + 1, 5) + '@hotmail.com'
SET @i=@i+1
END
sql server ลองเอาไปประยุกต์ดูครับ :wanwan044:

ขอบคุณครับ

ผมลองนำไปประยุกต์ใช้กับตัว sqlyog แต่ก็ไม่ได้อะครับ ไม่ทราบว่าต้องแก้ไขตรงส่วนไหนบ้างครับ

xvlnw.com

[direct=https://cloudhost.in.th/wordpress-hosting]ツ ⓌⓄⓇⒹⓅⓇⒺⓈⓈ ⒽⓄⓈⓉⒾⓃⒼ [/direct] :wanwan014:  :D
[direct=https://cloudhost.in.th/cloudhosting.html]Cloud Hosting[/direct] [direct=https://cloudhost.in.th/cloudvps.html]Cloud Server[/direct] [direct=https://cloudhost.in.th/vpshosting.html]Cloud VPS Hosting[/direct] [direct=https://cloudhost.in.th/windowsvps.html]Cloud Windows[/direct] Tel: 080-348-0843 LINE: ixvlnw

iLhay

อ้างถึงจาก: xvlnw.com ใน 07 กุมภาพันธ์ 2013, 01:29:19
# PHP

for($i=1; $i<=1000000;$i++){
   // SQL Insert to DB
}


อันนี้ก็ได้ทีละ 1 record ครับ

จขกท คงอยากได้ประมาณว่า parallel insert ครับ (ซึ่งมันเป็นไปไม่ได้ครับ)

เพราะว่า Database ทำงานเป็น Sequence ครับ

เพราะฉะนั้น ก็เขียนแบบ for ข้างบนนั่นแหละครับ 5555
[direct=https://bangmod.cloud/wordpress-hosting/]Wordpress Hosting

[/direct]
[direct=https://bangmod.cloud/wordpress-hosting/]Wordpress Hosting[/direct] เริ่มต้นปีละ 790 บาท NVMe SSD เร็ว 9000MB/s เร็วกว่านี้ไม่มีอีกแล้ว
[direct=https://bangmod.cloud/cloud-server]Cloud Server[/direct] เริ่มต้นเพียงเดือนละ 159 บาท พร้อมใช้ภายใน 1 นาที ผ่านระบบอัตโนมัติมีทั้ง Linux / Windows / DirectAdmin
สอบถามข้อมูลและแจ้งปัญหา 02-105-4417 ตลอด 24 ชั่วโมง

ChilTunDer

อ้างถึงจาก: iLhay ใน 07 กุมภาพันธ์ 2013, 01:47:58
อ้างถึงจาก: xvlnw.com ใน 07 กุมภาพันธ์ 2013, 01:29:19
# PHP

for($i=1; $i<=1000000;$i++){
   // SQL Insert to DB
}


อันนี้ก็ได้ทีละ 1 record ครับ

จขกท คงอยากได้ประมาณว่า parallel insert ครับ (ซึ่งมันเป็นไปไม่ได้ครับ)

เพราะว่า Database ทำงานเป็น Sequence ครับ

เพราะฉะนั้น ก็เขียนแบบ for ข้างบนนั่นแหละครับ 5555

ถ้าทำแบบนี้มันจะเพิ่มข้อมูลได้ด้วยหรอครับ แล้วข้อมูลที่ถูกเพิ่มจะไม่ซ้ำกันหรอครับ.

ใฃ่แบบนี้ไหมครับ

<?php
$con = mysql_connect("localhost","root","admin");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

for($i=1; $i<=1000000;$i++){
mysql_query("INSERT INTO Member(ID, Fname, Lname)
VALUES (23652145, 'ณัฐพล','ดีใจจริง')");
}

mysql_close($con);
?>

ถ้าแบบนี้มันก็เพิ่มได้แค่อันเดียวสิครับ เพราะมันติด PK ซ้ำกัน

gubaaball

อ้างถึงจาก: ChilTunDer ใน 07 กุมภาพันธ์ 2013, 09:01:40
อ้างถึงจาก: iLhay ใน 07 กุมภาพันธ์ 2013, 01:47:58
อ้างถึงจาก: xvlnw.com ใน 07 กุมภาพันธ์ 2013, 01:29:19
# PHP

for($i=1; $i<=1000000;$i++){
   // SQL Insert to DB
}


อันนี้ก็ได้ทีละ 1 record ครับ

จขกท คงอยากได้ประมาณว่า parallel insert ครับ (ซึ่งมันเป็นไปไม่ได้ครับ)

เพราะว่า Database ทำงานเป็น Sequence ครับ

เพราะฉะนั้น ก็เขียนแบบ for ข้างบนนั่นแหละครับ 5555

ถ้าทำแบบนี้มันจะเพิ่มข้อมูลได้ด้วยหรอครับ แล้วข้อมูลที่ถูกเพิ่มจะไม่ซ้ำกันหรอครับ.

ใฃ่แบบนี้ไหมครับ

<?php
$con = mysql_connect("localhost","root","admin");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

for($i=1; $i<=1000000;$i++){
mysql_query("INSERT INTO Member(ID, Fname, Lname)
VALUES (23652145, 'ณัฐพล','ดีใจจริง')");
}

mysql_close($con);
?>

ถ้าแบบนี้มันก็เพิ่มได้แค่อันเดียวสิครับ เพราะมันติด PK ซ้ำกัน

ทำอย่างนี้แหละครับ คือให้มันทีละเร็คคอร์ด ส่วนข้อมูลในการ insert ก็ดึงมาจากตัวแปรที่เก็บชุดข้อมูลครับ เช่นสุ่มชุดข้อมูลขึ้นมาโดยใช้คำสั่ง rand ให้ได้ชุดข้อมูลสัก 100000 ข้อมูลขึ้นมาก่อนอาจจะใช้ - คั่นทีละชุดข้อมูล แล้วใช้ explode แยกข้อมูลออกมาเก็บเป็น array เราก็จะได้ array 100000 ตัวขึ้นมา แล้วนับจำนวน array ในชุดข้อมูลนั้นแล้วก็ใช้ for วนลูปการทำงานตามเงื่อนไข แค่นั้นแหละครับ ผมอธิบายงงหรือป่าว ผิดพลาดก็ขออภัยด้วยคับ

iLhay

อ้างถึงจาก: ChilTunDer ใน 07 กุมภาพันธ์ 2013, 09:01:40

ถ้าทำแบบนี้มันจะเพิ่มข้อมูลได้ด้วยหรอครับ แล้วข้อมูลที่ถูกเพิ่มจะไม่ซ้ำกันหรอครับ.

ใฃ่แบบนี้ไหมครับ

<?php
$con = mysql_connect("localhost","root","admin");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

for($i=1; $i<=1000000;$i++){
mysql_query("INSERT INTO Member(ID, Fname, Lname)
VALUES (23652145, 'ณัฐพล','ดีใจจริง')");
}

mysql_close($con);
?>

ถ้าแบบนี้มันก็เพิ่มได้แค่อันเดียวสิครับ เพราะมันติด PK ซ้ำกัน

PK ก็ทำเป็น AUTO INCREMENT สิครับ

หรือถ้าไม่ AUTO INCREMENT แบบนี้ก็ได้นี่ครับ

<?php
$con = mysql_connect("localhost","root","admin");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("test", $con);

$memId = "0";
$fname = "THAISEO";
$lname = "BOARD"

for($i=1; $i<=1000000;$i++){
$memId = i;
$fname = $fname . $memId;
$lname = $lname . $memId;
mysql_query("INSERT INTO Member(ID, Fname, Lname)
VALUES ($memId, $fname, $lname )");
}

mysql_close($con);
?>

ผมไม่แม่น Syntax PHP นะ แต่ถ้าทำตามที่ผมโพสท์ไป ยังไงก็ใส่ได้ เพราะผมยังเขียน Java ใส่ข้อมูลเล่นๆลงใน DB เวลาเทสสคิปอยู่เลย

ปล. ถ้า syntax ผิด ก็ ไปแก้ syntax ให้ถูกเอาเองนะครับ
[direct=https://bangmod.cloud/wordpress-hosting/]Wordpress Hosting

[/direct]
[direct=https://bangmod.cloud/wordpress-hosting/]Wordpress Hosting[/direct] เริ่มต้นปีละ 790 บาท NVMe SSD เร็ว 9000MB/s เร็วกว่านี้ไม่มีอีกแล้ว
[direct=https://bangmod.cloud/cloud-server]Cloud Server[/direct] เริ่มต้นเพียงเดือนละ 159 บาท พร้อมใช้ภายใน 1 นาที ผ่านระบบอัตโนมัติมีทั้ง Linux / Windows / DirectAdmin
สอบถามข้อมูลและแจ้งปัญหา 02-105-4417 ตลอด 24 ชั่วโมง