Mysql class notes:

Purchased a class frmo for $19. Supposedly going to teach me everything there is to know about mysql.

Lessons learned:


mysql> show engines
shows the list of supported engines.
Configure necessary directory structures
/usr/bin/mysqladmin -u root password ‘new-password’
Sets password for root user


Standard overview of the class.

Chapter 1: db generics

  • What is a db
  • Table example
  • Create Read Update Delete (crud) = DML (data manipulation language)
  • Overview of db models.
  • server process is mysqld

Chapter 2: intro:

  • Engines:

    • Default:

      • MyISAM used to be default
        • Good for low insert/updates
        • Good for very high select rates.
        • Uses table level locking.
      • InnoDB is the current default.
        • Uses row level locking
        • Foreign key functionality.
    • Reasons for selection:

      • Amount of data
      • Speed
      • Functionality
      • Max number of rows
      • Data integrity
    • Examples:

      create table table1 (i int) engine = innodb;
      create table table2 (i int) engine = csv;  # interesting.
  • Data types:

    • Main categories:
      • Numeric
        • tinyint ~ boolian
        • float
      • Strings
        • varchar
        • enum: a list
      • Date/time
        • date
        • datetime
        • timestamp ~ epoch

Chapter 3: Getting started w/mysql:

  • Installation: mysql installation on windows appears borked. Got it running but it’s not quite as smooth as the tutorial even though it’s the same version.
  • Linux was already installed.
    • mysql-server
    • ubunut: need mysql-client
  • xampp:
    • graphical interface for mysql, phymyadmin, and others.
    • downloaded/installed on linux, windows. had some battles.
      • Both systems were runnign previously installed mysql. Doesn’t work.
      • Windows tries t use the same port as skype.
      • Start process in linux is /opt/lampp/lammp [start|stop]
  • If I decide I like phymyadmin, it’s available from epel.
  • phymyadmin
    • http://locahost/phpmyadmin
    • When creating users to log in via phpmyadmin, ensure localhost is defined in the host entry.
    • Looks like a gui front end. wasn’t overly impressed.
  • mysql workbench
    • This one is nice. Provides EER docuemntation and can do all the things

Chapter 3.5: Redo

Reloaded nap a few times until I got it right. Mirrored the mysql repos on my spacewalk server, then built nap a few times until I got everything running.

phpmyadmin took a few times to get right. The default httpd config file was wrong, permissions on the /var/lib/mysql directory were wrong. After getting all that working, I have the kickstart post script fully functional.

