[PHPUGPH] PHP Roadshow - MySQL

2,812 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,812
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

[PHPUGPH] PHP Roadshow - MySQL

  1. 1. MySQL Database Essentials Cherrie Ann B. Domingo, CCNA Software Engineer, Accenture President, PHP User Group Philippines (PHPUGPH) Acting Secretary/Treasurer, Philippine SQL Server Users Group (PHISSUG)
  2. 2. Objectives for the Session <ul><li>Understand relational database concepts </li></ul><ul><li>Introduce MySQL RDBMS </li></ul><ul><li>Retrieve row and column data from tables with the SELECT statement </li></ul><ul><li>Use DML statements – INSERT, UPDATE, DELETE </li></ul><ul><li>Control database transactions using COMMIT and ROLLBACK statements </li></ul>
  3. 3. Historical Roots of Databases <ul><li>First applications focused on clerical tasks: order/entry processing, payroll, work scheduling and so on. </li></ul><ul><li>Small organizations keep track of their files using a manual file system (folders, filing cabinets whose contents were logically related) </li></ul><ul><li>As organizations grew and reporting requirements became more complex, keeping track of data in a manual file system became more difficult. </li></ul><ul><li>DP (data processing) Specialists were hired to computerize the manual file systems </li></ul>
  4. 4. Disadvantages of File Systems <ul><li>Data redundancy and inconsistency </li></ul><ul><li>Difficulty in accessing data </li></ul><ul><li>Data isolation </li></ul><ul><li>Concurrent access anomalies </li></ul><ul><li>Security problems </li></ul>
  5. 5. Database Management Systems vs. File Systems
  6. 6. Database Systems Terms <ul><li>Database - a collection of related data </li></ul><ul><li>Instance - a collection of information stored in a database at a given point in time </li></ul><ul><li>Schema - over-all design of a database </li></ul>
  7. 7. Database Management System (DBMS) <ul><li>consists of a collection of interrelated data and a collection of programs used to access the data </li></ul><ul><li>introduced to address the data-dependency problem and at the same time remove unnecessary burdens from the application programmer </li></ul><ul><li>Primary goal of a DBMS is to provide a convenient and efficient environment for retrieving and storing information </li></ul>
  8. 8. Functions of DBMS <ul><li>Data definition </li></ul><ul><ul><li>must be able to accept data definitions (internal, external, conceptual schemas and all associated mappings) in source form and convert to the appropriate object form (DDL) </li></ul></ul><ul><li>Data Manipulation </li></ul><ul><ul><li>must be able to handle requests from the user to retrieve and possibly update existing data in the database or to add new data to the database (DML) </li></ul></ul><ul><li>Data Security and Integrity </li></ul><ul><ul><li>must be able to monitor user requests and reject any attempts to violate the security and integrity checks defined by the DBA </li></ul></ul>
  9. 9. Functions of DBMS <ul><li>Data Recovery and Concurrency </li></ul><ul><ul><li>must have the capability to recover from or minimize the effects of a system crash </li></ul></ul><ul><li>Data dictionary management </li></ul><ul><ul><li>must provide a system database called database dictionary. It contains metadata (data about data) or the definition of other objects in the system </li></ul></ul>
  10. 10. Advantages of DBMS <ul><li>Reduced data redundancy </li></ul><ul><ul><li>can be avoided by keeping a single copy of the data </li></ul></ul><ul><li>Data Integrity </li></ul><ul><ul><li>since there is only one copy of a particular data, it is certain that the changes to the data will be reflected in all future uses of that data </li></ul></ul><ul><li>Data independence </li></ul><ul><ul><li>structure of the database system requires that data be independent of other data in the database and the software used to access the database </li></ul></ul><ul><li>Data Security </li></ul><ul><ul><li>different access levels to different users </li></ul></ul>
  11. 11. Advantages of DBMS <ul><li>Data Consistency </li></ul><ul><ul><li>format (name and size) of data being stored </li></ul></ul><ul><li>Easier use of data </li></ul><ul><ul><li>a database system provides a user-friendly query language as part of the package </li></ul></ul><ul><li>Less storage </li></ul><ul><ul><li>since data redundancy is reduced if not eliminated, the database will occupy less storage space </li></ul></ul>
  12. 12. Disadvantages of DBMS <ul><li>Complex </li></ul><ul><ul><li>require special skills to implement and use </li></ul></ul><ul><li>Expensive </li></ul><ul><ul><li>since it is complex, it will require additional training to those who will make use of the system. Also, the design and implementation is not cheap </li></ul></ul><ul><li>Vulnerable </li></ul><ul><ul><li>since all data are stored in one central location, it is vulnerable to partial or complete destruction when a breakdown of hardware components occur </li></ul></ul><ul><li>Incompatibility with other database systems </li></ul><ul><ul><li>files created in one product are not easily transferred to another database product </li></ul></ul>
  13. 13. <ul><li>Vulnerable </li></ul><ul><ul><li>since all data are stored in one central location, it is vulnerable to partial or complete destruction when a breakdown of hardware components occur </li></ul></ul><ul><li>Incompatibility with other database systems </li></ul><ul><ul><li>files created in one product are not easily transferred to another database product </li></ul></ul>Disadvantages of DBMS
  14. 14. <ul><li>a popular open source RDBMS </li></ul><ul><li>source code is available under terms of the GNU General Public License, as well as under a variety of proprietary agreements </li></ul><ul><li>owned and sponsored by a single for-profit firm, the Swedish company MySQL AB, now a subsidiary of Sun Microsystems, which holds the copyright to most of the codebase </li></ul><ul><li>commonly used by free software projects which require a full-featured database management system, such as WordPress, phpBB and other software built on the LAMP software stack </li></ul><ul><li>also used in very high-scale World Wide Web products including Google and Facebook </li></ul>
  15. 15. <ul><li>open source tool written in PHP intended to handle the administration of MySQL over the World Wide Web </li></ul><ul><li>can perform various tasks such as: </li></ul><ul><ul><li>creating, modifying or deleting databases, tables, fields or rows </li></ul></ul><ul><ul><li>executing SQL statements; or managing users and permissions. </li></ul></ul>
  16. 16. <ul><li>ANSI standard for accessing database systems </li></ul><ul><li>used to retrieve, insert, update and delete records from a database </li></ul><ul><li>Works with database programs like MS Access, DB2, Informix, SQL Server, Oracle, Sybase, etc. </li></ul>SQL (Structured Query Language)
  17. 17. SQL (Structured Query Language) <ul><li>ANSI standard for accessing database systems </li></ul><ul><li>used to retrieve, insert, update and delete records from a database </li></ul><ul><li>Works with database programs like MS Access, DB2, Informix, SQL Server, Oracle, Sybase, etc. </li></ul>
  18. 18. SQL <ul><li>Data Manipulation Language (DML) </li></ul><ul><ul><li>Select </li></ul></ul><ul><ul><li>Update </li></ul></ul><ul><ul><li>Delete </li></ul></ul><ul><ul><li>Insert into </li></ul></ul><ul><li>Data Definition Language (DDL) </li></ul><ul><ul><li>Create table </li></ul></ul><ul><ul><li>Alter table </li></ul></ul><ul><ul><li>Drop table </li></ul></ul><ul><ul><li>Create index </li></ul></ul><ul><ul><li>Drop index </li></ul></ul>
  19. 19. SQL <ul><li>Data Control Language (DCL) </li></ul><ul><ul><li>Rollback </li></ul></ul><ul><ul><li>Commit </li></ul></ul>
  20. 20. Capabilities of SELECT Statement <ul><li>Selection - choose rows in a table that should be returned by a query </li></ul><ul><li>Projection - choose columns in a table that should be returned by a query </li></ul><ul><li>Join - bring together data stored in different tables by creating a link through a column that both tables share </li></ul>
  21. 21. Capabilities of SELECT Statement Selection Projection Table 1 Table 2 Table 1 Table 1 Join
  22. 22. SELECT Syntax <ul><li>SELECT * | column_name(s) </li></ul><ul><li>FROM table_name; </li></ul><ul><li>SELECT identifies the columns to be displayed </li></ul><ul><li>FROM identifies the table containing those columns. </li></ul>
  23. 23. Column Alias <ul><ul><li>Renames a column heading </li></ul></ul><ul><ul><li>Is useful with calculations </li></ul></ul><ul><ul><li>Immediately follows the column name (There can also be the optional AS keyword between the column name and alias.) </li></ul></ul><ul><ul><li>Requires double quotation marks if it contains spaces or special characters or if it is case sensitive </li></ul></ul><ul><li>SELECT column_name column_alias </li></ul><ul><li>FROM table_name; </li></ul><ul><li>SELECT column_name AS column_alias </li></ul><ul><li>FROM table_name; </li></ul>*A multiple word heading can be specified by putting it in quotes
  24. 24. Arithmetic Operators <ul><ul><li>+ Addition </li></ul></ul><ul><ul><li>- Subtraction </li></ul></ul><ul><ul><li>/ Division </li></ul></ul><ul><ul><li>* Multiplication </li></ul></ul><ul><ul><li>% Modulo </li></ul></ul>SELECT ProductID, ProductName, UnitPrice * 10 FROM Products
  25. 25. Operator Precedence <ul><li>* / % </li></ul><ul><li>+ - </li></ul>Parentheses are used to force prioritized evaluation and to clarify statements SELECT ProductName, UnitPrice*UnitsInStock+12 FROM Products
  26. 26. Defining a NULL value <ul><li>A null is a value that is unavailable, unassigned, unknown value or inapplicable </li></ul><ul><li>A null is not the same as a zero or blank space </li></ul>
  27. 27. Null Values in Arithmetic Expressions <ul><li>Arithmetic expressions containing a null value evaluate to null. </li></ul>
  28. 28. Duplicate Rows <ul><li>The default display of queries is all rows, including duplicate rows </li></ul><ul><li>To eliminate duplicate values, use DISTINCT keyword </li></ul><ul><li>SELECT DISTINCT department_id </li></ul><ul><li>FROM employees; </li></ul>
  29. 29. Displaying Table Structure <ul><li>DESCRIBE | DESC - used to display table structure </li></ul><ul><li>Syntax: </li></ul><ul><li>DESC[RIBE] tablename </li></ul><ul><li>DESCRIBE employees </li></ul>
  30. 30. Limiting rows that are selected <ul><li>Restrict the rows that are returned by using the WHERE clause </li></ul><ul><li>SELECT *|{[DISTINCT] column|expression [ alias ],...} </li></ul><ul><li>FROM table </li></ul><ul><li>[WHERE condition(s) ]; </li></ul><ul><ul><li>The WHERE clause follows the FROM clause. </li></ul></ul>SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;
  31. 31. Character Strings and Dates <ul><li>Character strings and date values are enclosed in single quotation marks. </li></ul><ul><li>Character values are case sensitive, and date values are format sensitive. </li></ul><ul><li>The default date format is YYYY-MM-DD . </li></ul>SELECT last_name, job_id, department_id FROM employees WHERE last_name = 'Whalen' ;
  32. 32. Comparison Condition Operator Meaning <ul><ul><li>= </li></ul></ul>Equal to <ul><ul><li>> </li></ul></ul>Greater than >= Greater than or equal to <ul><ul><li>< </li></ul></ul>Less than <ul><ul><li><= </li></ul></ul>Less than or equal to <ul><ul><li><> </li></ul></ul>Not equal to BETWEEN ...AND... Between two values (inclusive) IN(set) Match any of a list of values LIKE Match a character pattern IS NULL Is a null value
  33. 33. Using Comparison Conditions SELECT last_name, salary FROM employees WHERE salary <= 3000 ;
  34. 34. BETWEEN condition <ul><li>Used to display rows based on a range of values </li></ul>SELECT last_name, salary FROM employees WHERE salary BETWEEN 2500 AND 3500 ; Lower limit Upper limit
  35. 35. IN condition <ul><li>test for values in a list </li></ul>SELECT employee_id, last_name, salary, manager_id FROM employees WHERE manager_id IN (100, 101, 201) ;
  36. 36. LIKE condition <ul><ul><li>Use the LIKE condition to perform wildcard searches of valid search string values. </li></ul></ul><ul><ul><li>Search conditions can contain either literal characters or numbers: </li></ul></ul><ul><ul><ul><li>% denotes zero or many characters. </li></ul></ul></ul><ul><ul><ul><li>_ denotes one character. </li></ul></ul></ul>SELECT first_name FROM employees WHERE first_name LIKE 'S%' ;
  37. 37. LIKE condition <ul><ul><li>You can combine pattern-matching characters: </li></ul></ul><ul><ul><li>You can use the ESCAPE identifier to search for the actual % and _ symbols. </li></ul></ul>SELECT last_name FROM employees WHERE last_name LIKE '_o%' ;
  38. 38. NULL Conditions <ul><li>Test for nulls with the IS NULL operator </li></ul>SELECT last_name, manager_id FROM employees WHERE manager_id IS NULL ;
  39. 39. LOGICAL Conditions Operator Meaning <ul><ul><li>AND </li></ul></ul>Returns TRUE if both component conditions are true <ul><ul><li>OR </li></ul></ul>Returns TRUE if either component condition is true NOT Returns TRUE if the following condition is false
  40. 40. Sorting using ORDER BY <ul><li>Sort retrieved rows with the ORDER BY clause </li></ul><ul><ul><ul><li>ASC : ascending order, default </li></ul></ul></ul><ul><ul><ul><li>DESC : descending order </li></ul></ul></ul><ul><ul><li>The ORDER BY clause comes last in the SELECT statement: </li></ul></ul>
  41. 41. Obtaining Data from Multiple Tables EMPLOYEES DEPARTMENTS … …
  42. 42. Types of Joins <ul><li>Joins that are compliant with the SQL:1999 standard include the following: </li></ul><ul><ul><li>Cross joins </li></ul></ul><ul><ul><li>Full (or two-sided) outer joins </li></ul></ul><ul><ul><li>Arbitrary join conditions for outer joins </li></ul></ul>
  43. 43. JOIN <ul><li>Used to display data from multiple tables </li></ul>Foreign key Primary key EMPLOYEES DEPARTMENTS … …
  44. 44. Qualifying Ambiguous Column Names <ul><ul><li>Use table prefixes to qualify column names that are in multiple tables. </li></ul></ul><ul><ul><li>Use table prefixes to improve performance. </li></ul></ul><ul><ul><li>Use column aliases to distinguish columns that have identical names but reside in different tables. </li></ul></ul>
  45. 45. Using Table Aliases <ul><ul><li>Use table aliases to simplify queries. </li></ul></ul><ul><ul><li>Use table aliases to improve performance. </li></ul></ul>
  46. 46. Retrieving Records with the ON Clause SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id);
  47. 47. Self-Joins Using the ON Clause MANAGER_ID in the WORKER table is equal to EMPLOYEE_ID in the MANAGER table. EMPLOYEES (WORKER) EMPLOYEES (MANAGER) …
  48. 48. Self-Joins Using the ON Clause SELECT e.last_name emp, m.last_name mgr FROM employees e JOIN employees m ON (e.manager_id = m.employee_id); …
  49. 49. Creating Three-Way Joins with the ON Clause SELECT employee_id, city, department_name FROM employees e JOIN departments d ON d.department_id = e.department_id JOIN locations l ON d.location_id = l.location_id;
  50. 50. Inner JOIN <ul><li>Inner Join - the typical join operation which uses some comparison operator like = or <>). These include equi-joins and natural joins. </li></ul>
  51. 51. Outer JOIN <ul><li>can be a left or a right outer join </li></ul><ul><li>specified with one of the following sets of keywords when they are specified in the FROM clause </li></ul>DEPARTMENTS EMPLOYEES There are no employees in department 190. …
  52. 52. INNER Versus OUTER Joins <ul><ul><li>In SQL:1999, the join of two tables returning only matched rows is called an inner join. </li></ul></ul><ul><ul><li>A join between two tables that returns the results of the inner join as well as the unmatched rows from the left (or right) tables is called a left (or right) outer join. </li></ul></ul><ul><ul><li>A join between two tables that returns the results of an inner join as well as the results of a left and right join is a full outer join. </li></ul></ul>
  53. 53. LEFT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ; …
  54. 54. RIGHT OUTER JOIN SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ; …
  55. 55. FULL OUTER JOIN SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ; …
  56. 56. Cartesian Products <ul><ul><li>A Cartesian product is formed when: </li></ul></ul><ul><ul><ul><li>A join condition is omitted </li></ul></ul></ul><ul><ul><ul><li>A join condition is invalid </li></ul></ul></ul><ul><ul><ul><li>All rows in the first table are joined to all rows in the second table </li></ul></ul></ul><ul><ul><li>To avoid a Cartesian product, always include a valid join condition. </li></ul></ul>
  57. 57. Generating a Cartesian Product Cartesian product: 20 x 8 = 160 rows EMPLOYEES (20 rows) DEPARTMENTS (8 rows) … …
  58. 58. Creating CROSS JOIN <ul><ul><li>The CROSS JOIN clause produces the cross-product of two tables. </li></ul></ul><ul><ul><li>This is also called a Cartesian product between the two tables. </li></ul></ul>SELECT last_name, department_name FROM employees CROSS JOIN departments ; …
  59. 59. Adding a New Row to a Table DEPARTMENTS New row Insert new row into the DEPARTMENTS table
  60. 60. INSERT statement <ul><ul><li>Add new rows to a table by using the INSERT statement: </li></ul></ul><ul><ul><li>With this syntax, only one row is inserted at a time. </li></ul></ul>INSERT INTO table [( column [ , column... ])] VALUES (value [ , value... ]);
  61. 61. Inserting New Rows <ul><ul><li>Insert a new row containing values for each column. </li></ul></ul><ul><ul><li>List values in the default order of the columns in the table. </li></ul></ul><ul><ul><li>Optionally, list the columns in the INSERT clause. </li></ul></ul><ul><ul><li>Enclose character and date values in single quotation marks. </li></ul></ul>INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700); 1 row created.
  62. 62. UPDATE Statement Syntax <ul><ul><li>Modify existing rows with the UPDATE statement: </li></ul></ul><ul><ul><li>Update more than one row at a time (if required). </li></ul></ul>UPDATE table SET column = value [, column = value, ... ] [WHERE condition ];
  63. 63. Updating Rows in a Table <ul><ul><li>Specific row or rows are modified if you specify the WHERE clause: </li></ul></ul><ul><ul><li>All rows in the table are modified if you omit the WHERE clause: </li></ul></ul>UPDATE employees SET department_id = 70 WHERE employee_id = 113; 1 row updated. UPDATE copy_emp SET department_id = 110; 22 rows updated.
  64. 64. Removing a Row from a Table Delete a row from the DEPARTMENTS table: DEPARTMENTS
  65. 65. DELETE Statement <ul><li>You can remove existing rows from a table by using the DELETE statement: </li></ul>DELETE [FROM] table [WHERE condition ];
  66. 66. Deleting Rows from a Table <ul><ul><li>Specific rows are deleted if you specify the WHERE clause: </li></ul></ul><ul><ul><li>All rows in the table are deleted if you omit the WHERE clause: </li></ul></ul>DELETE FROM departments WHERE department_name = 'Finance'; 1 row deleted. DELETE FROM copy_emp; 22 rows deleted.
  67. 67. TRUNCATE Statement <ul><ul><li>Removes all rows from a table, leaving the table empty and the table structure intact </li></ul></ul><ul><ul><li>Is a data definition language (DDL) statement rather than a DML statement; cannot easily be undone </li></ul></ul><ul><ul><li>Syntax: </li></ul></ul><ul><ul><li>Example: </li></ul></ul>TRUNCATE TABLE table_name ; TRUNCATE TABLE copy_emp;
  68. 68. DROP Statement <ul><ul><li>All data and structure in the table are deleted. </li></ul></ul><ul><ul><li>Any pending transactions are committed. </li></ul></ul><ul><ul><li>All indexes are dropped. </li></ul></ul><ul><ul><li>All constraints are dropped. </li></ul></ul><ul><ul><li>You cannot roll back the DROP TABLE statement. </li></ul></ul>DROP TABLE dept80; Table dropped.
  69. 69. Database Transactions <ul><li>A database transaction consists of one of the following: </li></ul><ul><ul><li>DML statements that constitute one consistent change to the data </li></ul></ul><ul><ul><li>One DDL statement </li></ul></ul><ul><ul><li>One data control language (DCL) statement </li></ul></ul>
  70. 70. Database Transactions <ul><ul><li>Begin when the first DML SQL statement is executed </li></ul></ul><ul><ul><li>End with one of the following events: </li></ul></ul><ul><ul><ul><li>A COMMIT or ROLLBACK statement is issued. </li></ul></ul></ul><ul><ul><ul><li>A DDL or DCL statement executes (automatic commit). </li></ul></ul></ul><ul><ul><ul><li>The system crashes. </li></ul></ul></ul>
  71. 71. Advantages of COMMIT and ROLLBACK Statements <ul><li>With COMMIT and ROLLBACK statements, you can: </li></ul><ul><ul><li>Ensure data consistency </li></ul></ul><ul><ul><li>Preview data changes before making changes permanent </li></ul></ul><ul><ul><li>Group logically related operations </li></ul></ul>
  72. 72. Controlling Transactions DELETE INSERT UPDATE INSERT COMMIT Time Transaction ROLLBACK
  73. 73. State of the Data Before COMMIT or ROLLBACK <ul><ul><li>The previous state of the data can be recovered. </li></ul></ul><ul><ul><li>The current user can review the results of the DML operations by using the SELECT statement. </li></ul></ul><ul><ul><li>Other users cannot view the results of the DML statements by the current user. </li></ul></ul><ul><ul><li>The affected rows are locked ; other users cannot change the data in the affected rows. </li></ul></ul>
  74. 74. State of the Data After COMMIT <ul><ul><li>Data changes are made permanent in the database. </li></ul></ul><ul><ul><li>The previous state of the data is permanently lost. </li></ul></ul><ul><ul><li>All users can view the results. </li></ul></ul><ul><ul><li>Locks on the affected rows are released; those rows are available for other users to manipulate. </li></ul></ul>
  75. 75. Committing Data <ul><ul><li>Make the changes: </li></ul></ul><ul><ul><li>Commit the changes: </li></ul></ul>DELETE FROM employees WHERE employee_id = 99999; 1 row deleted. INSERT INTO departments VALUES (290, 'Corporate Tax', NULL, 1700); 1 row created. COMMIT; Commit complete.
  76. 76. State of the Data After ROLLBACK <ul><li>Discard all pending changes by using the ROLLBACK statement: </li></ul><ul><ul><li>Data changes are undone. </li></ul></ul><ul><ul><li>Previous state of the data is restored. </li></ul></ul><ul><ul><li>Locks on the affected rows are released. </li></ul></ul>
  77. 77. State of the Data After ROLLBACK DELETE FROM test; 25,000 rows deleted. ROLLBACK; Rollback complete. DELETE FROM test WHERE id = 100; 1 row deleted. SELECT * FROM test WHERE id = 100; No rows selected. COMMIT; Commit complete.
  78. 78. Summary <ul><li>This session covers the following topics: </li></ul><ul><ul><li>RDBMS concepts </li></ul></ul><ul><ul><li>Selecting all data from different tables </li></ul></ul><ul><ul><li>Describing the structure of tables </li></ul></ul><ul><ul><li>Performing arithmetic calculations and specifying column names </li></ul></ul><ul><ul><li>Use of the statements below: </li></ul></ul>Function Description INSERT Adds a new row to the table UPDATE Modifies existing rows in the table DELETE Removes existing rows from the table COMMIT Makes all pending changes permanent ROLLBACK Discards all pending data changes
  79. 79. Be a PHPUGPH’er! ^__^ It’s totally FREE! Register now at http://www.phpugph.com
  80. 80. Contact Me ^__^ Cherrie Ann B. Domingo, CCNA http://www.plurk.com/chean http://www.twitter.com/betelguese blue_cherie29 cherrie.ann.domingo cherrie.ann.domingo cherrie.ann.domingo [email_address] [email_address] http://www.cherrieanndomingo.com +63917.865.2412 (Globe) (632) 975.6976

×