Kevin Bedell on Internet Tech

Discussions on Ruby on Rails, the MySQL database, Social Media, Twitter, Wordpress and other tech issues

  • Home
  • MySQL Consulting Help
  • MySQL Programming
  • MySQL DBA
  • Writing / Publications

How to create a TIMESTAMP/DATETIME column in MySQL to automatically be set with the current time

Posted by Kevin on Saturday, March 7th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

7
Mar

The TIMESTAMP data type is the only way to have MySQL automatically set the time when a row was inserted and/or updated. DATETIME columns can’t do this.

TIMESTAMP columns are identical to DATETIME columns with one important exception — they can be set to take the current time value when a row is created or updated.

You can define more than one TIMESTAMP colum in a table — however, only ONE TIMESTAMP column in a table can be configured for Auto-Update or Auto-Initialization.

(For that reason, I usually make a practice of setting other columns to ‘DATETIME’ so there’s only one ‘TIMESTAMP’ column per table.)

There are four options when using TIMESTAMP, they are:

  • Auto-initialization and auto-update:
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • Auto-initialization only:
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • Auto-update only:
  ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
  • Neither:
  ts TIMESTAMP DEFAULT 0

Here’s an example of a complete ‘CREATE TABLE’ statement that shows how it all works:

CREATE TABLE `foo`.`timestamp_example` (
`id`                  INTEGER(10) UNSIGNED AUTO_INCREMENT,
`some_text_field`     VARCHAR(20),
`updated_at`          TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`created_at`          DATETIME DEFAULT NULL,
PRIMARY KEY (id)
);

Note that only one of the fields can be TIMESTAMP, that’s a limitation of MySQL.

The choice to use the TIMESTAMP on the ‘updated_at’ field was random in this example. Choose whatever makes sense for your application.

Click here to go to the table of contents for all MySQL Programming Example Code

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: mysql     Tags: how-to, programming
No Comment Yet   

MySQL Integer sizes and ranges of values - How-To Create Table example

Posted by Kevin on Saturday, March 7th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

7
Mar

There are 5 different integer columns, each hold integer values of different sizes.

Moreover, each can be signed or unsigned. If your value can’t ever be negative (for example, for an index), then you should probably make your values unsigned.

DROP TABLE `foo`.`example_03`;
CREATE TABLE IF NOT EXISTS `foo`.`example_03` (
 f_01  TINYINT,           -- from -128 to 127
 f_02  TINYINT UNSIGNED,  -- from 0 to 256
 f_03  SMALLINT,          -- from -32,768 to 32,767
 f_04  SMALLINT UNSIGNED, -- from 0 to 65,535
 f_05  MEDIUMINT,         -- from -8,388,608 to 8,388,607
 f_06  MEDIUMINT UNSIGNED, -- from 0 to 16,777,215
 f_07  INT,               -- from -2,147,483,648 to 2,147,483,647
 f_08  INT UNSIGNED,      -- from 0 to 4,294,967,295
 f_09  BIGINT,
              -- from -9,223,372,036,854,775,808
              -- to  9,223,372,036,854,775,807
 f_10  BIGINT UNSIGNED    -- from 0 to 18,446,744,073,709,551,615
);
Click here to go to the table of contents for all MySQL Programming Example Code

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: mysql     Tags: how-to, mysql, programming
No Comment Yet   

How-To MySQL CREATE TABLE Example showing default values, NULL values and comments

Posted by Kevin on Saturday, March 7th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

7
Mar

This example shows how to set default values for each column — as well as how to allow (or not allow) NULL values in the column. By default, any column can contain NULL values.

(Note that we’re also using “CREATE TABLE IF NOT EXISTS” so an error doesn’t get thrown if the table already exists when we try to create it.)

We’ve added comments as well, though we’ll explain those after.

/*
 Create the table foo.example_02 if it doesn't exist.
*/
CREATE TABLE IF NOT EXISTS `foo`.`example_02` (
 `field_1` VARCHAR(255) NOT NULL DEFAULT '',
 `field_2` CHAR(20) NOT NULL default 'default_text',
 `field_3` INT(10) DEFAULT NULL,
 `field_4` BIGINT(20),
 `field_5` DATETIME          -- embed a comment in the definition like this...
);

