��������  ����Linux

mysql-logo.png (3082 bytes)MySQL���IJο��ֲ�

���ߣ����� ([email protected]��      ��ҳ��http://aosp.me


��һ��, ǰһ��, ��һ��, ���һ����Ŀ¼.


8 MySQL�̳�

����ͨ����ʾ���ʹ��mysql�ͻ��������ʹ��һ���򵥵����ݿ⣬�ṩһ��MySQL�����Ž̡̳�mysql����ʱ��Ϊ���ն˼���������ֻ�ǡ����ӡ�)��һ������ʽ��������������һ��MySQL�����������в�ѯ���쿴�����mysql����������ģʽ����Ԥ�ȰѲ�ѯ����һ���ļ��У�Ȼ�����mysqlִ���ļ������ݡ�ʹ��mysql�������������������漰��

Ϊ�˿�����mysql�ṩ��һ��ѡ����Ŀ���ˣ���--helpѡ���������

shell> mysql --help

���¼ٶ�mysql�Ѿ�����װ����Ļ����ϣ�������һ��MySQL��������������ӡ�����ⲻ����ģ��������MySQL����Ա����������ǹ���Ա���㽫��Ҫ����Ȿ�ֲ�������½ڡ���

��������������ʹ��һ�����ݿ��ȫ���̡����������Դ�ȡһ���Ѿ��������ݿ����Ȥ���������Ҫ�������������������ݿ⼰���������ı����½ڡ�

��Ȼ���±�������һ���̳̣�����ϸ���б�Ҫ��ʡ�ԡ������������漰�Ļ���ĸ�����Ϣ����ѯ���ֲ������½ڡ�

8.1 ������Ͽ�������

Ϊ�����ӷ��������������mysqlʱ����ͨ������Ҫ�ṩһ��MySQL�û����ͺܿ��ܣ�һ�������������������ڲ������¼��һ̨�����ϣ���Ҳ����Ҫָ������������ϵ��Ĺ���Ա���ҳ���Ӧ��ʹ��ʲô���Ӳ�����������(�����Ǹ��������û����ֺ�ʹ�õĿ���)��һ����֪����ȷ�IJ�������Ӧ�������������ӣ�

shell> mysql -h host -u user -p
Enter password: ********

********������Ŀ����mysql��ʾEnter password:��ʾʱ��������

����ܹ�������Ӧ�ÿ���mysql>��ʾ���һЩ������Ϣ��

shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 459 to server version: 3.22.20a-log

Type 'help' for help.

mysql> 

��ʾ��������mysql׼��Ϊ���������

һЩMySQL��װ�����û��ԡ�anoymous��(����)�û������ڱ������������еķ��������������Ļ����������������Ӧ����ͨ��û���κ�ѡ��ص���mysql��÷��������ӣ�

shell> mysql 
����ɹ������Ӻ��������mysql>��ʾ�´���QUIT��ʱ�Ͽ��� 
mysql> QUIT
Bye

��Ҳ���Լ���control-D�Ͽ���

�������½ڵĴ�������Ӷ����������ӵ�����������mysql>��ʾָ�����ǡ�

8.2 �����ѯ

ȷ�����������˷�������������ǰ���½����۵ġ���������������ѡ���κ����ݿ��������������Ǻܺá�����㽲��֪��������γ�ѯ�ʵ�һ��֪ʶ��������������������������װ�����ݲ��Ҵ����Ǽ�������Ҫ������Ҫд������������������Ļ���ԭ��ʹ�ü�����ѯ�����ܳ������Լ�mysql����ι����ġ�

����һ���򵥵����Ҫ����������������İ汾�ź͵�ǰ���ڡ���mysql>��ʾ��������������س�����

mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| version()    | CURRENT_DATE |
+--------------+--------------+
| 3.22.20a-log | 1999-03-19   |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>

��ѯ��˵������mysql������:

  • һ������ͨ����SQL�����ɣ������һ���ֺš�����һЩ���ⲻ��Ҫһ���ֺš������ᵽ��QUIT������֮һ�����ǽ��Ժ󿴵���������
  • ���㷢��һ������ʱ��mysql������������������ʾ�����Ȼ��������һ��mysql>��ʾ��׼���ý�����������
  • mysql��һ�ű���(�к���)��ʾ��ѯ�������һ�а����еı�ǩ����������ѯ�ʽ����ͨ���� �б�ǩ����ȡ�����ݿ�����е����֡���������ڼ���һ������ʽ���DZ��е�ֵ(��ղŵ�����)��mysql�ñ���ʽ��������С�
  • mysql��ʾ�����б����أ��Ͳ�ѯ���˶೤ִ�У��������ṩ���������ܵ�һ�����¸����Ϊ���DZ�ʾʱ��ʱ��(���� CPU �����ʱ��)��������Ϊ�����ܵ�������������غ�������ʱ��Ӱ�죬�����Щֵ�Dz���ȷ�ġ���Ϊ�˼�࣬�ڱ���ʣ�µ������в�����ʾ�������е��С�����

�ؼ��ʿ������κδ�Сд�ַ������롣����ѯ���ǵȼ۵ģ�

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;
����������һ����ѯ����˵�����ܽ�mysql����һ���򵥵ļ������� 
mysql> SELECT SIN(PI()/4), (4+1)*5;
+-------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+-------------+---------+
|    0.707107 |      25 |
+-------------+---------+

������ʾ���������൱�̵ģ�������䡣���������ڵ��������������䣬ֻ����һ���ֺŽ���ÿһ����

mysql> SELECT VERSION(); SELECT NOW();
+--------------+
| version()    |
+--------------+
| 3.22.20a-log |
+--------------+

+---------------------+
| NOW()               |
+---------------------+
| 1999-03-19 00:15:33 |
+---------------------+

һ�������ȫ��һ�������и�����������Ҫ���еĽϳ������һ�����⡣mysqlͨ��Ѱ����ֹ�ķֺŶ�����Ѱ�������еĽ������������������Ķ������������仰˵��mysql�������ɸ�ʽ���룺���ռ������е�ִ������ֱ���������ֺš���

������һ���򵥵Ķ����������ӣ�

mysql> SELECT
    -> USER()
    -> ,
    -> CURRENT_DATE;
+--------------------+--------------+
| USER()             | CURRENT_DATE |
+--------------------+--------------+
| joesmith@localhost | 1999-03-18   |
+--------------------+--------------+

����������У���������һ�����в�ѯ�ĵ�һ�к�Ҫע����ʾ����δ�mysql>��Ϊ->��������mysql���ָ����û������������䲢�����ڵȴ�ʣ��IJ��֡���ʾ����������ѣ���Ϊ���ṩ�м�ֵ�ķ����������ʹ�ø÷������㽫����֪��mysql���ڵȴ�ʲô��

�����������㲻��Ҫִ��������������������һ���������\cȡ������

mysql> SELECT
    -> USER()
    -> \c
mysql>

����ҲҪע����ʾ�����������\c�Ժ����л��ص�mysql>���ṩ�����Ա���mysql׼������һ�������

�±���ʾ������Կ����ĸ�����ʾ�����ܽ�������ζ��mysql��ʲô״̬�£�

��ʾ�� ��˼
mysql> ׼���ý���������
-> �ȴ������������һ��
'> �ȴ���һ�У��ռ��Ե�����(��'��)��ʼ���ַ���
"> �ȴ���һ�У��ռ���˫����(��"��)��ʼ���ַ���

