Assuming you are deleting the ‘name’ index on ‘test’ table:
ALTER TABLE `test` DROP INDEX `name`;
Assuming you are deleting the ‘name’ index on ‘test’ table:
ALTER TABLE `test` DROP INDEX `name`;
I wrote a post about how to install MySQL++ and I thought I will write a quick tutorial on how to use it too.
This is a very basic MySQL++ program and it’s very self explanatory:
#include <mysql++.h> #include <stdlib.h> using namespace std; using namespace mysqlpp; int main() { try { Connection conn(false); conn.connect("DB NAME", "DB HOST probably localhost", "DB USER", "DB PASS"); Query query = conn.query(); } catch (BadQuery er) { // handle any connection or // query errors that may come up cerr << "Error: " << er.what() << endl; return -1; } catch (const BadConversion& er) { // Handle bad conversions cerr << "Conversion error: " << er.what() << endl << "\tretrieved data size: " << er.retrieved << ", actual size: " << er.actual_size << endl; return -1; } catch (const Exception& er) { // Catch-all for any other MySQL++ exceptions cerr << "Error: " << er.what() << endl; return -1; } return (EXIT_SUCCESS); }
This will connect to your database and creates a query object ready to go. Save this as test.cpp
To compile this, you will have to create a Makefile in the same folder, so create a file and name it “Makefile” (no quotes) and add these to it:
CXX := g++ CXXFLAGS := -I/usr/include/mysql -I/usr/local/include/mysql++ LDFLAGS := -L/usr/local/lib -lmysqlpp -lmysqlclient -lnsl -lz -lm EXECUTABLE := main all: test clean: rm -f $(EXECUTABLE) *.o
If you get funny errors, make sure there are no extra spaces in this file, and there is only one “tab” behind the line: rm -f $(EXECUTABLE) *.o
Now, you can make and run this by doing:
make
./test
Now, I’m going to show you how to execute some queries and you can go ahead and experiment on your own tables.
Here is a INSERT query followed by a SELECT; this will hopefully cover a lot, because INSERT is a type of query that doesn’t return anything and you need to escape values in order to INSERT.
SELECT on the other hand returns rows, although there are 3 ways that they can be done but here is a simple way that works for me.
#include <mysql++.h> #include <stdlib.h> using namespace std; using namespace mysqlpp; int main() { try { Connection conn(false); conn.connect("DB NAME", "DB HOST probably localhost", "DB USER", "DB PASS"); Query query = conn.query(); /* To insert stuff with escaping */ query << "INSERT INTO some_table " << "VALUES (" << "'', " << /* This is left empty because the column is AUTO_INCREMENT */ "\"" << escape << some_var_that_contains_some_value << "\"" << ");"; query.execute(); /* That's it for INSERT */ /* Now SELECT */ query << "SELECT * FROM biz LIMIT 10"; StoreQueryResult ares = query.store(); for (size_t i = 0; i < ares.num_rows(); i++) cout << "Name: " << ares[i]["name"] << " - Address: " << ares[i]["address"] << endl; /* Let's get a count of something */ query << "SELECT COUNT(*) AS row_count FROM biz"; StoreQueryResult bres = query.store(); cout << "Total rows: " << bres[0]["row_count"]; } catch (BadQuery er) { // handle any connection or // query errors that may come up cerr << "Error: " << er.what() << endl; return -1; } catch (const BadConversion& er) { // Handle bad conversions cerr << "Conversion error: " << er.what() << endl << "\tretrieved data size: " << er.retrieved << ", actual size: " << er.actual_size << endl; return -1; } catch (const Exception& er) { // Catch-all for any other MySQL++ exceptions cerr << "Error: " << er.what() << endl; return -1; } return (EXIT_SUCCESS); }
Again, whenever you want to run your code do:
make
./test
I wrote this because something like this would help myself a lot.
Good Luck
Update
query.reset();
Will reset the query object; this is useful when you are (in your program) generating a MySQL query but must discard it and generate another query (based on some condition).
There is a lack of documentation on how to do this, I guess they assume that you must know a lot IF you are trying to use this library.
But here are step by step instructions on how to do it.
What you need
Root access to your server.
An SSH client, like putty, it’s free.
Let’s do it
1 – Run your SSH client and connect to your server using root.
2 – Do:
cd /
Note: I always make a folder like this
mkdir Tools
cd Tools
Note: This is version 3.0.9 obviously, it’s best if you check this web page and download the latest source code: http://www.tangentsoft.net/mysql++/
wget http://www.tangentsoft.net/mysql++/releases/mysql++-3.0.9.tar.gz
tar xvfz mysql++-3.0.9.tar.gz
cd mysql++-3.0.9
./configure
make
make install
3 – Now, in order for:
#include <mysql++.h>To work, you will have to add a line to your ld.so.conf; you will find this file (hopefully) in /etc so go to:
/etc
And edit ld.so.conf and add this line to the end of it:
/usr/local/lib
Note: If ld.so.conf is not in /etc you can try “whereis ld.so.conf” (no quotes)
Save it and run:
ldconfig
And you are all set.
Please also note that, this worked on my CentOS and might not work exactly like this on your distribution.
I developed a large website for a client and in the past month we were getting a lot of traffic.
It was in a way that the server had problems handling the traffic and my client wanted to get another server to load balance the traffic between the two.
Pages on this site are generated from 10 to 25 MySQL queries and these queries are optimized but consider this, if there are 1,000 request for a page with 25 queries in a very small period of time, that would be 25,000 queries. 25,000 queries + processing them could lead to huge server loads.
So we used PHPCache to cache the results of those queries for just 1 minute, not an hour or a day, just one minute and it made a huge difference.
The difference was that we cached all 25 queries plus the time it took to process them using PHPCache and now to handle 1,000 requests we were querying the database only 1,000 times.
I think this site can easily handle 10 times more traffic now.
You can move a column in a MySQL table to another position like this:
ALTER TABLE name_of_the_table MODIFY column_to_move tinyint(1) DEFAULT '0' AFTER column_to_move_after
Note: the part with: “tinyint(1) default ’0′” is necessary and it should be the exact definition of your column.
For example yours might be:
int(10) unsigned NOT NULL auto_increment
or
int(10) unsigned NULL default ’0′
or
…