Note that if you don’t specify NULL or NOT NULL, columns by default can contain NULL values. And not specifying a default is the same as specifying ‘DEFAULT NULL’ since MySQL uses NULL as the default value in both cases.

Note also that I’ve added comments to the declaration. Comments come in two types — multi-line comments, and single-line comments.

/*
      This is a multi-line comment
*/

-- This is single-line comment 

select foo from bar;   -- This means the rest of this line is a comment

Click here to go to the table of contents for all MySQL Programming Example Code

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: mysql     Tags: how-to, mysql, programming
No Comment Yet   

Basic How-To Example of a MySQL CREATE TABLE command

Posted by Kevin on Saturday, March 7th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

7
Mar

Here’s a basic example of a MySQL CREATE TABLE command.

CREATE TABLE `foo`.`example_01` (
`field_1`         VARCHAR(255),
`field_2`         CHAR(10),
`field_3`         INT(10),
`field_4`         BIGINT(20),
`field_5`         DATETIME
);

Notice that the ‘back tic’s on each column definition (the little ` characters) are optional in most cases. I use them for reasons I’ll discuss later on.

Also, for most columns you see a number in parentheses after the name of the type — that is the default size for displaying that value in a select statement.

The actual size of the value you store in that column isn’t impacted by changing that number. Changing INT(10) to INT(12) won’t change the size of the data you can store in that column.

Click here to go to the table of contents for all MySQL Programming Example Code

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: mysql     Tags: how-to, mysql, programming
No Comment Yet   

How to get the contents of the database.yml file from ActiveRecord

Posted by Kevin on Friday, March 6th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

6
Mar

Save to delicious.

Sometimes when using Active Record you may want to create a database connection to a database other than the default database specified in your database.yml file.

When this happens, the easiest way to do it is to use the Class-level convenience method on ActiveRecord::Base. Like this:

Imagine your database.yml entry looks like this:

development_foo:
  adapter: mysql
  encoding: utf8
  database: foo
  pool: 5
  username: my_user
  password: my_pass
  socket: /tmp/mysql.sock

Now you want to create active record models that use that database connection. Here’s how:

# 'Bar' model points to the table 'bars' in the database 'foo'

class Bar < ActiveRecord::Base

  # specify the database.yml entry
  $db_config = 'development_foo'

  # Fetch the database.yml configuration
  $config = ActiveRecord::Base.configurations[$db_config]

 # Now we can establish a connection to that database and
 # this ActiveRecord model class will point to that database.
  establish_connection $config

end

It’s simple!

Copyright Kevin Bedell, 2009
All this code can be freely used under the terms of the MIT License.

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: ruby on rails     Tags: activerecord, mysql, programming, ruby, ruby on rails
1 Comment   

The future of programming? To provide the means for creating innovation.

Posted by Kevin on Thursday, March 5th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

5
Mar

I recently ran across an Information Week article called The Future of Programming that forecasts a drop in the demand for programmers along with a drop in their stature withing companies. They described off-shoring and the fall-off of the Internet Boom as reasons for the decline.

I’ve been programming for a long time. Most recently I worked for a company that implemented a new platform for getting student leads to colleges and universities. The platform we built there worked so well that the company was sold after less than three years in existence for over $100 Million.

That doesn’t seem to me to be evidence of the decline in the value of custom-programmed business solutions.

In fact it seems evidence of the opposite — given the speed of business today, being able to implement a new business platform quickly has increasingly greater value. And creating new business platforms is the work of programmers.

Off-shoring can work, but it’s much more risky for a lot of reasons. And some things are much harder to off-shore. More importantly, however, off-shoring a project slows it development pace in almost all cases. To go fast and ‘do it right the first time’, the best bet is to have programmers local and embedded directly in the business.

In the end, there will always be competitive advantage to be had by companies ‘rolling their own’ applications — otherwise you can only get the same features that everyone else has.

And those who embed application developers in the business units so that they understand the business and are long-term members of the business will have an advantage over those who look at programming as a commodity.

For my part, I think that off-shoring in many ways has been a boon since there are many development projects that otherwise would be too expensive to develop.

A great programmer/programming team embedded in a business unit that has the vision to lead an industry will continue to be the source of real innovation for the foreseeable future.

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: management     Tags: innovation, management, strategy
5 Comments   

A Simple Example of a MySQL Stored Procedure that uses a cursor

Posted by Kevin on Monday, March 2nd 2009   

Digg it

Bookmark it

Stumble it

Email to friend

2
Mar

(Save this to Del.icio.us!)

What is a cursor and when should you use one?

A ‘cursor’ in MySQL is essentially just the result set that’s returned from a query. Using a cursor allows you to iterate, or step through, the results of a query and perform certain operations on each row that’s returned.

Think of them like holders for any data you  might process in a loop. As you’ll see below, the example here runs a query then loops through the results.

Cursors have some drawbacks and you don’t want to use them everywhere. An appropriate use for a cursor might be when you need to step through the results of a query and then perform operations on multiple tables for each row.

Another candidate for a cursor is where some steps of the processing are optional and only need to be performed for certain rows. The cursor allows you to iterate through the result set and then perform the additional processing only on the rows that require it.

When should cursors be avoided?

Cursors should be avoided generally whenever you can write a SQL statement that processes all rows in a query at once — and you’ll be surprised at how often this is. If you try, many procedures with cursors in them can be refactored to eliminate the cursor by using a bit more complex SQL.

This is an advantage usually for a couple reasons. First, by processing all rows at once instead of looping through them one at a time, it’s generally faster. Second, cursors can make some issues more complex to debug

MySQL Cursor Sample Code

Here’s an example of how to create a MySQL stored procedure that uses a cursor.

I ‘over-commented’ the procedure a bit (if there is such a thing!), but I wanted the code to be relatively self-explanatory for people who just cut/paste it.

The SQL required to setup the tables and data follows the example. Everything runs and is tested. It requires MySQL 5.0 or above since before that there was no support for stored procedures.

First, here’s the sample code. I’ll follow after with some explanation.

/*
 *      Procedure Name  :  usp_cursor_example
 *      Database/Schema :  foo
 *
 *      Description:
 *          An example of a MySQL stored procedure that uses a cursor
 *
 *
 *      Tables Impacted :
 *         foo.friend_status - read-only
 *         DDL? - None
 *         DML? - Only Selects
 *
 *      Params:
 *         name_in - the name of the friend to search for
 *
 *      Revision History:
 *
 *         Date:          Id:        Comment:
 *         2009/03/01     kbedell    Original
 *
 *    Copyright (c) 2009 Kevin Bedell
 *    Can be resused under terms of the 'MIT license'.
 *
 *    To test:
 *      - Multiple records: call foo.usp_cursor_example('John');
 *      - One record:       call foo.usp_cursor_example('Julie');
 *      - Zero records:     call foo.usp_cursor_example('Waldo');
 *
 */
DROP PROCEDURE IF EXISTS  `foo`.`usp_cursor_example`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`.`usp_cursor_example`(
  IN name_in VARCHAR(255)
)
READS SQL DATA
BEGIN

  /*
    All 'DECLARE' statements must come first
  */

  -- Declare '_val' variables to read in each record from the cursor
  DECLARE name_val VARCHAR(255);
  DECLARE status_update_val VARCHAR(255);

  -- Declare variables used just for cursor and loop control
  DECLARE no_more_rows BOOLEAN;
  DECLARE loop_cntr INT DEFAULT 0;
  DECLARE num_rows INT DEFAULT 0;

  -- Declare the cursor
  DECLARE friends_cur CURSOR FOR
    SELECT
        name
      , status_update
    FROM foo.friend_status
    WHERE name = name_in;

  -- Declare 'handlers' for exceptions
  DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_rows = TRUE;

  /*
    Now the programming logic
  */

  -- 'open' the cursor and capture the number of rows returned
  -- (the 'select' gets invoked when the cursor is 'opened')
  OPEN friends_cur;
  select FOUND_ROWS() into num_rows;

  the_loop: LOOP

    FETCH  friends_cur
    INTO   name_val
    ,      status_update_val;

    -- break out of the loop if
      -- 1) there were no records, or
      -- 2) we've processed them all
    IF no_more_rows THEN
        CLOSE friends_cur;
        LEAVE the_loop;
    END IF;

    -- the equivalent of a 'print statement' in a stored procedure
    -- it simply displays output for each loop
    select name_val, status_update_val;

    -- count the number of times looped
    SET loop_cntr = loop_cntr + 1;

  END LOOP the_loop;

  -- 'print' the output so we can see they are the same
  select num_rows, loop_cntr;