���������һ�������Ϸ���һ������ʱ���������ͨ����żȻ�����֣�����������ֹ�ķֺš�����������У�mysql�ȴ���һ�����룺

mysql> SELECT USER()
    ->

����ⷢ����������(����Ϊ����������䵫��Ψһ�ķ�Ӧ��һ��->��ʾ��)���ܿ���mysql���ڵȴ��ֺš������û��ע�⵽��ʾ�����ڸ�����ʲô������ʶ������Ҫ��ʲô֮ǰ������ܻ�һ���ʱ��������Ƕ�������һ���ֺ������䣬����mysql��ִ������

mysql> SELECT USER()
    -> ;
+--------------------+
| USER()             |
+--------------------+
| joesmith@localhost |
+--------------------+

'>��">��ʾ�����������ַ����ռ��ڼ䡣��MySQL�У������д����'������"���ַ����������ַ��� (���磬'hello'��"goodbye")������mysql��������Խ���е��ַ��������㿴��һ��'>��">��ʾ��ʱ������ζ�����Ѿ������˰�������'������"�������ַ���ʼ���ַ�����һ�У����ǻ�û��������ֹ�ַ�����ƥ�����š������ȷʵ��������һ�������ַ������ܺã����ǹ�������𣿲���Ȼ���������ģ�'>��">��ʾ����ʾ����ĵ�ʡ����һ�������ַ������磺

mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
    ">
����������SELECT��䣬Ȼ�󰴻س������ȴ������ʲô��û�г��֡���Ҫ���ȣ���Ϊʲô�ò�ѯ��ô���أ�����ע��">��ʾ���ṩ����������������mysql��������һ��δ��ֹ�ַ��������²��֡�����������п����������ַ���"Smith���ö�ʧ�ڶ������š���

�ߵ���һ���������ʲô����򵥵���ȡ�����Ȼ��������������£��㲻��ֻ�Ǵ���\c����Ϊmysql��Ϊ�������ռ����ַ�����һ���������������෴������رյ������ַ�(����mysql֪����������ַ���)��Ȼ�����\c��

mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30;
    "> "\c
mysql>

��ʾ���ص�mysql>����ʾmysql׼���ý���һ���������ˡ�

֪��'>��">��ʾ����ζ��ʲô�Ǻ���Ҫ�ģ���Ϊ�������������һ��δ��ֹ���ַ������κα�����һ��������к���Ҫ��mysql����--��������QUIT���У�������൱�������ر���������ȡ����ǰ����ǰ������㲻֪������Ҫ�����ֹ���š�

8.3 ���ò�ѯ������

������һЩѧϰ�����MySQL���һЩ������������ӡ�

һЩ����ʹ�����ݿ����shop��������ij�����˵�ÿƪ����(��Ʒ��)�ļ۸񡣼ٶ�ÿ�����˵�ÿƪ������һ�������Ĺ̶��۸���ô(��Ʒ������)�Ǽ�¼��������

�������������������ݿ����

CREATE TABLE shop (
 article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
 dealer  CHAR(20)                 DEFAULT ''     NOT NULL,
 price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,
 PRIMARY KEY(article, dealer));

INSERT INTO shop VALUES
(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),
(3,'D',1.25),(4,'D',19.95);

���ˣ����������������ģ�

SELECT * FROM shop

+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0001 | A      |  3.45 |
|    0001 | B      |  3.99 |
|    0002 | A      | 10.99 |
|    0003 | B      |  1.45 |
|    0003 | C      |  1.69 |
|    0003 | D      |  1.25 |
|    0004 | D      | 19.95 |
+---------+--------+-------+

8.3.1 �е����ֵ

��������Ʒ����ʲô����

SELECT MAX(article) AS article FROM shop

+---------+
| article |
+---------+
|       4 |
+---------+

8.3.2 ӵ��ij���е����ֵ����

���ҳ��������µı�š����˺ͼ۸�

��ANSI-SQL�����������һ���Ӳ�ѯ������

SELECT article, dealer, price
FROM   shop
WHERE  price=(SELECT MAX(price) FROM shop)

��MySQL�У���û���Ӳ�ѯ)����2��������

  1. ��һ��SELECT���ӱ��еõ����ֵ��
  2. ʹ�ø�ֵ���ʵ�ʵIJ�ѯ��
    SELECT article, dealer, price
    FROM   shop
    WHERE  price=19.95
    

��һ����������ǰ��۸������������в���MySQL�ض�LIMIT�Ӿ�ֻ�õ��ĵ�һ�У�

SELECT article, dealer, price
FROM   shop
ORDER BY price DESC
LIMIT 1

ע��:����ж����������( ����ÿ��19.95)��LIMIT�������������ʾ����֮һ��

8.3.3 �е����ֵ�����飺ֻ��ֵ

��ÿƪ���µ���ߵļ۸���ʲô����

SELECT article, MAX(price) AS price
FROM   shop
GROUP BY article

+---------+-------+
| article | price |
+---------+-------+
|    0001 |  3.99 |
|    0002 | 10.99 |
|    0003 |  1.69 |
|    0004 | 19.95 |
+---------+-------+

8.3.4 ӵ��ij���ֶε�������ֵ����

����ÿƪ���£��ҳ������ļ۸�Ľ����ߡ���

��ANSI SQL�У��ҿ���������һ���Ӳ�ѯ������

SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article)

��MySQL�У�����Ƿּ���������

  1. �õ�һ����(���£�maxprice)����8.3.4 ӵ��ij�����������ֵ������
  2. ��ÿƪ���£��õ���Ӧ�ڴ洢���۸���С�

����Ժ�������һ����ʱ��������

CREATE TEMPORARY TABLE tmp (
        article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
        price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL);

LOCK TABLES article read;

INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;

SELECT article, dealer, price FROM shop, tmp
WHERE shop.article=tmp.articel AND shop.price=tmp.price;

UNLOCK TABLES;

DROP TABLE tmp;

����㲻ʹ��һ��TEMPORARY������Ҳ����������tmp������

������һ��������ѯ�����𣿡�

�ǵģ�����ֻ��ʹ���ҳ�֮Ϊ��MAX-CONCAT��ơ���һ���൱��Ч�Ĺ�ƣ�

