<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technical Diary &#187; mysql</title>
	<atom:link href="http://andriigrytsenko.net/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://andriigrytsenko.net</link>
	<description>With Andrii Grytsenko</description>
	<lastBuildDate>Tue, 17 Aug 2010 08:25:33 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MYSQL quick overview</title>
		<link>http://andriigrytsenko.net/2010/05/mysql-quick-overview/</link>
		<comments>http://andriigrytsenko.net/2010/05/mysql-quick-overview/#comments</comments>
		<pubDate>Tue, 18 May 2010 11:10:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://andriigrytsenko.net/?p=762</guid>
		<description><![CDATA[Here I systematized some of my MYSQL knowledges.

First I decide to make some test database to do everything step-by-step. This will be companies database contains information about all employers, projects and departments.
CREATE DATABASE company
Go in:
USE company
And make 4 tables.


Employers


employer_id
int primary key


name
varchar(15)


surname
varchar(25)


hire_date
date


department_id
int


fired
int





projects


project_id
int primary key


name
varchar(255)





departments


department_id
int primary key


name
varchar(255)



This table consists relation between employer and projects:


project_involved


employer_id
int


project_id
int



Let&#8217;s create its in [...]]]></description>
			<content:encoded><![CDATA[<p>Here I systematized some of my MYSQL knowledges.<br />
<span id="more-762"></span></p>
<p>First I decide to make some test database to do everything step-by-step. This will be companies database contains information about all employers, projects and departments.</p>
<pre>CREATE DATABASE company</pre>
<p>Go in:</p>
<pre>USE company</pre>
<p>And make 4 tables.</p>
<table border="1">
<tbody></tbody>
<caption style="text-align: center;"><strong>Employers</strong></caption>
<tbody>
<tr>
<td>employer_id</td>
<td>int primary key</td>
</tr>
<tr>
<td>name</td>
<td>varchar(15)</td>
</tr>
<tr>
<td>surname</td>
<td>varchar(25)</td>
</tr>
<tr>
<td>hire_date</td>
<td>date</td>
</tr>
<tr>
<td>department_id</td>
<td>int</td>
</tr>
<tr>
<td>fired</td>
<td>int</td>
</tr>
</tbody>
</table>
<table border="1">
<tbody></tbody>
<caption style="text-align: center;"><strong>projects</strong></caption>
<tbody>
<tr>
<td>project_id</td>
<td>int primary key</td>
</tr>
<tr>
<td>name</td>
<td>varchar(255)</td>
</tr>
</tbody>
</table>
<table border="1">
<tbody></tbody>
<caption style="text-align: center;"><strong>departments</strong></caption>
<tbody>
<tr>
<td>department_id</td>
<td>int primary key</td>
</tr>
<tr>
<td>name</td>
<td>varchar(255)</td>
</tr>
</tbody>
</table>
<p>This table consists relation between employer and projects:</p>
<table border="1">
<tbody></tbody>
<caption><strong>project_involved</strong></caption>
<tbody>
<tr>
<td>employer_id</td>
<td>int</td>
</tr>
<tr>
<td>project_id</td>
<td>int</td>
</tr>
</tbody>
</table>
<p>Let&#8217;s create its in DB:</p>
<pre>CREATE TABLE employers (
employer_id int primary key auto_increment,
name varchar(15),
surname varchar(25),
hire_date date,
department_id int,
fired int);</pre>
<pre>CREATE TABLE projects (
project_id int primary key auto_increment,
name varchar(255));</pre>
<pre>CRETE TABLE departments (
department_id int primary key auto_increment,
name varchar(255));</pre>
<pre>CREATE TABLE project_involved (
employer_id int,
project_id int);</pre>
<p>And insert some data into them. I will show you only few of them:</p>
<pre>INSERT INTO projects (departments) VALUES ('General Project');</pre>
<p>In this insert I use <a href="http://dev.mysql.com/doc/refman/5.0/en/subqueries.html">subquery</a>:</p>
<pre>INSERT INTO employers
(name,surname,hire_date,department_id,fired)
VALUES ('Jonh','Smith','2007-10-30',
(SELECT department_id FROM departments WHERE name='Department A'),
0);</pre>
<p>Format of date should be the next:</p>
<p><strong><span style="color: #ff0000;">YYYY-MM-DD</span></strong></p>
<p>There is also some example of <strong>SELECT</strong> query in the <strong>UPDATE</strong> statement:</p>
<pre>INSERT INTO projects (name) VALUES ('General Project');</pre>
<pre>INSERT INTO project_involved (employer_id,project_id)
VALUES (
(SELECT employer_id FROM employers WHERE name='Jonh' AND surname='Smith'),
(SELECT project_id FROM projects WHERE name='General Project')
);</pre>
<p>In the ending of filling db up I&#8217;ve got next results:</p>
<pre>SELECT * FROM employers;
+-------------+------+---------+------------+---------------+-------+
| employer_id | name | surname | hire_date  | department_id | fired |
+-------------+------+---------+------------+---------------+-------+
|           1 | Jonh | Smith   | 2007-10-30 |             1 |     0 |
|           2 | Yan  | Brown   | 2008-11-23 |             2 |     0 |
+-------------+------+---------+------------+---------------+-------+
2 rows in set (0.00 sec)</pre>
<pre>SELECT * FROM project_involved;
+-------------+------------+
| employer_id | project_id |
+-------------+------------+
|           1 |          1 |
|        NULL |          2 |
+-------------+------------+
2 rows in set (0.00 sec)</pre>
<pre>SELECT * FROM projects;
+------------+-----------------+
| project_id | name            |
+------------+-----------------+
|          1 | General Project |
|          2 | Second Project  |
+------------+-----------------+
2 rows in set (0.00 sec)</pre>
<pre>SELECT * FROM departments;
+---------------+---------------+
| department_id | name          |
+---------------+---------------+
|             1 | departament A |
|             2 | departament B |
+---------------+---------------+
2 rows in set (0.00 sec)</pre>
<p>If you need to to remove something from your table(<em><span style="text-decoration: underline;">Department D</span></em> from <em><span style="text-decoration: underline;">departments</span></em> for example):</p>
<pre>DELETE FROM departments WHERE name='Department D';</pre>
<p>I&#8217;ve totally forgot about some column should be at <em><span style="text-decoration: underline;">employers</span></em> table. Column <span style="text-decoration: underline;"><em>position</em></span> has to be added. To change the structure of the table use <strong>ALTER</strong>:</p>
<pre>ALTER TABLE employers
ADD COLUMN position varchar(255) AFTER surname;</pre>
<p>in the same way you can remove needed column from the table:</p>
<pre>ALTER TABLE employers DROP COLUMN position;</pre>
<p>To rename column name run:</p>
<pre>ALTER TABLE table_name CHANGE old_name new_name INTEGER</pre>
<p>Now update the data:</p>
<pre>UPDATE employers SET position='system engineer'
WHERE surname='Smith' AND name='Jonh';</pre>
<p>There are few examples with subqueries. If you need to select all data from <em><span style="text-decoration: underline;">emloyers</span></em> table and resolve department name from <em><span style="text-decoration: underline;">departments</span></em> table. Run:</p>
<pre>SELECT employers.name, employers.surname, employers.hire_date, departments.name
FROM employers INNER JOIN departments USING (department_id);</pre>
<p>To simplify a query use <a href="http://www.google.com.ua/search?hl=en&amp;source=hp&amp;q=mysql+alias&amp;aq=f&amp;aqi=g10&amp;aql=&amp;oq=&amp;gs_rfai=">alias</a>:</p>
<pre>SELECT <span style="color: #ff0000;">e</span>.name, <span style="color: #ff0000;">e</span>.surname, <span style="color: #ff0000;">e</span>.hire_date, <span style="color: #ff0000;">d</span>.name FROM employers <span style="color: #ff0000;">e</span>
INNER JOIN departments <span style="color: #ff0000;">d</span> USING (department_id);
+------+---------+------------+---------------+
| name | surname | hire_date  | name          |
+------+---------+------------+---------------+
| Jonh | Smith   | 2007-10-30 | departament A |
| Yan  | Brown   | 2008-11-23 | departament C |
+------+---------+------------+---------------+
2 rows in set (0.00 sec)</pre>
<p>Here is more complex query which is involves all 4 tables:</p>
<pre>SELECT e.name, e.surname, e.position, e.hire_date, d.name department, p.name project
FROM projects p
INNER JOIN project_involved USING (project_id)
INNER JOIN employers e USING (employer_id)
INNER JOIN departments d USING (department_id);
+------+---------+-----------------+------------+---------------+-----------------+
| name | surname | position        | hire_date  | department    | project         |
+------+---------+-----------------+------------+---------------+-----------------+
| Jonh | Smith   | system engineer | 2007-10-30 | departament A | General Project |
| Jonh | Smith   | system engineer | 2007-10-30 | departament A | Second Project  |
+------+---------+-----------------+------------+---------------+-----------------+
2 rows in set (0.00 sec)</pre>
<p>To remove database or table use <strong>DROP</strong>:</p>
<pre>DROP [database|table]</pre>
<p>For example:</p>
<pre>DROP employers;</pre>
<p>To see database or table structure use <strong>SHOW CREATE</strong>:</p>
<pre>SHOW CREATE TABLE table;</pre>
<pre>SHOW CREATE DATABASE company;</pre>
<pre>SHOW CREATE DATABASE company;
+----------+--------------------------------------------------------------------+
| Database | Create Database                                                    |
+----------+--------------------------------------------------------------------+
| company  | CREATE DATABASE `company` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+--------------------------------------------------------------------+</pre>
<h3 style="text-align: center;"><strong>BACKUPS</strong></h3>
<p>To make backups of your database use <strong>mysqldump</strong> :</p>
<pre>mysqldump -u root -p --database company &gt; company.sql</pre>
<p>To restores from backups :</p>
<pre>mysql -u root -p -e 'source company.sql' company</pre>
<p style="text-align: center;"><strong>CREATE USER</strong></p>
<pre>GRANT [privileges] ON [resource] TO [identity]</pre>
<p>In example I create user <em><span style="text-decoration: underline;">company_admin</span></em> which has  all privileges on all tables in database <span style="text-decoration: underline;"><em>company</em></span> from host <em><span style="text-decoration: underline;">localhost</span></em> with password <em><span style="text-decoration: underline;">secret-password</span></em>:</p>
<pre>GRANT ALL PRIVILEGES ON company.* TO company_admin@localhost
IDENTIFIED BY 'secret_password';</pre>
<p>There are some of the privileges, almost all of them is self-explained:</p>
<p><em>ALTER<br />
CREATE<br />
DELETE<br />
DROP<br />
GRANT<br />
INSERT<br />
SELECT<br />
UPDATE</em></p>
<p>For more details concerning <strong>GRANT</strong> go to <a href="http://dev.mysql.com/doc/refman/5.0/en/grant.html">ofdocs</a>.</p>
<p style="text-align: center"><strong>MYISAM VS INNODB</strong></p>
<p>InnoDB is set by default. And it&#8217;s speed and mature way to store simple data.</p>
<p>Advantages of InnoDB:</p>
<ol>
<li>transaction support</li>
<li>row-level locking</li>
<li>foreign key constraints</li>
</ol>
<p>To disadvantages we can attribute the next:</p>
<ol>
<li>don&#8217;t support full-text searching</li>
<li>some troubles with AUTO_INCREMENT columns</li>
</ol>
<p>To change of the table engine run:</p>
<pre>ALTER TABLE table ENGINE=[engine]</pre>
<pre>ALTER TABLE employers ENGINE=InnoDB</pre>
<p style="text-align: center;"><strong>FOREIGN KEY</strong></p>
<p>This feature help you to prevent your data from human mistake and keep it integrity.<br />
First, you need to convert your tables into InnoDB:</p>
<pre>ALTER TABLE table ENGINE=InnoDB;</pre>
<p>and set dependency:</p>
<pre>ALTER TABLE employers ADD CONSTRAINT dep_id_cons
FOREIGN KEY (department_id) REFERENCES departments (department_id);</pre>
<p>Now when we try to set employers.department_id which is not at departments.department_id. As result changes is not committed and we get an error:</p>
<pre>INSERT INTO employers (name,surname,department_id)
VALUES ('test','test','123');
ERROR 1452 (23000): Cannot add or update a child row:
a foreign key constraint fails (`company/employers`,
CONSTRAINT `dep_id_cons` FOREIGN KEY (`department_id`)
REFERENCES `departments` (`department_id`))</pre>
<p>To delete foreign key run:</p>
<pre>ALTER TABLE employers DROP FOREIGN KEY dep_id_cons;</pre>
]]></content:encoded>
			<wfw:commentRss>http://andriigrytsenko.net/2010/05/mysql-quick-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reset mysql password in several steps.</title>
		<link>http://andriigrytsenko.net/2009/08/reset-mysql-password-in-several-steps/</link>
		<comments>http://andriigrytsenko.net/2009/08/reset-mysql-password-in-several-steps/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 19:52:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Databases]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://andriigrytsenko.net/?p=437</guid>
		<description><![CDATA[Make new password for mysql user in 5 simple steps.

1.Stop mysql server:
#service mysql stop
2.Start in safe mode(use Ctrl+Z to send process to background):
#/usr/bin/mysqld_safe --skip-grant-tables --user=root &#038;
3.Login as root:
#mysql -u root
4.Make mysql execute next queries:
UPDATE mysql.user SET Password=PASSWORD(’newpwd’) WHERE User=’root’;
FLUSH PRIVILEGES;
exit;
Where newpwd is a new password for mysql user &#8220;root&#8221;.
5.Restart mysql:
#service mysql restart






Now you are ready [...]]]></description>
			<content:encoded><![CDATA[<p>Make new password for mysql user in 5 simple steps.<br />
<span id="more-437"></span></p>
<p>1.Stop mysql server:</p>
<pre>#service mysql stop</pre>
<p>2.Start in safe mode(use <em>Ctrl+Z</em> to send process to background):</p>
<pre>#/usr/bin/mysqld_safe --skip-grant-tables --user=root &#038;</pre>
<p>3.Login as root:</p>
<pre>#mysql -u root</pre>
<p>4.Make mysql execute next queries:</p>
<pre>UPDATE mysql.user SET Password=PASSWORD(’newpwd’) WHERE User=’root’;
FLUSH PRIVILEGES;
exit;</pre>
<p>Where <em>newpwd</em> is a new password for mysql user &#8220;root&#8221;.<br />
5.Restart mysql:</p>
<pre>#service mysql restart</pre>
<p>Now you are ready to connect to server with new password.</p>
]]></content:encoded>
			<wfw:commentRss>http://andriigrytsenko.net/2009/08/reset-mysql-password-in-several-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