END
DELIMITER ;

Discussion and Explanation of the MySQL Cursor Example Code

The ‘Declaration’ section

Before any actual programming logic starts, you need to first list all ‘declarations’. This is a requirement of MySQL.

Here’s the declaration section:

  /*
    All 'DECLARE' statements must come first
  */

  -- Declare '_val' variables to read in each record from the cursor
  DECLARE name_val VARCHAR(255);
  DECLARE status_update_val VARCHAR(255);

  -- Declare variables used just for cursor and loop control
  DECLARE no_more_rows BOOLEAN;
  DECLARE loop_cntr INT DEFAULT 0;
  DECLARE num_rows INT DEFAULT 0;

  -- Declare the cursor
  DECLARE friends_cur CURSOR FOR
    SELECT
        name
      , status_update
    FROM foo.friend_status
    WHERE name = name_in;

  -- Declare 'handlers' for exceptions
  DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET no_more_rows = TRUE;

There are 4 sections to the declaration section:

  • Declaration of one variable to hold the ‘value’ of each column in the result of the query.

Here, I recommend simply naming each variable by adding ‘_val’ to the end of the actual returned column name. Also, make sure the types match!

  • Declaration of variables that are used for counting rows and controlling looping.

Generally, every stored procedure that uses a cursor can always simply have the same set.