SELECT article,
       SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,
  0.00+LEFT(      MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price
FROM   shop
GROUP BY article;

+---------+--------+-------+
| article | dealer | price |
+---------+--------+-------+
|    0001 | B      |  3.99 |
|    0002 | A      | 10.99 |
|    0003 | C      |  1.69 |
|    0004 | D      | 19.95 |
+---------+--------+-------+

������ӵ�Ȼ��ͨ���ڿͻ������зָ��������ʹ������Чһ�㡣

8.3.5 ʹ�����

����Ҫ�������2������

MySQLΨһ������������CHECK�Ա�֤��ʹ�õļ�ȷʵ�����������ñ��д��ڣ����������Զ�����һ���������ı���ɾ���С��������ƽ������ʹ����ļ�ֵ�����������úܺã�

CREATE TABLE persons (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    name CHAR(60) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE shirts (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    style ENUM('t-shirt', 'polo', 'dress') NOT NULL,
    color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,
    owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,
    PRIMARY KEY (id)
);

INSERT INTO persons VALUES (NULL, 'Antonio Paz');

INSERT INTO shirts VALUES
(NULL, 'polo', 'blue', LAST_INSERT_ID()),
(NULL, 'dress', 'white', LAST_INSERT_ID()),
(NULL, 't-shirt', 'blue', LAST_INSERT_ID());

INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska');

INSERT INTO shirts VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());

SELECT * FROM persons;
+----+---------------------+
| id | name                |
+----+---------------------+
|  1 | Antonio Paz         |
|  2 | Lilliana Angelovska |
+----+---------------------+

SELECT * FROM shirts;
+----+---------+--------+-------+
| id | style   | color  | owner |
+----+---------+--------+-------+
|  1 | polo    | blue   |     1 |
|  2 | dress   | white  |     1 |
|  3 | t-shirt | blue   |     1 |
|  4 | dress   | orange |     2 |
|  5 | polo    | red    |     2 |
|  6 | dress   | blue   |     2 |
|  7 | t-shirt | white  |     2 |
+----+---------+--------+-------+

SELECT s.* FROM persons p, shirts s
 WHERE p.name LIKE 'Lilliana%'
   AND s.owner = p.id
   AND s.color &lt;&gt; 'white';

+----+-------+--------+-------+
| id | style | color  | owner |
+----+-------+--------+-------+
|  4 | dress | orange |     2 |
|  5 | polo  | red    |     2 |
|  6 | dress | blue   |     2 |
+----+-------+--------+-------+

8.4 ���첢ʹ��һ�����ݿ�

��Ȼ��֪������������������Ǵ�ȡһ�����ݿ��ʱ���ˡ�

�ٶ�����ļ�(��ġ�����԰��)���кܶ�����������׷�ٹ������Ǹ��ָ������͵���Ϣ�������ͨ��������������������ݲ���������Ҫ����Ϣװ������������Ȼ�������ͨ���ӱ��м����������ش������Ķ��ﲻͬ��������⡣������ʾ�������������Щ���飺

  • ��������һ�����ݿ�
  • ��������һ�����ݿ��
  • ����װ�����ݵ����ݿ��
  • �����Ը��ַ����ӱ��м�������
  • ����ʹ�ö����

����԰���ݿ⽫���Ǽ򵥵�(�����)�����Dz��Ѱ�������ɿ����õ������������ݿ����ʵ������������磬������һ�����ݿ��ܱ�һ��ũ������׷�ټ��󣬻���һ����ҽ׷�ٲ����¼��

ʹ��SHOW����ҳ��ڷ������ϵ�ǰ����ʲô���ݿ⣺

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
| tmp      |
+----------+

���ݿ��б���������Ļ������Dz�ͬ�ģ�����mysql��test���ݿ�ܿ��ܵ�����䡣mysql�DZ���ģ���Ϊ�������û���ȡȨ�ޣ�test���ݿ⾭����Ϊһ���������ṩ���û��������֡�

���test���ݿ���ڣ����Դ�ȡ����

mysql> USE test
Database changed

ע�⣬USE������QUIT������Ҫһ���ֺš��������ϲ�����������һ���ֺ���ֹ��������䣻���ް�)USE�����ʹ����Ҳ������һ������ĵط�����������һ�������ϸ�����

������ں����������ʹ��test���ݿ�(������ܷ�����)���������ڸ����ݿⴴ�����κζ������Ա����������������ɾ����Ϊ�����ԭ�������Ӧ��ѯ�����MySQL����Ա�������Լ�ʹ�õ�һ�����ݿ⡣�ٶ�����Ҫ�������menagerie������Ա��Ҫִ��һ�����������

mysql> GRANT ALL ON menagerie.* TO your_mysql_name;

����your_mysql_name�Ƿ�������MySQL�û�����

8.4.1 ������ѡ��һ�����ݿ�

������������Ȩ��ʱ������ԱΪ�㴴�������ݿ⣬����Կ�ʼʹ��������������Ҫ�Լ���������

mysql> CREATE DATABASE menagerie;

��Unix�£����ݿ����������ִ�Сд��(����SQL�ؼ���)����������������menagerie����������ݿ⣬����Menagerie��MENAGERIE��һЩ�������֡��Ա���Ҳ�������ġ�����Windows�£������Ʋ����ã������������һ�������IJ�ѯ��ʹ��ͬ���Ĵ�Сд���������ݿ�ͱ�����

������һ�����ݿⲢ��ѡ����ʹ�������������ȷ��������¡�Ϊ��ʹmenagerie��Ϊ��ǰ�����ݿ⣬ʹ��������

mysql> USE menagerie
Database changed

������ݿ�ֻ��Ҫ����һ�Σ������������ÿ������һ��mysql�ỰʱΪʹ�ö�ѡ������������ɷ�������һ��USE������������⣬�������ʱmysql���������������ѡ�����ݿ⣬�����������Ҫ�ṩ���κ����Ӳ���֮��ָ�������֡����磺

shell> mysql -h host -u user -p menagerie
Enter password: ********

ע�⣬menagerie�������ڸղ���ʾ����Ŀ���������Ҫ������������-pѡ����ṩ��Ŀ�����������û�ж���Ŀո�(���磬��-pmypassword������-p mypassword)��Ȼ�������������Ŀ�������������ϣ���Ϊ������������¶�������ܱ�����Ļ����ϵ�¼�������û���̽����

8.4.2 ����һ�����ݿ��

�������ݿ������׵IJ��֣���������ʱ���ǿյģ�����SHOW TABLES�������㣺

mysql> SHOW TABLES;
Empty set (0.00 sec)

���ѵIJ����Ǿ���������ݿ�ṹӦ����ʲô���㽫��Ҫʲô���ݿ����������������ʲô�����С�

�㽫��Ҫһ��������ÿ������ļ�¼�ı������ɳ�Ϊpet����������Ӧ�ð��������٣�ÿ����������֡���Ϊ���ֱ������Ǻ���Ȥ����Ӧ�ð����������Ϣ�����磬������㻿������ļ�ͥ�г���һ���ˣ��������Ҫ�г�ÿ����������ˡ������Ҳ��Ҫ��¼����������Ա��һЩ������������Ϣ��

�����أ��ǿ�����Ȥ��������һ�����ݿ��д洢����һ�������顣��������ʱ�����Ŷ��仯������ζ���㽫Ҫ���ϵظ�����ļ�¼���෴, �洢һ���̶�ֵ�������ձȽϺã���ô�����ۺ�ʱ����Ҫ���䣬������Ե�ǰ���ںͳ�������֮��IJ������������MySQLΪ���������ṩ�˺���������Ⲣ�����ѡ��洢�������ڶ�������Ҳ�������ŵ㣺

  • ����Խ����ݿ����������������������ɼ��������ij������յ���ʾ�����������Ϊ�����ѯ�ǵ����ע�⣬������һ���������ݿ�����ʾ�㲻��Ҫ������������ף�صĿͻ��Ļ�������ͬһ�����⣬��Ϊ���������˽�����硣��
  • �������������ڶ���ֹ�ǵ�ǰ�������������䡣���磬����������ݿ�洢�������ڣ��������׼���һֻ�����Ǻ�ʱ������ġ�

������뵽pet�����������õ�����������Ϣ�����ǵ�ĿǰΪֹ��Щ�������㹻�ˣ����֡����ˡ����࣬�Ա𡢳������������ڡ�

ʹ��һ��CREATE TABLE���ָ��������ݿ���IJ��֣�

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
    -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

VARCHAR��name��owner��species���Ǹ��õ�ѡ����Ϊ��ֵ�����DZ䳤�ġ���Щ�еij��ȶ���������ͬ�ģ����Ҳ�����20���������ѡ��1��255���κγ��ȣ������ĸ�������˵���������������������˽ϲ��ѡ���Ժ��������Ҫһ���������ֶΣ�MySQL�ṩһ��ALTER TABLE��䡣��

�����Ա����������෽����ʾ�����磬"m"��"f"����Ҳ��"male"��"female"��ʹ�õ����ַ�"m"��"f"����򵥵ġ�

Ϊbirth��death��ʹ��DATE�����������൱���Ե�ѡ��

��Ȼ�㴴����һ������SHOW TABLESӦ�ò���һЩ�����

mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet                 |
+---------------------+

Ϊ����֤��ı��ǰ��������ķ�ʽ��������ʹ��һ��DESCRIBE��䣺

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

������ʱDESCRIBE�����磬���������������е��е����ֻ�������ʲô���͡�

8.4.3 ������װ��һ�����ݿ��

���㴴����������Ҫ��ʵ����LOAD DATA��INSERT������ڴˡ�

�ٶ���ij����¼�������¡����۲쵽MySQL��������ʱ��YYYY-MM-DD��ʽ�����������ϰ�ߵIJ�ͬ����

name owner species sex birth death
Fluffy Harold cat f 1993-02-04 ��
Claws Gwen cat m 1994-03-17 ��
Buffy Harold dog f 1989-05-13 ��
Fang Benny dog m 1990-08-27 ��
Bowser Diane dog m 1998-08-31 1995-07-29
Chirpy Gwen bird f 1998-09-11 ��
Whistler Gwen bird �� 1997-12-09 ��
Slim Benny snake m 1996-04-29 ��

��Ϊ���Ǵ�һ�ſձ���ʼ�ģ���ʵ����һ�����׷����Ǵ�������Ϊ��Ķ����һ��һ���ı��ļ���Ȼ����һ���������װ���ļ������ݵ����С�

����Դ���һ���ı��ļ���pet.txt����ÿ�а���һ����¼���ö�λ��(tab)��ֵ�ֿ�����������CREATE TABLE������г����д�����������ڶ�ʧ��ֵ(����δ֪���Ա𣬻���Ȼ���ŵĶ������������)�������ʹ��NULLֵ��Ϊ��������ı��ļ���ʾ��Щ��ʹ��\N�����磬��Whistler��ļ�¼��������������(������ֵ֮��Ŀհ���һ�������Ķ�λ�ַ�)��

Whistler Gwen bird \N 1997-12-09 \N

Ϊ��װ���ı��ļ���pet.txt����pet���У�ʹ��������

mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;

�����Ը�⣬������ȷ����LOAD DATA�����ָ����ֵ�ķָ�������β��ǣ�����ȱʡ�Ƕ�λ���ͻ��з�����Щ����ȡ�����ļ���pet.txt����������㹻�ġ�

������Ҫһ������һ���¼�¼ʱ��INSERT��������õġ�������򵥵���ʽ����Ϊÿһ���ṩֵ��������CREATE TABLE��䱻�г���˳�򡣼ٶ�Diane��һֻ�²�������ΪPuffball�������ʹ��һ������INSERT�������һ���¼�¼��

mysql> INSERT INTO pet
    -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

ע�⣬�����ַ���������ֵ��ָ��Ϊ�������������ַ��������⣬��INSERT������ֱ�Ӳ���NULL���������ڵ�ֵ���㲻��ʹ��\N����������LOAD DATA����������

��������ӣ���Ӧ���ܿ����漰�ܶ�ļ����ö��INSERT�����ǵ���LOAD DATA���װ����ij�ʼ��¼��

8.4.4 ��һ�����ݿ��������Ϣ

SELECT��䱻������һ������������Ϣ������һ���ʽ�ǣ�

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy

what_to_selectָ������Ҫ�����ģ���������е�һ�ű�����*���������е��С���which_tableָ������Ҫ����������ݵı���WHERE�Ӿ��ǿ�ѡ�ģ�������ڣ�conditions_to_satisfyָ���б�������ļ���������

8.4.4.1 ѡ����������

SELECT��򵥵���ʽ�Ǵ�һ�ű��м���ÿ��������

mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL       |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog     | f    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog     | m    | 1998-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       |
+----------+--------+---------+------+------------+------------+

�������Ҫ������������������ʽ��SELECT�Ǻ����õġ����磬����ոո���װ������ij�ʼ���ݼ�װ�Ժ󡣵�������ʱ���ղ���ʾ�������ʾ������������ļ���һ��������Bowser�����Ժ�������Ҫ�����ˣ������ԭ���ļ��ף��㷢����ȷ�ij�������1989��������1998��

������һЩ�������ķ�����

  • �༭�ļ���pet.txt����������Ȼ��ʹ��DELETE��LOAD DATAŪ�ձ������ٴ�װ����:
    mysql> DELETE FROM pet;
    mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;
    

    Ȼ��, ��������������������������Puffball��¼��

  • ��һ��UPDATE�������������¼��
    mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser";
    

������ʾ�����������������׵ģ�����һ���㲻�����������ر�ص�����úܴ�ʱ���෴����ͨ���Իش�һ���ر�����������Ȥ���������������������Ҫ����Ϣ��ָ��һЩ���ơ������ǿ�һЩ���ǻش��й������������ѡ���ѯ��

8.4.4.2 ѡ���ض���

���ܴ���ı���ֻѡ���ض����С����磬�������Ҫ��֤���Bowser�ij������������ĸı䣬��������ѡBowser�ļ�¼��

mysql> SELECT * FROM pet WHERE name = "Bowser";
+--------+-------+---------+------+------------+------------+
| name   | owner | species | sex  | birth      | death      |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+

���֤ʵ���������ȷ��¼Ϊ1989��������1998��

�ַ����Ƚ�ͨ���Ǵ�СЩ�޹صģ���������ָ������Ϊ"bowser"��"BOWSER"�ȵȣ���ѯ���������ͬ�ġ�

�������κ�����ָ����������ֻ��name�����磬�������Ҫ֪���ĸ�������1998�Ժ�����ģ�����birth�У�

mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
| Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
+----------+-------+---------+------+------------+-------+

����������������磬�ҳ����ԵĹ���

mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

����IJ�ѯʹ��AND�߼���������Ҳ��һ��OR��������

mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL  |
| Slim     | Benny | snake   | m    | 1996-04-29 | NULL  |
+----------+-------+---------+------+------------+-------+

AND��OR���Ի��á��������������ʹ������ָ������Ӧ����α�������һ�������⣺

mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m")
    -> OR (species = "dog" AND sex = "f");
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

8.4.4.3 ѡ���ض���

����㲻��Ҫ������ı��������У������������Ȥ���У��ö��ŷֿ������磬�������Ҫ֪����Ķ���ʲôʱ������ģ���ѡname��birth�У�

mysql> SELECT name, birth FROM pet;
+----------+------------+
| name     | birth      |
+----------+------------+
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Buffy    | 1989-05-13 |
| Fang     | 1990-08-27 |
| Bowser   | 1989-08-31 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+

�ҳ�˭ӵ�г��ʹ�������ѯ��

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+

Ȼ����ע�⵽��ѯ�򵥵ؼ���ÿ����¼��owner�ֶΣ����������е�һЩ���ֶ�Ρ�Ϊ��ʹ����������٣�ͨ�����ӹؼ���DISTINCT������ÿ��Ψһ�������¼��

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+