Chapter 4: Normalization:

  • Seems his narratives are out of order. He’s talking about doing stuff in the future that we’ve already done.
  • Relational model rules:
    • Each column value must be a single value.
    • All values of a given column must be the same data type.
    • Each column name must be uniquue
    • column order is insignificant.
    • No two rows in a relation can be identical
    • Order of the rows is insignificant.
  • Functinal dependency: describes a relationship between columns within a single realtion
    • A column is dependent on another if one value can be used to determine the value of another.
  • Common mistakes:
    • Tables with too many fields or fields that don’t relate to each other.
    • Too many tables with similar data.
    • Repeated rows
    • Using comma sepaarate values or multiple values in a single row
    • Poor naming conventinos
    • Poor or no planning
    • Non-normalized data.
  • Normalization:
    • The process of organizing fields and tables to minimize redundancy and dependency.
    • Can involve dividing larger tables into smaller tables with relationships
    • Objective is to isolate data so that actions in a field can be made in one table which then propogates through the rest of the needed tables using properly defined relationships.
  • Forms:
    • 1NF:
      • No repeating rows or duplicate fields
      • Each row contains only one value
      • Each row/record is unique
      • Each row is identified through a primnary key
    • 2NF
      • Already in 1NF
      • All non-key fields depend on all components of primary key
      • No partial dependencies.
    • 3NF
      • Alread in 2NF
      • Every non-prime attribute must depend n the primary key
      • eg: addresses should be in ther own table, not in the customers table.
  • Design process:
    • Define your purpose: What is the reason for the application?
    • Determine your tables
    • Determine your fields/columns
    • Determine relationships
    • Create an EER diagram
    • Refine as needed.
  • databaes mapping:
    • products
      • id: (int(11), auto_increment, primary_key)
      • name (varchar(100))
      • description (text)
      • price (varchar(20))
      • category: (int(11), foreign_key -> products_categories id)
      • image (varchar(100)
    • products_categories
      • id: (int(11), auto_increment, primary_key)
      • name (varchar(100))
      • description (varchar(100))
      • image (varchar(100))
    • customers
      • id: (int(11), auto_increment, primary_key)
      • first (varchar(100))
      • last (varchar(100))
      • email (varchar(100))
      • password (varchar(100))
      • avatar (varchar(100))
      • join_date (timestamp, default- current_date)
    • customer_addresses
      • id: (int(11), auto_increment, primary_key)
      • custmoer: (int(11) foreign key to customers:id)
      • address (varchar(100))
      • address2 (varchar(100))
      • city (varchar(100))
      • state (varchar(100))
      • zipcode (varchar(100))
    • reviews
      • id: (int(11), auto_increment, primary_key)
      • customer: (int(11), foreign key to customers:id)
      • title (varchar(100))
      • body (text)
      • rating (int(2))
      • product: (int(11), foreign key to products:id)
      • review_date (timestamp, default - current_date)
    • pages
      • id: (int(11), auto_increment, primary_key)
      • title (varchar(100))
      • body (TEXT)
      • category: (int(11), foreign key to page_categories:id)
      • create_date (timestamp, default - current_date)
    • page_categories
      • id: (int(11), auto_increment, primary_key)
      • name (varchar(100))
      • descripton (varchar(100))
      • image (varchar(100))

Chapter 5: Creating the database:

  • First section was simply typing the above into myphpadmin. I think the command line would have been easier.
  • Author suggests exporting the empty database, once the schema’s created, in order to have the empty

Chapter 6: SQL fundamentals:

  • Objectives:

    • union
    • concat
    • count
  • Hae to correct the sql ‘cause I didn’t follow the same naming convetion. BAD student! BAD!:

    INSERT INTO products
    ("Surface Tablet","Microsoft Surface Pro with 128GB Memory","499.99",2,"images/surface.jpg"),
    ("Nextbook Tablet","Nextbook 7 inch Tablet 8GB Memory","99.99",2,"images/nextbook.jpg"),
    ("Philips BTM2180/37 Micro Music System","Wireless music streaming via Bluetooth","149.99",2,"images/stereo.jpg"),
    ("Memorex Boombox","Memorex MP3142 - Boombox","45.99",2,"images/boombox.jpg"),
    ("Mossy Oak Infinity Seat Cover","High quality, heavy Mossy Oak Infinity Seat Cover","19.99",6,"images/seatcover1.jpg"),
    ("Remington Floor Mat Set","Remington Best Fashion Carpet Floor Mat Set Tan 4pc","29.99",6,"images/floormat1.jpg"),
    ("Rawlings RBG36 Baseball Glove","Rawlings RBG36 Baseball Glove 12 inch","29.99",4,"images/glove1.jpg"),
    ("Franklin Pro Batting Gloves","Franklin Sports MLB Shok-Sorb Pro Batting Glove Pair","19.99",4,"images/glove2.jpg"),
    ("Golds Gym Trainer 420","NEW Gold's Gym Trainer 420 Treadmill with Bonus Puzzle Mat","377.00",4,"images/treadmill1.jpg"),
    ("Weslo Cadence G 5.9 Treadmill","Weslo Cadence G 5.9 Treadmill","287.00",4,"images/treadmill2.jpg"),
    ("Golds Gym Trainer 315 Treadmill","Gold's Gym Trainer 315 New Model Treadmill","258.00",4,"images/treadmill3.jpg");
    INSERT INTO customers
    INSERT INTO customer_addresses
    (1,"10 Main st",NULL,"Boston","MA","01929"),
    (2,"20 Main st","Apt 3","New York","NY","01929"),
    (3,"30 Main st",NULL,"Seaside Heights","NJ","01929"),
    (4,"40 Main st","Unit 10","Baltimore","MD","01929"),
    (5,"50 Main st","Apt 18","Miami","FL","01929"),
    (6,"60 Main st",NULL,"Chicago","IL","01929"),
    (7,"70 Main st",NULL,"Sacramento","CA","01929");
    INSERT INTO reviews
    ("Great Product","This product was great",9,1,2),
    ("Okay Product","This product was okay",6,1,3),
    ("Decent Product","This product was decent",8,3,4),
    ("Bad Product","This product was really bad",2,5,4)