In this example we have three variables — a boolean that gets set if we try to read from the cursor when no data is left, and two counters for the number of rows processed (we have two here because the example demonstrates two different methods of counting rows processed — use either of them).

  • Declaration of the actual query that will generate the result set to be held by the cursor

The query is not actually invoked until later in the procedure where the cursor is ‘opened’. Also, in this example you can see that the cursor uses a variable in its ‘where clause’ that is passed in as an argument to the procedure.

  • Declaration of ‘handlers’ to control execution. These are usually always the same.

This is a standard declaration that sets up processing for when the cursor contains no (or no more) rows.

Opening the cursor and finding the number of rows returned

The next step is to ‘open’ the cursor. This is where the actual query in the cursor is run - and one of the places where cursor programming can get tricky.

  -- 'open' the cursor and capture the number of rows returned
  -- (the 'select' gets invoked when the cursor is 'opened')
  OPEN friends_cur;
  select FOUND_ROWS() into num_rows;

Notice that we select FOUND_ROWS() into our num_rows variable directly after we open the cursor. The FOUND_ROWS() ‘information function’ contains the number of rows found in the last select statement run.

If the query fails or errors for some reason, the ‘open’ call will fail — and it can fail ’silently’. This is one of the issues with cursors — you need to make sure that your queries work and are solid.

You also need to make sure that they are tolerant to data changing over time. Make sure that if the underlying data in the table changes over time, your query will still work.

Looping through the cursor result set

There are multiple methods for looping in MySQL — I use this method and recommend that you just cut/paste this code for every cursor you write. This method works and you won’t have to think about it.

  the_loop: LOOP

    FETCH  friends_cur
    INTO   name_val
    ,      status_update_val;

    -- break out of the loop if
      -- 1) there were no records, or
      -- 2) we've processed them all
    IF no_more_rows THEN
        CLOSE friends_cur;
        LEAVE the_loop;
    END IF;

    -- the equivalent of a 'print statement' in a stored procedure
    -- it simply displays output for each loop
    select name_val, status_update_val;

    -- count the number of times looped
    SET loop_cntr = loop_cntr + 1;

  END LOOP the_loop;

There are a couple things to point out here.