����ʹ��һ��WHERE�Ӿ����ѡ������ѡ�����ϡ����磬Ϊ��ֻ�õ�����è�ij������ڣ�ʹ�������ѯ��

mysql> SELECT name, species, birth FROM pet
    -> WHERE species = "dog" OR species = "cat";
+--------+---------+------------+
| name   | species | birth      |
+--------+---------+------------+
| Fluffy | cat     | 1993-02-04 |
| Claws  | cat     | 1994-03-17 |
| Buffy  | dog     | 1989-05-13 |
| Fang   | dog     | 1990-08-27 |
| Bowser | dog     | 1989-08-31 |
+--------+---------+------------+

8.4.4.4 ������

������Ѿ�ע�⵽ǰ��������н����û�����ض��Ĵ�����ʾ��Ȼ����������ij��������ķ�ʽ���򣬼����ѯ���ͨ���Ǹ����׵ġ�Ϊ����������ʹ��һ��ORDER BY�Ӿ䡣

�����Ƕ������գ�����������

mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name     | birth      |
+----------+------------+
| Buffy    | 1989-05-13 |
| Bowser   | 1989-08-31 |
| Fang     | 1990-08-27 |
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Slim     | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy   | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+

Ϊ����������������DESC���½� )�ؼ��ֵ�����������������ϣ�

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name     | birth      |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Claws    | 1994-03-17 |
| Fluffy   | 1993-02-04 |
| Fang     | 1990-08-27 |
| Bowser   | 1989-08-31 |
| Buffy    | 1989-05-13 |
+----------+------------+

�����ڶ�������������磬���������������Ȼ�����գ������Ƕ���������������Ķ��ʹ�����в�ѯ��

mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;
+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Chirpy   | bird    | 1998-09-11 |
| Whistler | bird    | 1997-12-09 |
| Claws    | cat     | 1994-03-17 |
| Fluffy   | cat     | 1993-02-04 |
| Fang     | dog     | 1990-08-27 |
| Bowser   | dog     | 1989-08-31 |
| Buffy    | dog     | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim     | snake   | 1996-04-29 |
+----------+---------+------------+

ע��DESC�ؼ��ʽ������ڽ�������֮ǰ��������(birth)��speciesֵ��Ȼ����������

8.4.4.5 ���ڼ���

MySQL�ṩ������������������ִ���������ϵļ��㣬���磬�����������ȡ���ڵIJ��֡�

Ϊ�˾������ÿ�������ж���ó������ں͵�ǰ����֮��IJ��������䡣ͨ���任2�����ڵ�������ȡ��ֵ��������365��(��һ���������)��

mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 FROM pet;
+----------+-------------------------------------+
| name     | (TO_DAYS(NOW())-TO_DAYS(birth))/365 |
+----------+-------------------------------------+
| Fluffy   |                                6.15 |
| Claws    |                                5.04 |
| Buffy    |                                9.88 |
| Fang     |                                8.59 |
| Bowser   |                                9.58 |
| Chirpy   |                                0.55 |
| Whistler |                                1.30 |
| Slim     |                                2.92 |
| Puffball |                                0.00 |
+----------+-------------------------------------+

���ܲ�ѯ���У������������ܱ��Ľ���һЩ���顣���ȣ��������ij�������ʾ�������ܸ����ױ�ɨ�衣�ڶ��������еı��ⲻ�Ǻ�������ġ�

��һ������ͨ������һ��ORDER BY name�Ӿ䰴������������������Ϊ�˴����б��⣬Ϊ���ṩһ�������Ա�һ����ͬ�ı�ǩ�����������(�ⱻ��Ϊһ���б���)��

mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age
    -> FROM pet ORDER BY name;
+----------+------+
| name     | age  |
+----------+------+
| Bowser   | 9.58 |
| Buffy    | 9.88 |
| Chirpy   | 0.55 |
| Claws    | 5.04 |
| Fang     | 8.59 |
| Fluffy   | 6.15 |
| Puffball | 0.00 |
| Slim     | 2.92 |
| Whistler | 1.30 |
+----------+------+

Ϊ�˰�age����name���������ֻҪʹ��һ����ͬORDER BY�Ӿ䣺

mysql>  SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age
    ->  FROM pet ORDER BY age;
+----------+------+
| name     | age  |
+----------+------+
| Puffball | 0.00 |
| Chirpy   | 0.55 |
| Whistler | 1.30 |
| Slim     | 2.92 |
| Claws    | 5.04 |
| Fluffy   | 6.15 |
| Fang     | 8.59 |
| Bowser   | 9.58 |
| Buffy    | 9.88 |
+----------+------+

һ�����ƵIJ�ѯ���Ա�����ȷ���Ѿ�����������������䡣��ͨ�����deathֵ�Ƿ���NULL��������Щ����Щ���Ȼ�󣬶�����Щ�з�NULLֵ��������death��birthֵ֮��IJ��

mysql>  SELECT name, birth, death, (TO_DAYS(death)-TO_DAYS(birth))/365 AS age
    ->  FROM pet WHERE death IS NOT NULL ORDER BY age;
+--------+------------+------------+------+
| name   | birth      | death      | age  |
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 | 5.91 |
+--------+------------+------------+------+

��ѯʹ��death IS NOT NULL����death != NULL����ΪNULL�������ֵ�����Ժ����͡���8.4.4.6 ��NULLֵ������

�������Ҫ֪���ĸ������¸��¹����գ���ô�죿����������㣬��������޹صģ���򵥵���Ҫ��ȡbirth�е��·ݲ��֡�MySQL�ṩ�������ڲ��ֵ���ȡ����������YEAR()��MONTH()��DAYOFMONTH()��������MONTH()���ʺϵĺ�����Ϊ�˿�����������������һ���򵥵IJ�ѯ����ʾbirth��MONTH(birth)��ֵ��

mysql> SELECT name, birth, MONTH(birth) FROM pet;
+----------+------------+--------------+
| name     | birth      | MONTH(birth) |
+----------+------------+--------------+
| Fluffy   | 1993-02-04 |            2 |
| Claws    | 1994-03-17 |            3 |
| Buffy    | 1989-05-13 |            5 |
| Fang     | 1990-08-27 |            8 |
| Bowser   | 1989-08-31 |            8 |
| Chirpy   | 1998-09-11 |            9 |
| Whistler | 1997-12-09 |           12 |
| Slim     | 1996-04-29 |            4 |
| Puffball | 1999-03-30 |            3 |
+----------+------------+--------------+

���¸��µ������ҳ�����Ҳ�����׵ġ��ٶ���ǰ����4�£���ô��ֵ��4������Ѱ����5�³����Ķ��� (5��)�� ��������

mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5;
+-------+------------+
| name  | birth      |
+-------+------------+
| Buffy | 1989-05-13 |
+-------+------------+

��Ȼ�����ǰ�·���12�£����е㸴���ˡ��㲻��ֻ�Ѽ�1���·���(12)�ϲ���Ѱ����13�³����Ķ����Ϊû���������·ݡ��෴����Ѱ����1�³����Ķ���(1��) ��

���������Ա�д��ѯ�Ա㲻�ܵ�ǰ�·���ʲô�����ܹ��������ַ����㲻���ڲ�ѯ��ʹ��һ���ض����·����֣�DATE_ADD()�������ʱ�����ӵ�һ�����������ڡ�������һ���¼ӵ�NOW()ֵ�ϣ�Ȼ����MONTH()��ȡ�·ݲ��֣��������Ѱ�����յ��·ݣ�

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));

