Php meetup-nop2015
-
Upload
daud-mukadar -
Category
Technology
-
view
361 -
download
0
Transcript of Php meetup-nop2015
PHP Malang UG Meet Up, Nopember 2015
by Daud Mukadar@dmukadar
Tips & Trik MySQL
$ whoami
• SLUG-er
• KLAS-er
• MPUG-er
• Accidental linux user• Once an employee
• Freelance consultant
Daud Mukadar• Been using PHP when GLOBAL VARIABLE
was the thing• Love to solve problems• Like to write queries• Like to learn new things• Currently bootstraping: Tunas Mandiri IT
Solution
• Other Trick– Understanding join
– Partitioning– Tree structure
• Prepare Data
• Simple tips– forgot password– Que on FK– Serial as PK
– On Select– HEAP!
On Menu Tonight
• Mockaroo.com
• GenerateData.com
• DummyData.me
• DatabaseTestData.com
Prepare Data
• Stop MySQL$ sudo service mysqld stop #or sudo /etc/init.d/mysqld stop
• Re-run it without ACL functionality$ sudo mysqld_safe skipgranttables
• Hack a new password$ mysql u root
mysql> use mysql;
mysql> update user set password = PASSWORD('obladi') where user = 'root'
• Flush itmysql> flush privileges;
• Restart$ sudo kill `pidof mysqld_safe`
$ sudo service mysql start
ST: What's the password dude?
• Should you use it?• joining int with int
959 rows in set (0.10 sec)
• Joining int with tiny int119 rows in set (0.03 sec)
• Joining int with unsigned int959 rows in set (0.05 sec)
• Joining int with varchar959 rows in set (0.06 sec)
• Joining varchar with varcharEmpty set (1.11 sec)
ST: on Foreign Key
• Using serialmysql> CREATE TABLE tbl_users (
id SERIAL,
username VARCHAR(40) UNIQUE,
passwd VARCHAR(32) NOT NULL,
last_login TIMESTAMP NOT NULL,
last_ip_address INT(11) UNSIGNED,
created TIMESTAMP,
created_by INT(11),
updated TIMESTAMP,
updated_by INT(11)
) engine=InnoDB;
• Resultmysql> desc tbl_users;
• +++++++
• | Field | Type | Null | Key | Default | Extra |
• +++++++
• | id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
• | username | varchar(40) | YES | UNI | NULL | |
• | passwd | varchar(32) | NO | | NULL | |
• | last_login | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
• | last_ip_address | int(11) unsigned | YES | | NULL | |
• | created | timestamp | NO | | 00000000 00:00:00 | |
• | created_by | int(11) | YES | | NULL | |
• | updated | timestamp | NO | | 00000000 00:00:00 | |
• | updated_by | int(11) | YES | | NULL | |
• +++++++
• 9 rows in set (0.03 sec)
•
ST: Primary Key
• Asterisk or Notmysql> select * from tbl_nilai where id_mhs = 958;
++++++++
| id | id_mhs | mata_kuliah | semester | nilai | updated | guid |
++++++++
| 464 | 958 | Ilmu ekonomi | 3 | 94.78 | 20151001 | 7f5aeb02ca5d41d4a51351fe11c5bea6 |
| 529 | 958 | Fraud Examination | 8 | 57.75 | 20151026 | 4fc65837bd75424b9f68b04903960f1e |
| 1113 | 958 | Matematika Ekonomi | 3 | 70.39 | 20151004 | 00be5fdcc28b4c0a9bf0c3d39b2984f9 |
| 1672 | 958 | Ekonomi 2 | 4 | 66.49 | 20151003 | 5bb0f205d7464e60b3c30cb58075d656 |
| 2169 | 958 | Manajemen Sumber Daya Manusia | 1 | 34.91 | 20151008 | c0d11e1c62044a469ef6baecddda2ab1 |
| 2172 | 958 | Manajemen Distribusi Ritel | 6 | 45.33 | 20151018 | e7c1a632d9e04655bb4a329a348d75c5 |
| 2193 | 958 | Studi Kelayakan Bisnis | 13 | 59.61 | 20151030 | 116ff35d6cd048cbb30732731b3c67a6 |
| 2270 | 958 | Studi Kelayakan Bisnis | 13 | 62.62 | 20151003 | edacb7d025db4dfd81244bd8fd5ffb5c |
| 2668 | 958 | Evaluasi Kinerja | 12 | 82.41 | 20151006 | a465c348966e42deb14a36e635301e2a |
| 2715 | 958 | Perilaku Organisasi | 15 | 67.66 | 20151019 | f05681070486408ebef37cacf9663b0c |
++++++++
10 rows in set (0.02 sec)
mysql> select id, id_mhs, mata_kuliah, semester, nilai, updated, guid from tbl_nilai where id_mhs = 74;
++++++++
| id | id_mhs | mata_kuliah | semester | nilai | updated | guid |
++++++++
| 879 | 74 | Manajemen Kompensasi | 10 | 97.98 | 20151013 | b8f9903f989d464bbca17d8f689147b2 |
| 890 | 74 | Manajemen Produk & Harga | 9 | 49.50 | 20151018 | 9b036b96888b4e62a158d33ac2f3f4ba |
| 1247 | 74 | Audit 1 | 9 | 81.01 | 20151005 | c1e89f6c28e24b8a8fc2dbeca5e1ba0d |
| 1695 | 74 | Manajemen Produk dan Harga | 8 | 39.17 | 20151006 | 5e14640f1ac64addb9caad1f17293dab |
| 1720 | 74 | Akuntansi Manajemen | 16 | 93.00 | 20151023 | 198f3e12ae6448fa967a8ffcc9b01338 |
| 1884 | 74 | Bahasa Inggris | 3 | 6.96 | 20151024 | 486e42a585f14a0b96b16997ce705293 |
| 2475 | 74 | Pengantar Manajemen | 7 | 28.31 | 20151029 | a007b6f1e9124d94963c05094adc4c5a |
| 2611 | 74 | Audit 1 | 3 | 55.46 | 20151015 | a3613465596745d7a6a3748915a391f6 |
| 2921 | 74 | Ekonomi 2 | 8 | 10.14 | 20151009 | d4826e5801744922968216ea46065923 |
| 2957 | 74 | Bahasa Inggris | 9 | 26.33 | 20151026 | 84bc611d10dc41aa829767ff29e7ae0e |
++++++++
10 rows in set (0.02 sec)
•
•
ST: On Select
• Limiting to 1mysql> select * from tbl_nilai where id_mhs = 435;
++++++++
| id | id_mhs | mata_kuliah | semester | nilai | updated | guid |
++++++++
| 30 | 435 | Ekonomi 2 | 11 | 58.40 | 20151012 | 4ef8a9db5dde431e99cd493bacaeb342 |
++++++++
1 row in set (0.02 sec)
mysql> select * from tbl_nilai where id_mhs = 555 limit 1;
++++++++
| id | id_mhs | mata_kuliah | semester | nilai | updated | guid |
++++++++
| 674 | 555 | Ekonomi Makro | 11 | 61.29 | 20151022 | df79768cb385475fb25c885a489c62fc |
++++++++
1 row in set (0.01 sec)
ST: On Select
• MySQL DB Engine• Storing temporary non essential value with heapmysql> CREATE TABLE login_tracker(
user_id INT(11) NOT NULL,
login_time TIMESTAMP,
last_activity TIMESTAMP
) engine=memory;
mysql> INSERT INTO login_tracker(5, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
• Heap Limitation:– Index usage: not optimal, limited conditional operator, can not be
ordered– No support auto increment– Not for text or blob
ST: HEAP TO THE RESCUE
UNDERSTANDING JOIN
• AsumsiTABLE_A TABLE_B
id name id name
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
• Inner Join on A.name = B.nameid name id name
1 Pirate 2 Pirate
3 Ninja 4 Ninja
UNDERSTANDING JOIN
• AsumsiTABLE_A TABLE_B
id name id name
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
• Full Outer Join on A.name = B.nameid name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
null null 1 Rutabaga
null null 3 Darth Vader
–
UNDERSTANDING JOIN
• AsumsiTABLE_A TABLE_B
id name id name
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
• Left Outer Join on A.name=B.nameid name id name
1 Pirate 2 Pirate
2 Monkey null null
3 Ninja 4 Ninja
4 Spaghetti null null
–
UNDERSTANDING JOIN
• AsumsiTABLE_A TABLE_B
id name id name
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
• How ?id name id name
2 Monkey null null
4 Spaghetti null null
–
UNDERSTANDING JOIN
• AsumsiTABLE_A TABLE_B
id name id name
1 Pirate 1 Rutabaga
2 Monkey 2 Pirate
3 Ninja 3 Darth Vader
4 Spaghetti 4 Ninja
• How ?id name id name
2 Monkey null null
4 Spaghetti null null
–
Partitioning
• Check Pluginmysql> show plugins;
++++++
| Name | Status | Type | Library | License |
++++++
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL |
| CSV | ACTIVE | STORAGE ENGINE | NULL | GPL |
| FEDERATED | DISABLED | STORAGE ENGINE | NULL | GPL |
| MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL |
| InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
| MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL |
++++++
10 rows in set (0.02 sec)
• Buat PartisiCREATE TABLE tbl_patient (
ssn VARCHAR(35),
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(25) NOT NULL,
title VARCHAR(16) NOT NULL,
dob DATE,
registered DATE NOT NULL
)
PARTITION BY RANGE( YEAR(registered) ) (
PARTITION p0 VALUES LESS THAN (1985),
PARTITION p1 VALUES LESS THAN (1995),
PARTITION p2 VALUES LESS THAN (2005),
PARTITION p3 VALUES LESS THAN (2010),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
•
Tree Structure
• Adjency Listmysql> CREATE TABLE category(
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
parent INT DEFAULT NULL
);
Mysql> SELECT * FROM category ORDER BY category_id;
++++
| category_id | name | parent |
++++
| 1 | ELECTRONICS | NULL |
| 2 | TELEVISIONS | 1 |
| 3 | TUBE | 2 |
| 4 | LCD | 2 |
| 5 | PLASMA | 2 |
| 6 | PORTABLE ELECTRONICS | 1 |
| 7 | MP3 PLAYERS | 6 |
| 8 | FLASH | 7 |
| 9 | CD PLAYERS | 6 |
| 10 | 2 WAY RADIOS | 6 |
++++
10 rows in set (0.00 sec)
Tree Structure
• Nested Listmysql> CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
Mysql> SELECT * FROM category ORDER BY category_id;
+++++
| category_id | name | lft | rgt |
+++++
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+++++
Tree Structure
• Nested Listmysql> CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
Mysql> SELECT * FROM category ORDER BY category_id;
+++++
| category_id | name | lft | rgt |
+++++
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+++++
Tree Structure
• Nested Listmysql> CREATE TABLE nested_category (
category_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
lft INT NOT NULL,
rgt INT NOT NULL
);
Mysql> SELECT * FROM category ORDER BY category_id;
+++++
| category_id | name | lft | rgt |
+++++
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+++++