First, note that the no_more_rows variable gets set automatically when you ‘FETCH’ from the cursor. For this reason you should always test for that condition immediately after you try to read a row.

Note that we have a counter in the loop here as well. This is just another way to count the rows processed. Use what works for you.

Conclusion

In this post, we gave some sample code that can be used/reused to create MySQL Stored Procedures containing a cursor. Best of luck with the code and feel free to post comments below if you find any problems or if you have any suggestions!

Setup code for the sample MySQL Stored Procedure with a Cursor

Here is the setup SQL I used to create the tables/data you need to test the stored procedure and cursor.

/*
 *      Procedure/File Name  :  ex1_setup.sql
 *      Database/Schema      :  foo
 *
 *      Description:
 *          Setup file to support simple cursor example
 *
 *      Tables Impacted :
 *         foo.friend_status - drop/re-create table and populate.
 *
 *      Params:
 *         None.
 *
 *      Revision History:
 *
 *         Date:          Id:        Comment:
 *         2009/03/01     kbedell    Original
 *
 *    Copyright (c) 2009 Kevin Bedell
 *    Can be resused under terms of the 'MIT license'.
 *
 *    To test:
 *      - Run script then: select * from foo.friend_status;
 *
 */
drop table if exists foo.friend_status; 

CREATE TABLE IF NOT EXISTS `foo`.`friend_status` (
    `id`            INTEGER(10) unsigned NOT NULL auto_increment,
    `name`          VARCHAR(255) NOT NULL,
    `status_update` VARCHAR(255) NOT NULL,
    PRIMARY KEY (`id`)
);

insert into foo.friend_status
    (name, status_update)
  values
      ('John',  'Woke up. Guiness for Brkfst.')
    , ('Fred',  'is thinking about joining the circus')
    , ('Erin',  "Getting ready for a job interview")
    , ('Amy',   'at work and dreaming of kittens')
    , ('John',  'Watching Scooby Doo reruns. Guiness for Lunch.')
    , ('Amy',   'dreaming of fuzzy slippers and wedding dresses')
    , ('Julie', 'is hating working two jobs')
    , ('John',  'Out of the shower finally. Guiness for Dinner.')
    , ('Erin',  "if I don't get this job, I'll be asking 'Paper or Plastic?'")
    , ('Amy',   'dreaming of Meeting Mr. Right!')
    , ('Erin',  'Nailed the job interview -- calling John to celebrate!')
    , ('Amy',   'John called -- meeting him at the pub!')
    , ('John',  'Heading out to meet friends for some Guiness!')
;

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: mysql     Tags: how-to, mysql
4 Comments   

Top Reasons I like my Mac

Posted by Kevin on Tuesday, February 24th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

24
Feb

I recently got some grief for using a mac — because it was a bit more expensive than using a PC.

Personally, given the software that comes included on it, I think that it’s probably not much — if any — more expensive at all.

But none-the-less, I wrote out some of the reasons I like it — and why I wouldn’t switch back for anything.

  • I never worry about viruses. Never. I don’t have to install firewall/virus scan software. Ever.
  • I get a true bash shell when I go to the OS. One of my biggest complaints about windows was that it seemed designed to keep you from going to the OS to do things. My mac works seamlessly that way.
  • I don’t have some stupid ’start’ menu that I have to rearrange to get the programs I want lined up.
  • I rarely have to reboot when I install something. I reboot the machine so infrequently that sometimes it’s months between reboots. I’ve never had a ‘blue screen of death’ and my computers have locked up maybe once or twice a year.
  • My system backups are seamless through the Time Machine built into Leopard. I just works and I always have a current backup. Always.
  • When there’s an operating system upgrade, I always look forward to it.
  • The included software, iLife, is great.
  • I play guitar some and use the included, free program Garage Band to record songs I write.

And these are just a few reasons off the top of my head.

Now - maybe it’s worth saving a few bucks to have an OS that sucks.

But on the other hand, I don’t buy the cheapest tools at Home Depot either. And I didn’t get the cheapest TV available. Or the lowest cost stereo system.

Sometimes I pay a bit more at the market so I don’t have to eat the cheapest cuts of meat. I don’t buy the nasty cheap white bread either.