���ͬ�������һ����ͬ�����Ǽ�1�Եó���ǰ�·ݵ���һ����(��ʹ��ȡģ����(MOD)���������ǰ��12�����ƻء��·ݵ�ֵ0)��

mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MOD(MONTH(NOW()), 12) + 1;

ע�⣬MONTH������1��12֮���һ�����֣���MOD(something,12)������0��11֮���һ�����֣���˱�����MOD()�Ժ��1���������ǽ���11��( 11 )����1��(1)��

8.4.4.6 NULLֵ����

NULLֵ���ܺ����ֱ����ϰ�������������ϣ�NULL��ζ�š�û��ֵ����δֵ֪���������������е����ڲ�ͬ��ֵ��Ϊ�˲���NULL���㲻��ʹ�������Ƚ����������=��<��!=��Ϊ��˵�������������в�ѯ��

mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

����������Щ�Ƚ��еõ���������Ľ�����෴ʹ��IS NULL��IS NOT NULL��������

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

��MySQL�У�0��ζ�żٶ�1��ζ���档

NULL��������Ĵ�����Ϊʲô����ǰ����½��У�Ϊ�˾����ĸ����ﲻ���ǻ��ŵģ�ʹ��death IS NOT NULL������death != NULL�DZ�Ҫ�ġ�

8.4.4.7 ģʽƥ��

MySQL�ṩ��׼��SQLģʽƥ�䣬�Լ�һ�ֻ�����Unixʵ�ó�����vi��grep��sed����չ�������ʽģʽƥ��ĸ�ʽ��

SQL��ģʽƥ��������ʹ����_��ƥ���κε����ַ�������%��ƥ��������Ŀ�ַ�(��������ַ�)���� MySQL�У�SQL��ģʽȱʡ�Ǻ��Դ�Сд�ġ�������ʾһЩ���ӡ�ע������ʹ��SQLģʽʱ���㲻��ʹ��=��!=����ʹ��LIKE��NOT LIKE�Ƚϲ�������

Ϊ���ҳ�����b����ͷ�����֣�

mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

Ϊ���ҳ�����fy����β�����֣�

mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

Ϊ���ҳ�����һ����w�������֣�

mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

Ϊ���ҳ���������5���ַ������֣�ʹ����_��ģʽ�ַ���

mysql> SELECT * FROM pet WHERE name LIKE "_____";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

��MySQL�ṩ��ģʽƥ�������������ʹ����չ�������ʽ�����������ģʽ����ƥ�����ʱ��ʹ��REGEXP��NOT REGEXP������(��RLIKE��NOT RLIKE��������ͬ���)��

��չ�������ʽ��һЩ�ַ��ǣ�

  • ��.��ƥ���κε������ַ���
  • һ���ַ�����[...]��ƥ���ڷ������ڵ��κ��ַ������磬��[abc]��ƥ����a������b������c����Ϊ�������ַ���һ����Χ��ʹ��һ����-������[a-z]��ƥ���κ�Сд��ĸ������[0-9]��ƥ���κ����֡�
  • �� * ��ƥ�������������ǰ��Ķ��������磬��x*��ƥ���κ���������x���ַ�����[0-9]*��ƥ����κ����������֣�����.*��ƥ���κ��������κζ�����
  • �������ʽ�����ִ�Сд�ģ����������ϣ��������ʹ��һ���ַ���ƥ������д�������磬��[aA]��ƥ��Сд���д�ġ�a������[a-zA-Z]��ƥ������д�����κ���ĸ��
  • ����������ڱ�����ֵ���κεط���ģʽ��ƥ��(ֻҪ����ƥ������ֵ��SQLģʽƥ��)��
  • Ϊ�˶�λһ��ģʽ�Ա�������ƥ�䱻����ֵ�Ŀ�ʼ���β����ģʽ��ʼ��ʹ����^������ģʽ�Ľ�β�á�$����

Ϊ��˵����չ�������ʽ��ι�����������ʾ��LIKE��ѯ������ʹ��REGEXP��д��

Ϊ���ҳ�����b����ͷ�����֣�ʹ����^��ƥ�����ֵĿ�ʼ������[bB]��ƥ��Сд���д�ġ�b����

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
+--------+--------+---------+------+------------+------------+
| name   | owner  | species | sex  | birth      | death      |
+--------+--------+---------+------+------------+------------+
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL       |
| Bowser | Diane  | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

Ϊ���ҳ�����fy����β�����֣�ʹ����$��ƥ�����ֵĽ�β��

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name   | owner  | species | sex  | birth      | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat     | f    | 1993-02-04 | NULL  |
| Buffy  | Harold | dog     | f    | 1989-05-13 | NULL  |
+--------+--------+---------+------+------------+-------+

Ϊ���ҳ�����һ����w�������֣�ʹ����[wW]��ƥ��Сд���д�ġ�w����

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
+----------+-------+---------+------+------------+------------+
| name     | owner | species | sex  | birth      | death      |
+----------+-------+---------+------+------------+------------+
| Claws    | Gwen  | cat     | m    | 1994-03-17 | NULL       |
| Bowser   | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL       |
+----------+-------+---------+------+------------+------------+

��Ȼ���һ���������ʽ������ֵ���κεط�����ģʽƥ���ˣ��Ͳ�������ǰ�IJ�ѯ����ģʽ�����������һ��ͨ�����ʹ����ƥ������ֵ�����������ʹ����һ��SQLģʽ������

Ϊ���ҳ���������5���ַ������֣�ʹ����^������$��ƥ�����ֵĿ�ʼ�ͽ�β����5����.��ʵ��������֮�䣺

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

��Ҳ����ʹ����{n}�����ظ�n�Ρ���������д��ǰ�IJ�ѯ��

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

8.4.4.8 ���

���ݿ⾭�����ڻش�������⣬��ij�����͵�������һ�ű��г��ֵ�Ƶ��?�����磬�������Ҫ֪�����ж��ٳ����ÿλ�����ж��ٳ�����������Ҫ����Ķ�����ʩ�и������͵��ղ顣

������ӵ�ж�����������롰��pet�����ж�����?����ͬ�������⣬��Ϊÿ��������һ����¼��COUNT()����������NULL�������Ŀ����������Ķ���IJ�ѯ��������������

mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
|        9 |
+----------+

��ǰ�棬�������ӵ�г�����˵����֡��������Ҫ֪��ÿ�������ж��ٳ�������ʹ��COUNT()������

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;
+--------+----------+
| owner  | COUNT(*) |
+--------+----------+
| Benny  |        2 |
| Diane  |        2 |
| Gwen   |        3 |
| Harold |        2 |
+--------+----------+

ע�⣬ʹ��GROUP BY��ÿ��owner�������м�¼��û��������õ���һ����һ��������Ϣ��

mysql> SELECT owner, COUNT(owner) FROM pet;
ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
with no GROUP columns is illegal if there is no GROUP BY clause

COUNT()��GROUP BY���Ը��ַ�ʽ����������ݺ����á�����������ʾ��ʵʩ�����ղ�����IJ�ͬ��ʽ��

ÿ�ֶ���������

mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;
+---------+----------+
| species | COUNT(*) |
+---------+----------+
| bird    |        2 |
| cat     |        2 |
| dog     |        3 |
| hamster |        1 |
| snake   |        1 |
+---------+----------+

ÿ���Ա�Ķ���������

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+------+----------+
| sex  | COUNT(*) |
+------+----------+
| NULL |        1 |
| f    |        4 |
| m    |        4 |
+------+----------+

