in reply to inserting a column into mySQL DB with perl

or using a CarSize table:

use strict; use warnings; use DBI; my $databaseName = 'Test.sqlite'; unlink $databaseName; my $dbh = DBI->connect ("dbi:SQLite:$databaseName"); die "connect failed: $DBI::errstr" if ! $dbh; local $dbh->{AutoCommit} = 0; # Use transacted processing local $dbh->{RaiseError} = 1; # die on processing errors local $dbh->{PrintError} = 0; # Suppress printing errors $dbh->do (<<SQL); CREATE TABLE Cars ( Car VARCHAR(128), CarId INTEGER PRIMARY KEY AUTOINCREMENT ); SQL $dbh->do (<<SQL); CREATE TABLE Sizes (Size VARCHAR(128), SizeId INTEGER PRIMARY KEY AUTOINCREMENT); SQL $dbh->commit (); $dbh->do (<<SQL); CREATE TABLE CarSizes (CarId INTEGER, SizeId INTEGER); SQL $dbh->commit (); my $sth = $dbh->prepare (<<SQL); INSERT INTO Cars (Car) VALUES (?) SQL $sth->execute ($_) for 'Mini', 'Civic', 'Camry', 'Accord'; $dbh->commit (); $sth = $dbh->prepare (<<SQL); INSERT INTO Sizes (Size) VALUES (?) SQL $sth->execute ($_) for 'sedan', 'compact', 'subcompact'; $dbh->commit (); $sth = $dbh->prepare (<<SQL); INSERT INTO CarSizes (CarId, SizeId) VALUES (?, ?) SQL $sth->execute (@$_) for [1, 3], [2, 3], [3, 2], [4, 1]; $dbh->commit (); $sth = $dbh->prepare (<<SQL); SELECT c.Car, s.Size FROM Cars c JOIN CarSizes cs ON c.CarId = cs.CarId JOIN Sizes s on cs.SizeId = s.SizeId SQL $sth->execute (); while (my $row = $sth->fetchrow_hashref ()) { printf "%-10s %s\n", @{$row}{'Car', 'Size'}; }

Prints:

Mini subcompact Civic subcompact Camry compact Accord sedan
Premature optimization is the root of all job security