And don’t even talk to me about beer. Forcing me to buy the cheapest beer at the market would suck - but if you prefer that I don’t judge you.

I don’t mind paying a bit more for quality. And my mac is simply higher quality in ways that are important to me.

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: lists, mac     Tags: list, mac
2 Comments   

Redswingline twitter bot now active again

Posted by Kevin on Friday, February 20th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

20
Feb

Yes, it was me.

I created the redswingline stapler twitter bot almost two years ago as a way of experimenting with Twitter and its API. I had been watching the movie Office Space a lot and thought it would be fun to create a twitter avatar of the red swingline stapler that was on Milton’s desk.

Anyway, it was off-line for about a year but I recently started it up again.

I hate to admit, but that stapler has more twitter followers than I do…

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: twitter     Tags: api, programming, twitter
No Comment Yet   

Latest launch of latest incarnation of kbedell.com

Posted by Kevin on Thursday, February 12th 2009   

Digg it

Bookmark it

Stumble it

Email to friend

12
Feb

Well - I’m relaunching kbedell.com. Again. Again again.

This site has been my personal site since about 1995 and it’s looked a bunch of different ways. I’ve been on a variety of different Wordpress versions (and moveable type, radio — and even plain HTML).

I’ve been doing a whole bunch of interesting things with ruby/rails, mysql, twitter, wordpress and some other tech issues and this will be the place I write about them.

Thanks for stopping!

If you enjoyed this post, feel free to subscribes to our rss feeds

Filed under: Uncategorized     
No Comment Yet   
Click here to follow me on Twitter!

About Me


I'm an experienced MySQL Developer and DBA with deep 'hands-on' technical skills. Some of my MySQL qualifications are:
  • Have written 1000's of lines of MySQL Stored Procedures.
  • Was Tech Lead, Data Architect and Lead SQL Developer on a large Data Warehouse project that was built using MySQL.
  • Handled all major DBA tasks including configuration file parameters, backup/restore, user management, performance tuning, etc.
  • Have managed and implemented database server migrations.
  • Have configured MySQL Replication.
  • Have deep experience with Linux/Scripting as well as 15+ years general development experience.
  • Experienced Technical and Project Manager.

Here's a link to my resume with details on my experience with ruby, rails, java and mysql development (or in PDF).

I work as a consultant to a limited number of companies primarily in the Northeastern US. If you have challenging work that you believe my skills may fit, I hope you'll contact me at kbedell AT gmail.com.

Please contact me if you think I can help you out. If I can solve your problem in a short phone call, there will be no charge for my time.

Follow me on Twitter or view my profile on linkedin!

Here's a partial list of my writing and speaking credits.

Recommendations:

“Kevin is one of the best "agile programmers" I have come across. His work is always thorough and of high quality. His impressive communication skills and critical thinking make him a great addition to any team.”
- Anand Rajaram, Architect, jPeople

“Kevin is smart, talented, and highly motivated. He keeps up with the latest trends in technology and is always looking to learn more. I'd recommend him to anyone looking to add some technical depth to their existing team or organization.”
- Jeffrey Bienkowski, AVP, E-Business , Sun Life Financial

“I had the opportunity of working with Kevin at Viridien. Kevin has excellent work ethics, and was a pleasure to work with. His main strengths included ... technology expertise in the J2EE space, strong leadership & inter-personal skills, and reliability; he could be relied on to deliver, especially in a high pressure environment.”
- Chinmay Nadkarni , Software Engineer , Signature Consultants, Inc

“Kevin is one of the most talented and hardest workers I know. His work is of the highest quality. He is an asset to any company.”
- Patt Steiner, Owner, VentureSphere and Management Consulting Specialist
Subscribe in a reader
Subscribe via email subscriptions

Enter your email address:

Products and Services of varying usefulness:

125x125 125x125