�����������У�NULL��ʾ��δ֪�Ա𡱡���

��������Ա���ϵĶ���������

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
+---------+------+----------+
| species | sex  | COUNT(*) |
+---------+------+----------+
| bird    | NULL |        1 |
| bird    | f    |        1 |
| cat     | f    |        1 |
| cat     | m    |        1 |
| dog     | f    |        1 |
| dog     | m    |        2 |
| hamster | f    |        1 |
| snake   | m    |        1 |
+---------+------+----------+

����ʹ��COUNT()ʱ���㲻�ؼ�������һ�ű�������, ��ǰ�IJ�ѯ����ֻ�ڹ���è��ʩ��ʱ����������������

mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE species = "dog" OR species = "cat"
    -> GROUP BY species, sex;
+---------+------+----------+
| species | sex  | COUNT(*) |
+---------+------+----------+
| cat     | f    |        1 |
| cat     | m    |        1 |
| dog     | f    |        1 |
| dog     | m    |        2 |
+---------+------+----------+

����������Ҫ֪����֪�Ա�İ��Ա�Ķ�����Ŀ��

mysql> SELECT species, sex, COUNT(*) FROM pet
    -> WHERE sex IS NOT NULL
    -> GROUP BY species, sex;
+---------+------+----------+
| species | sex  | COUNT(*) |
+---------+------+----------+
| bird    | f    |        1 |
| cat     | f    |        1 |
| cat     | m    |        1 |
| dog     | f    |        1 |
| dog     | m    |        2 |
| hamster | f    |        1 |
| snake   | m    |        1 |
+---------+------+----------+

8.4.5 ʹ�ö�����ݿ��

pet��׷�������ĸ�����������Ҫ��¼���ǵ�������Ϣ������������һ�����¼�����ҽ���ʱ�������������Ҫ����ı������ű�Ӧ����ʲô�أ�

  • ����Ҫ�����������������֪��ÿ���¼����ڴ˶��
  • ����Ҫһ�����������֪���¼�ʲôʱ�����ġ�
  • ��Ҫһ���ֶ������¼���
  • �������Ҫ�ɷ����¼�����һ���¼������ֶν������õġ�

��������Щ���ǣ�Ϊevent����CREATE TABLE�����ܿ�������������

mysql> CREATE TABLE event (name VARCHAR(20), date DATE,
    -> type VARCHAR(15), remark VARCHAR(255));

����pet���������׵�ʾͨ������������Ϣ��һ����λ���ָ����ı��ļ�װ�س�ʼ��¼��

Fluffy 1995-05-15 litter 4 kittens, 3 female, 1 male
Buffy 1993-06-23 litter 5 puppies, 2 female, 3 male
Buffy 1994-06-19 litter 3 puppies, 3 female
Chirpy 1999-03-21 vet needed beak straightened
Slim 1997-08-03 vet broken rib
Bowser 1991-10-12 kennel
Fang 1991-10-12 kennel
Fang 1998-08-28 birthday Gave him a new chew toy
Claws 1998-03-17 birthday Gave him a new flea collar
Whistler 1998-12-09 birthday First birthday

������װ�ؼ�¼��

mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;

��������Ѿ�������pet���ϵIJ�ѯ��ѧ���ģ���Ӧ����ִ����event���м�¼�ļ�����ԭ����һ���ġ�����ʲôʱ����event�����������Իش�������ʵ������أ�

����������һ��С����ʱ���ٶ�����Ҫ�ҳ�ÿֻ��������䡣 event��ָ����ʱ����������Ϊ�˼���ĸ�׵����䣬����Ҫ���ij������ڡ���Ȼ�����洢��pet���У�Ϊ�˲�ѯ����Ҫ���ű���

mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark
    -> FROM pet, event
    -> WHERE pet.name = event.name AND type = "litter";
+--------+------+-----------------------------+
| name   | age  | remark                      |
+--------+------+-----------------------------+
| Fluffy | 2.27 | 4 kittens, 3 female, 1 male |
| Buffy  | 4.12 | 5 puppies, 2 female, 3 male |
| Buffy  | 5.10 | 3 puppies, 3 female         |
+--------+------+-----------------------------+

���ڸò�ѯҪע��ļ������飺

  • FROM�Ӿ��г�����������Ϊ��ѯ��Ҫ����������������Ϣ��
  • �����(����-join)���Զ��������Ϣʱ������Ҫָ����һ�����еļ�¼������ƥ���������ļ�¼����ܼ򵥣���Ϊ���Ƕ���һ��name�С���ѯʹ��WHERE�Ӿ����nameֵ��ƥ��2�����еļ�¼��
  • ��Ϊname�г������������У���������ʱ����һ��Ҫָ���ĸ�������ͨ���ѱ�����������ǰ������

�㲻����2����ͬ�ı���ִ��һ�����ᡣ�������Ҫ��һ�����ļ�¼��ͬһ������������¼���бȽϣ�����һ������������ʱ�����õġ����磬Ϊ������ij���֮�з�ֳ��ż���������pet������������������������۴���ԣ�

mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
    -> FROM pet AS p1, pet AS p2
    -> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m";
+--------+------+--------+------+---------+
| name   | sex  | name   | sex  | species |
+--------+------+--------+------+---------+
| Fluffy | f    | Claws  | m    | cat     |
| Buffy  | f    | Fang   | m    | dog     |
| Buffy  | f    | Bowser | m    | dog     |
+--------+------+--------+------+---------+

�������ѯ�У�����Ϊ����ָ�������Ա��������в���ʹ��ÿһ�������ù������ĸ���ʵ����ֱ�ۡ�

8.5 ������ݿ�ͱ�����Ϣ

���������һ�����ݿ��������֣���һ�������ı��Ľṹ��ʲô(���磬�����н�ʲô)����ô�죿 MySQLͨ���ṩ���ݿ⼰��֧�ֵı�����Ϣ�ļ��������������⡣

���Ѿ�������SHOW DATABASES�����г��ɷ��������������ݿ⡣Ϊ���ҳ���ǰѡ�����ĸ����ݿ⣬ʹ��DATABASE()������

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| menagerie  |
+------------+

����㻹ûѡ���κ����ݿ⣬����ǿյġ�

Ϊ���ҳ���ǰ�����ݿ����ʲô��(���磬���㲻��ȷ��һ����������)��ʹ��������

mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| event               |
| pet                 |
+---------------------+

�������Ҫ֪��һ�����Ľṹ��DESCRIBE�������к��õģ�����ʾ�й�һ������ÿ���е���Ϣ��

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

Field��ʾ�����֣�Type��Ϊ�е��������ͣ�Null��ʾ���Ƿ��ܰ���NULLֵ��Key��ʾ���Ƿ�������Defaultָ���е�ȱʡֵ��

�������һ��������������SHOW INDEX FROM tbl_name�����й����ǵ���Ϣ��

8.6 ��������ģʽʹ��mysql

��ǰ����½��У��㽻��ʽ��ʹ��mysql�����ѯ���Ҳ鿴�������Ҳ��������ģʽ����mysql��Ϊ��������Щ��������Ҫ���е��������һ���ļ��У�Ȼ�����mysql���ļ���ȡ�������룺

shell> mysql < batch-file

�������Ҫ����������ָ�����Ӳ�����������ܿ�������������

shell> mysql -h host -u user -p < batch-file
Enter password: ********

��������ʹ��mysqlʱ�������ڴ���һ���ű��ļ���Ȼ��ִ�нű���

ΪʲôҪʹ��һ���ű����кܶ�ԭ��

  • ������ظ������в�ѯ(����˵��ÿ���ÿ��)����������һ���ű�ʹ������ÿ��ִ����ʱ�������¼��롣
  • ����ͨ���������༭�ű��ļ������Ƶ����еIJ�ѯ����һ���²�ѯ��
  • �������ڿ�����ѯʱ����ģʽҲ�Ǻ����õģ��ر�Զ�����������������С�����㷸��һ�������㲻�����´�������һ�У�ֻҪ�༭��Ľű�����������Ȼ�����mysql�ٴ�ִ������
  • �������һ�������ܶ�����IJ�ѯ�������ͨ��һ����ҳ�������Ƕ���������������Ļ�Ķ��������������
    shell> mysql < batch-file | more
    
  • ���ܲ�׽�����һ���ļ��н��и�һ���Ĵ�����
    shell> mysql < batch-file > mysql.out
    
  • �����ɢ���ű���������ˣ��������Ҳ���������
  • һЩ���������������ʹ�ã�����, �����һ��cron���������в�ѯʱ������������£������ʹ����ģʽ��

��������ģʽ����mysqlʱ�������㽻����ʹ����ʱ����ȱʡ�����ʽ�Dz�ͬ��(������Щ)�����磬������ʽ����SELECT DISTINCT species FROM petʱ�������������������

+---------+
| species |
+---------+
| bird    |
| cat     |
| dog     |
| hamster |
| snake   |
+---------+

���ǵ�����ģʽ����ʱ����������

species
bird
cat
dog
hamster
snake

�������Ҫ����ģʽ�еõ������������ʽ��ʹ��mysql -t��Ϊ�˻����������ִ�е����ʹ��mysql -vvv��

8.7 ˫��̥��Ŀ�IJ�ѯ��ʵ����

��Analytikerna �� Lentus������Ϊһ������о���Ŀ����һֱ����ϵͳ���ֳ������������Ŀ��Institute of Environmental Medicine at Karolinska Institutet Stockholm �� the Section on Clinical Research in Aging and Psychology at the University of Southern California�ĺ�����Ŀ��

˫��̥�о��ĸ�����Ϣ�������������ҵ���

http://www.imm.ki.se/TWIN/TWINUKW.HTM

��Ŀ�ĺ��沿������һ����Perl��MySQL��д��web�ӿ���������

ÿ���������л�̸�����ݱ�����һ��MySQL���ݿ⡣

8.7.1 �ҳ����зǶ�����˫��̥

���в�ѯ��������˭������Ŀ�ĵڶ����֣�

select
        concat(p1.id, p1.tvab) + 0 as tvid,
        concat(p1.christian_name, " ", p1.surname) as Name,
        p1.postal_code as Code,
        p1.city as City,
        pg.abrev as Area,
        if(td.participation = "Aborted", "A", " ") as A,
        p1.dead as dead1,
        l.event as event1,
        td.suspect as tsuspect1,
        id.suspect as isuspect1,
        td.severe as tsevere1,
        id.severe as isevere1,
        p2.dead as dead2,
        l2.event as event2,
        h2.nurse as nurse2,
        h2.doctor as doctor2,
        td2.suspect as tsuspect2,
        id2.suspect as isuspect2,
        td2.severe as tsevere2,
        id2.severe as isevere2,
        l.finish_date
from
        twin_project as tp
        /* For Twin 1 */
        left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab
        left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab
        left join harmony as h on tp.id = h.id and tp.tvab = h.tvab
        left join lentus as l on tp.id = l.id and tp.tvab = l.tvab
        /* For Twin 2 */
        left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab
        left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab
        left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab
        left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab,
        person_data as p1,
        person_data as p2,
        postal_groups as pg
where
        /* p1 gets main twin and p2 gets his/her twin. */
        /* ptvab is a field inverted from tvab */
        p1.id = tp.id and p1.tvab = tp.tvab and
        p2.id = p1.id and p2.ptvab = p1.tvab and
        /* Just the sceening survey */
        tp.survey_no = 5 and
        /* Skip if partner died before 65 but allow emigration (dead=9) */
        (p2.dead = 0 or p2.dead = 9 or
         (p2.dead = 1 and
          (p2.death_date = 0 or
           (((to_days(p2.death_date) - to_days(p2.birthday)) / 365)
            >= 65))))
        and
        (
        /* Twin is suspect */
        (td.future_contact = 'Yes' and td.suspect = 2) or
        /* Twin is suspect - Informant is Blessed */
        (td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) or
        /* No twin - Informant is Blessed */
        (ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or
        /* Twin broken off - Informant is Blessed */
        (td.participation = 'Aborted'
         and id.suspect = 1 and id.future_contact = 'Yes') or
        /* Twin broken off - No inform - Have partner */
        (td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0))
        and
        l.event = 'Finished'
        /* Get at area code */
        and substring(p1.postal_code, 1, 2) = pg.code
        /* Not already distributed */
        and (h.nurse is NULL or h.nurse=00 or h.doctor=00)
        /* Has not refused or been aborted */
        and not (h.status = 'Refused' or h.status = 'Aborted'
        or h.status = 'Died' or h.status = 'Other')
order by
        tvid;

һЩ���ͣ�

concat(p1.id, p1.tvab) + 0 as tvid
������Ҫ��id��tvab�������������������򡣽����0ʹ��MySQL�ѽ������һ�����֡�
��id
���ʶһ��˫��̥���������б��е�һ������
��tvab
���ʶ˫��̥�е�һ��������ֵ1��2��
��ptvab
����tvabһ���档��tvab��1������2�����ҷ�����Ҳ��ˡ��������Ա�����벢��ʹ��������ΪMySQL�Ż���ѯ��

�����ѯ����������������(p1��p2)��ͬһ�����в��ұ����������У��ⱻ�������˫��̥��һ���Ƿ���65��ǰ���ˡ������ˣ��в����ء�

��������˫��̥��Ϣ���������б��С�������id,tvab�����ϵļ�ֵ�����б�)����id,ptvab�ϵļ�(person_data)��ʹ��ѯ���졣

�����ǵ�����������(һ̨200MHz UltraSPARC)�������ѯ���ش�Լ 150-200 �в��Ҳ�����һ���ʱ�䡣

�������õı��ĵ�ǰ��¼���ǣ�

�� ����
person_data 71074
lentus 5291
twin_project 5286
twin_data 2012
informant_data 663
harmony 381
postal_groups 100

8.7.2 ��ʾ����˫��̥�����ı�

ÿһ�λ�����һ����Ϊevent��״̬�������������ʾ�IJ�ѯ��������ʾ���¼���ϵ�����˫��̥�ı�����������ٶ�˫��̥�Ѿ���ɣ����ٶԵ�����֮һ����ɶ���һ���ܾ��ˣ��ȵȡ�

select
        t1.event,
        t2.event,
        count(*)
from
        lentus as t1,
        lentus as t2,
        twin_project as tp
where
        /* We are looking at one pair at a time */
        t1.id = tp.id
        and t1.tvab=tp.tvab
        and t1.id = t2.id
        /* Just the sceening survey */
        and tp.survey_no = 5
        /* This makes each pair only appear once */
        and t1.tvab='1' and t2.tvab='2'
group by
        t1.event, t2.event;

 

����һ��, ǰһ��, ��һ��, ���һ����Ŀ¼

��������  ����Linux