ALSO: Sweeet UFO Detection Technology!

  • Recent Entries
  • Recent Comment
  • Most Comment
  • How to create a TIMESTAMP/DATETIME column in MySQL to automatically be set with the current time
  • MySQL Integer sizes and ranges of values - How-To Create Table example
  • How-To MySQL CREATE TABLE Example showing default values, NULL values and comments
  • Basic How-To Example of a MySQL CREATE TABLE command
  • How to get the contents of the database.yml file from ActiveRecord
  • The future of programming? To provide the means for creating innovation.
  • A Simple Example of a MySQL Stored Procedure that uses a cursor
  • Top Reasons I like my Mac
  • Redswingline twitter bot now active again
  • Latest launch of latest incarnation of kbedell.com
  • Peter Stone in A Simple Example of a MySQL Stored …
  • cayseruhrichcyg… in A Simple Example of a MySQL Stored …
  • notsoreq in How to get the contents of the data…
  • Kevin Bedell on… in MySQL Programming
  • Kevin Bedell on… in MySQL Programming
  • Kevin Bedell on… in MySQL Programming
  • Kevin Bedell on… in MySQL Programming
  • Marcus Adair in The future of programming? To provi…
  • Kevin Bedell on… in The future of programming? To provi…
  • Kevin Bedell on… in The future of programming? To provi…
  • The future of programming? To provide the means for creating innovation. (5)
  • A Simple Example of a MySQL Stored Procedure that uses a cursor (4)
  • MySQL Programming (4)
  • Top Reasons I like my Mac (2)
  • How to get the contents of the database.yml file from ActiveRecord (1)

Search

Categories

  • Uncategorized (1)
  • twitter (1)
  • mac (1)
  • lists (1)
  • mysql (5)
  • management (1)
  • ruby on rails (1)

Archives

  • March 2009 (7)
  • February 2009 (3)

Pages

  • MySQL Consulting Help
  • MySQL Programming
  • MySQL DBA
  • Writing / Publications

Links

  • Follow me on Twitter
  • 21st Century Citizen
  • My linkedin Profile
  • My Musical Projects

Subscribe

  • technorati add aol netvibes rojo myyahoo modern freedictionary subrss chicklet plusmo newsburst ngsub wwgthis subscribes

Browse Our Tag Archives

activerecord api how-to innovation list mac management mysql programming ruby ruby on rails strategy twitter

My Latest Twitter Updates

    (Follow Me on Twitter)
    • Really enjoying using @powertwitter -- firefox plugin that extends the twitter '/home' page. 2009-03-17
    • Designing a logo using powerpoint on my mac. 2009-03-17
    • The best roundup of Free Mac OSX utilities and software #opensource #mac http://www.opensourcemac.org/ 2009-03-17
    • RT @ckollm: Drink Beer,Make Fuel - A brewing company in Calif. will make ethanol fuel from discarded beer yeast. http://tr.im/hu0e 2009-03-17
    • Now following @appletvjunkie -- maybe help me get better value from my #appletv ? #mac 2009-03-17
    • @13monsters LOL. All of them Black? in reply to 13monsters 2009-03-17
    • @13monsters OK -- Now I know that the name of one of your monsters is 'Jack'. Who are the other 12? ;-) in reply to 13monsters 2009-03-17
    • More updates...

Links

  • 21st Century Citizen - 21st Century Citizen - an environmental blog I own and periodically contribute to.
  • Follow me on Twitter - Follow me on Twitter
  • My linkedin Profile - My linkedin Profile
  • My Musical Projects - My Musical Projects

Recent Updated Post

  • How to create a TIMESTAMP/DATETIME column in MySQL to automatically be set with the current time
  • Latest launch of latest incarnation of kbedell.com
  • Basic How-To Example of a MySQL CREATE TABLE command
  • How-To MySQL CREATE TABLE Example showing default values, NULL values and comments
  • MySQL Integer sizes and ranges of values - How-To Create Table example
  • How to get the contents of the database.yml file from ActiveRecord
  • The future of programming? To provide the means for creating innovation.
  • A Simple Example of a MySQL Stored Procedure that uses a cursor
  • Redswingline twitter bot now active again
  • Top Reasons I like my Mac

©2007-2009 Kevin Bedell on Internet Tech

Disclaimer: All data and information provided on this site is for informational purposes only.

WordPress Themes by Irish Band & Steel Band