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

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

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


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


5 MySQL���׼�ļ����ԣ�

5.1   MySQL��ANSI SQL92����

MySQL������һЩ����������SQL���ݿ��Ҳ��������䡣Ҫע�������ʹ�����ǣ���Ĵ��뽫��������SQL���������ݡ���һЩ����£�����Ա�д����MySQL��չ�Ĵ��룬������Ȼ�ǿ���ֲ�ģ�ͨ��ʹ��/*! ... */��ʽ��ע�͡�����������£�MySQL�����дʷ���������ִ����ע���ڵĴ��룬���������κ�����MySQL��䣬��������SQL��������������չ�����磺

SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ... 

�������'!'������һ���汾���֣����﷨������MySQL�汾�ǵ��ڻ��ʹ�õİ汾������ʱ��ִ�У�

CREATE /*!32302 TEMPORARY */ TABLE (a int);

�������˼���������3.23.02����£���ôMySQL��ʹ��TEMPORARY�ؼ��ʡ�

MySQL��չ���������棺

  • �ֶ�����MEDIUMINT��SET��ENUM�Ͳ�ͬ��BLOB��TEXT���͡�
  • �ֶ�����AUTO_INCREMENT��BINARY��UNSIGNED��ZEROFILL��
  • ȱʡ�أ����е��ַ����Ƚ��Ǻ��Դ�Сд�ģ��ɵ�ǰ���ַ���������(ȱʡΪISO-8859-1 Latin1)����˳������㲻ϲ����������Ӧ����BINARY���Ի�ʹ��BINARYǿ�Ʒ������У������¸���MySQL������������ASCII˳���������
  • MySQL��ÿ�����ݿ�ӳ��һ��MySQL����Ŀ¼�����Ŀ¼�������ݿ��ӳ�䵽���ݿ�Ŀ¼�µ����ݿ��ļ���������2�����⣺
    • �����ִ�Сд�ļ����IJ���ϵͳ(������ Unix ϵͳһ��)�ϵ�MySQL�����ݿ����ֺͱ��������ִ�Сд�ġ�����������Ѽǵñ���������һ��һ�µ�Լ��������������Сд���ִ������ݿ�ͱ���
    • ���ݿ⡢�����������л�������������ֿ�ʼ(���Dz��ܽ����������)��
    • �����ʹ�ñ�׼��ϵͳ����ݡ����������ƶ���ɾ���Ϳ����������磬������һ��������������.MYD������.MYI������.frm���ļ�Ϊ��Ӧ�ı���
  • ��SQL����У��������db_name.tbl_name�﷨���ʲ�ͬ���ݿ��еı���һЩSQL�������ṩͬ���Ĺ��ܵ��dz�����Ϊ��User space���û��ռ䣩��MySQL��֧��������create table ralph.my_table...IN my_tablespace�еı��ռ䡣
  • LIKE���������ϱ�������
  • ��һSELECT�������ʹ��INTO OUTFILE��STRAIGHT_JOIN����7.12 SELECT�䷨.
  • ��һ��SELECT�����SQL_SMALL_RESULTѡ�
  • EXPLAIN SELECT�õ�����������������
  • ��һ��CREATE TABLE�������ʹ�����������ֶ�ǰ׺�ϵ�������ʹ��INDEX��KEY����7.7 CREATE TABLE �䷨��
  • CREATE TABLEʹ��TEMPORARY��IF NOT EXISTS��
  • ʹ��COUNT(DISTINCT list)�����list������һ��Ԫ�ء�
  • ��һ��ALTER TABLE�������ʹ��CHANGE col_name��DROP col_name��DROP INDEX����7.8 ALTER TABLE�䷨��
  • ��һ��ALTER TABLE�������ʹ��IGNORE��
  • ��һ��ALTER TABLE�����ʹ�ö���ADD��ALTER��DROP��CHANGE�Ӿ䡣
  • ʹ�ô��ؼ���IF EXISTS��DROP TABLE��
  • �����õ���DROP TABLE��������������
  • DELETE����LIMIT�Ӿ䡣
  • INSERT��REPLACE����DELAYED�Ӿ䡣
  • INSERT, REPLACE, DELETE��UPDATE����LOW_PRIORITY�Ӿ䡣
  • ʹ��LOAD DATA INFILE���ڶ�������£���䷨��Oracle��LOAD DATA INFILE���ݡ���7.16 LOAD DATA INFILE �䷨��
  • OPTIMIZE TABLE��䡣��7.9 OPTIMIZE TABLE�䷨��
  • SHOW��䡣��7.21 SHOW�䷨(�õ������еȵ���Ϣ)��
  • �ַ������Ա���"������'����Χ������ֻ����'����
  • ʹ����\��ת���ַ���
  • SET OPTION��䡣��7.25 SET OPTION�䷨��
  • �㲻��Ҫ����������GROUP BY���ֵı�ѡ����С���ΪһЩ���ض�������������õ����ܣ�������һ��IJ�ѯ����7.4.13 ����GROUP BY�Ӿ�ĺ�����
  • Ϊ�˷���������SQL��������Ϊ�û���MySQL�����ຯ��֧�ֱ��������磬���е��ַ������ܶ�֧��ANSI SQL�䷨�� ODBC�䷨��
  • MySQL����||��&&��ζ���߼���OR��AND��������C���������С���MySQL�У�||��OR��ͬ��ʣ�&&��AND��ͬ��ʡ�����Ϊ����õľ䷨��MySQL���ַ������õIJ�֧��ANSI SQL ||���������෴ʹ��CONCAT()����ΪCONCAT()�����κ������IJ����������װ�||������ʹ�ñ任��MySQL��
  • CREATE DATABASE��DROP DATABASE����7.5 CREATE DATABASE�䷨��
  • %��������MOD()һ��ͬ��ʣ�����N % M�ȼ���MOD(N,M)��%֧��C����Ա����PostgreSQL���ݡ�
  • =, <>, <=,<, >=,>, <<, >>, <=>, AND, OR��LIKE���������Է���SELECT����FROM������ڱȽ��С����磺
    mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
    
  • LAST_INSERT_ID()��������20.4.29 mysql_insert_id()��
  • ��չ���������ʽ������REGEXP��NOT REGEXP��
  • CONCAT()��CHAR()��һ�������򳬹�2������������MySQL�У���Щ������ȡ�κ������IJ�������
  • BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(),��WEEKDAY()������
  • ʹ��TRIM()�����Ӵ���ANSI SQL ֻ֧�ֵ����ַ���ɾ����
  • GROUP BY����STD(), BIT_OR()��BIT_AND()��
  • ʹ��REPLACE������DELETE+INSERT����7.15 REPLACE�䷨��
  • FLUSH flush_option��䡣
  • ��һ�������:=���ñ����Ŀ����ԣ�
    SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table;
    SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
    

5.2 ��ANSIģʽ����MySQL

�������--ansiѡ������mysqld��MySQL��������Ϊ�ı䡣

  • ||���ַ������ö�����OR��
  • ����һ����������֮���롰(�����κ������Ŀո���Ҳʹ���еĹ������ֳ�Ϊ�����ʡ�
  • "����һ����ʶ�������ַ�(��MySQL `�����ַ�һ��)������һ���ַ��������ַ���
  • REAL����FLOATһ��ͬ��ʣ�����DOUBLEһ��ͬ��ʡ�

5.3 MySQL���ANSI SQL92�IJ��

���dz���ʹ��MySQL����ANSI SQL��׼��ODBC SQL��׼��������һЩ����£�MySQL��һЩ��ͬ�����飺

5.4 MySQLȱ���Ĺ���

���й����ڵ�ǰ��MySQL�汾��û�еġ�����һ�����ȼ���ָ����ʱ����չ���Լ���MySQL, ��Ӧ����ѯ����MySQL TODO �������DZ��ֲ����µ�TODO���汾����F ������Ҫ��δ�����뵽MySQL�������б�(TODO)��

5.4.1 ��ѡ��

��MySQL��������仹���ܹ�����

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);

Ȼ�����ںܶ�����£��������д��ѯ����������ѡ��

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

���ڸ����ӵ��Ӳ�ѯ��ͨ������Դ�����ʱ�ı������Ӳ�ѯ��Ȼ����һЩ����£�����ѡ���в�ͨ�����������������DELETE��䣬��������׼SQL��֧������(join)(��������ѡ��)�����������������2������ѡ��ֱ����ѡ��MySQL֧�֡�

��һ��ѡ����ʹ��һ�ֹ��̻��ij�������(����Perl��PHP)���ύһ��SELECT��ѯ���Ҫ��ɾ����¼��������Ȼ��ʹ����Щֵ����DELETE���(DELETE FROM ... WHERE ... IN (key1, key2, ...))��

�ڶ���ѡ����ʹ�ý���ʽSQL�Զ�����һ��DELETE��䣬ʹ��MySQL��չCONCAT()�������׼||������)�����磺

SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';')
  FROM tab1, tab2
 WHERE tab1.col1 = tab2.col2;

����԰������ѯ����һ���ű��ļ����Ҵ����ض������뵽mysql�����н����������������Ϊ�ܵ����ظ��������ĵ�2��ʵ����

prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb

MySQL��֧��INSERT ... SELECT ...��REPLACE ... SELECT ...����������ѡ�񽫿�����3.24.0�õ���Ȼ���������������£������ڿ���ʹ�ú���IN()��

5.4.2 SELECT INTO TABLE

MySQL����֧��Oracle SQL����չ��SELECT ... INTO TABLE ....���෴MySQL֧��ANSI SQL�䷨INSERT INTO ... SELECT ...��������������һ���ġ�

���⣬���ʹ��SELECT INTO OUTFILE...��CREATE TABLE ... SELECT���������⡣

5.4.3 ������

��֧����������MySQL���ڶ�ʱ����֧��ԭ��(atomic)����������û�лؾ���������ԭ�Ӳ���������ִ��һ��INSERT/SELECT/whatever ����ұ�֤û�������߳̽��롣�ڱ����У���ͨ��������Ҫ�ؾ���Ŀǰ�����ͨ��ʹ��LOCK TABLES��UNLOCK TABLES������ֹ�����̵߳ĸ��š���7.24 LOCK TABLES/UNLOCK TABLES�䷨��

5.4.4 �洢���̺ʹ�����

һ���洢���������ڷ������б��벢�洢��һ��SQL���һ���������ˣ��˿Ͳ���Ҫһֱ���·���ȫ����ѯ�������Բο��洢���̡���Ϊ��ѯ����һ�δʷ��������ҽ��ٵ���Ϣ��Ҫ�ڷ������Ϳͻ�֮�䴫�ͣ�������ṩ�˸��õ����ܡ��������ͨ��ӵ���ڷ������еĺ��������������ϵIJ�Ρ�

һ���������ǵ�һ���ر���¼�����ʱ�������õ�һ���洢���̡����磬����԰�װһ���洢���̣�����ÿ�δ�һ�����ױ�ɾ��һ����¼ʱ���������ҵ������н��ױ�ɾ��ʱ���Զ��ش�һ���ͻ�����ɾ����Ӧ�Ŀͻ���

�ƻ��޸ĵ����Խ��ܴ����洢���̣�����û�д�������������ͨ��ʹÿ�������������ʹ�����Dz���Ҫ�IJ�ѯ��

Ϊ������ʲôʱ��MySQL���ܵõ��洢���̣���F ��������δ�����뵽MySQL�������б�(TODO)��

5.4.5 ���

ע�⣬��SQL����������������������Ҫ���ڼ��ο�������(RI)���������Ҫ�õ���һ��SELECT���Ӷ�����õ������ ��ͨ�����������

SELECT * from table1,table2 where table1.id = table2.id; 

��7.13 JOIN�䷨����8.3.5 ʹ�������

��MySQL�����FOREIGN KEY�䷨����Ϊ��������SQL��Ӧ�̵�CREATE TABLE��������ݣ��������κ����顣û��ON DELETE ...��FOREIGN KEY�䷨��Ҫ�����ĵ�Ŀ�ġ�һЩODBCӦ�ó������ʹ�����Զ�����WHERE�Ӿ䣬������ͨ�������׵ĸ��ǡ� FOREIGN KEY��ʱ����һ��Լ����飬�������������ȷ��˳�򱻲�������ü��ʵ�����Dz���Ҫ�ġ�MySQL����֧����Щ�Ӿ�(�������Ƿ����ǹ���!)����ΪһЩӦ�ó���Ҫ�����Ǵ��ڡ�

��MySQL�У�����Խ��ON DELETE ...û��ʵ�ֵ����⣬�������һ��������ı�ɾ����¼ʱ��ͨ��Ϊһ��Ӧ�ó��������ʵ���DELETE��伴�ɡ�ʵ���ϣ���ܿ�(��һЩ����¸���)���ұ�ʹ��������ȱ�����ֲ��

�ڲ��õĽ������ǽ�����FOREIGN KEYʵ�֣��Ա�������Ϣ���ڱ�˵���ļ��б��沢�ҿ�����mysqldump��ODBC������

5.4.5.1 ��ʹ�����������

�кܶ���FOREIGN KEY�йص��������Dz�֪�����Ķ���ʼ��

  • ���ʹ��������ӣ���Ϊ����Ķ������洢��һ�����ݿ��в���ʵ�����ǽ��ƻ�ʹ���ܱ��ƶ���������ɾ���ļ���ȫ�����÷�������
  • �ٶ�Ӱ���INSERT��UPDATE����ǿ��µģ���������������¼������е�FOREIGN KEY��鶼�����õģ���Ϊ����������ͨ������ȷ��˳������ȷ�ı��в����¼��
  • ������һ�ű�ʱ��Ҳ����������ϱ�������������Ϊ�����ÿ��Դ���ͨ��ȫ�����ݿ⡣���ȴ�һ�ű���ɾ����¼����������������ɾ�����ǣ�����졣
  • ����Ҳ������ͨ����һ��ȫ��ı�ɾ�������ָ����еļ�¼�ķ������ָ�һ�ű�(������Դ���һ������)��
  • �������������㲻���㵹�ͻָ�������������һ���dz��ض�������Щ��
  • ��������һ���������ġ���ѭ������ʹ�ò�������һ������create����ؽ�ÿһ���������㶨������ֿ��á�

FOREIGN KEYΨһ�õķ���������ODBC��һЩ�����ͻ�������һ�ű���α����ӵ�����������ʹ��������ʾ������ͼ������������Ӧ�á�

MySQL���ý��洢FOREIGN KEY�����Ա�һ���ͻ���ѯ�ʲ��յ�ԭ����������ν��е�һ���𰸡���ǰ����.frm �ļ���ʽû����Ӧ�еĵ�λ��

5.4.6 ��ͼ

MySQL��֧����ͼ����������TODO�ϡ�

5.4.7 '--'��Ϊһ��ע�͵Ŀ�ʼ

��Щ����SQL���ݿ�ʹ��'--'��ʼע�͡�MySQL����#����Ϊ��ʼ��ע�͵��ַ�����ʹmysql�����й���ɾ����'--'��ʼ�������С���Ҳ������MySQL��ʹ��Cע�ͷ��/* this is a comment */����7.29 ע�;䷨��

MySQL3.23.3�����ϰ汾֧��'--'ע�ͷ��ֻҪע�͸���һ���ո�֮��������Ϊ�����˻���ע�ͷ���Ѿ������������д����������Զ����ɵ�SQL��ѯ���������⣬���������Զ���Ϊ!payment!����֧��ֵ��

UPDATE tbl_name SET credit=credit-!payment! 

�������payment��ֵ�Ǹ���ʱ������ʲô��

��Ϊ1--1��SQL���ǺϷ��ģ�������Ϊ'--'��ʼע���ǿ��µġ�

Ȼ����MySQL 3.23�У����ʹ�ã�1-- This is a comment

�������������һ����3.23���MySQL�İ汾�����е����۲��漰�㣺

�������һ���ı��ļ�����һ��SQL����������'--'ע�ͣ���Ӧ��ʹ�ã�

shell> replace " --" " #" < text-file-with-funny-comments.sql \
         | mysql database

������ͨ���� 
shell> mysql database < text-file-with-funny-comments.sql

��Ҳ���ԡ��ֳ����༭�����ļ���'--'ע�͸�Ϊ'#'ע����

shell> replace " --" " #" -- text-file-with-funny-comments.sql

���������Ļ����ǣ�

shell> replace " #" " --" -- text-file-with-funny-comments.sql

5.5 MySQL ��ѭʲô��׼��

Entry level SQL92��ODBC level 0-2��

5.6 ��������û��COMMIT/ROLLBACK

MySQL��֧��COMMIT-ROLLBACK����������Ч�ش���COMMIT-ROLLBACK����Ҫ��ȫ��ͬ��MySQL����ʹ�õı����֡�MySQLҲ����Ҫ������߳��ڱ������Զ�������������Ҵ������������ߡ��⽫ʹMySQL���ֽ����ϴ�Լ2-4����MySQL�ȼ�����������SQL���ݿⶼ��(һ�����ٿ�2-3��)��ԭ��֮һ����ȱ��COMMIT-ROLLBACK��

Ŀǰ�������Ǹ����ʵ��SQL����������(��洢����)�����������㽫ȷʵ������ҪCOMMIT-ROLLBACK����Ҳ���õ����õ����ܡ�

ͨ����Ҫ�����ѭ�����Խ���LOCK TABLES���б��룬���ҵ����ܼ�ʱ�ظ��¼�¼ʱ���㲻��Ҫ���(cursor)��

������TODO��������͹�꣬Ȼ�������൱���ȡ��������ʵ����Щ������ΪCREATE TABLE��ѡ�����ζ��COMMIT-ROLLBACK������������Щ���ϣ��Ա��ٶ���ʧ����ǿ������Щ���ϡ�

������TcX��һ�����������һ����100%ͨ�����ݿ���������ٵ����ݿ⡣���ۺ�ʱ���Ƿ���һ��������ʵ����Щ������û���κ��ٶ���ʧ�����ǽ�������������ʱ�����������Ҫ������Ҫ�������TODO�������Ǵ�ʱ��ν������������С����еĽϸ߼���֧�ֵĿͻ����Ըı�������������ǿ����������Ȼ��ġ���

��ǰ������ʵ������ROLLBACK��û��ROLLBACK��������LOCK TABLES���κ�COMMIT������Ϊ��֧��ROLLBACK��MySQL�����뱻�ı��Դ洢���еľɼ�¼���������ROLLBACK�����DZ����µIJ��ҽ��κζ����ָ�����㡣���ڼ򵥵����Σ��ⲻ�������� (��ǰisamlog�������ڴ�Ŀ��)������ΪALTER/DROP/CREATE TABLEʵ��ROLLBACK���Ǹ����ѵġ�

����ʹ��ROLLBACK�������ʹ�����в��ԣ�

  1. ʹ��LOCK TABLES ...��ס��������Ҫ��ȡ�����ݿ����
  2. ����������
  3. ���һ�����󣬸��¡�
  4. ʹ��UNLOCK TABLES�ͷ��������

��ͨ����ʹ�ÿ��ܴ�ROLLBACK�Ľ�����һ������ķ��������ܲ������������������������ܴ�����Ψһ״���ǵ�ij���ڸ��µ���ɱ���߳�ʱ������������£����е��������ͷţ�����һЩ���IJ��ܱ�ִ�С�

��Ҳ��ʹ�����Ե����������¼�¼������ͨ��ʹ�����м����õ�һ������Ч�ʵ�Ӧ�ó���

  • ������ǵĵ�ǰ��ֵ�޸��ֶ�
  • ����������Щʵ���ϸ��ĵ��ֶ�

���磬���������ڸ���һЩ�ͻ���Ϣʱ�����ǽ���������Щ�ı��˵Ŀͻ����ݲ�ֻ����û���κ����ݵĸı䣬������ȡ���ڸı�����ݣ���ԭ��������ȱ仯�ˡ����ڸı��˵����ݵIJ�����WHERE�Ӿ���UPDATE�������ɡ������¼û�����£����Ǹ��ͻ�һ����Ϣ������ı��˵�һЩ�����ѱ������û��ı��ˡ���Ȼ��������һ����������ʾ���ж��վ��У�����û��ܾ�������ʹ���ĸ��汾�Ŀͻ���¼��

��������������ڡ����������Ķ���������ʵ�����������ã���Ϊ���ǽ�������ijЩ�У�ʹ����������ǵĵ�ǰֵ��ֵ������ζ�ŵ�����UPDATE��俴��ȥ����Щһ��������

UPDATE tablename SET pay_back=pay_back+'relative change';

UPDATE customer
  SET
    customer_date='current_date',
    address='new address',
    phone='new phone',
    money_he_owes_us=money_he_owes_us+'new_money'
  WHERE
    customer_id=id AND address='old address' AND phone='old phone';

�������ܿ����ģ����Ǻ���Ч�IJ��Ҿ��������ͻ��Ѿ��ı���pay_back��money_he_owes_us�е�Ҳ�ܹ�����

����������£�Ϊ����һЩ�����Ψһ��ʶ��Ŀ�ģ��û��Ѿ���ҪROLLBACK��LOCK TABLES�������һ��AUTO_INCREMENT�к�һ��SQL����LAST_INSERT_ID()��C API����mysql_insert_id()����Ч�ش�������20.4.29 mysql_insert_id()��

��TcX�����Ǵ���û���κζ��м�������������Ϊ����������ͨ������������һЩ�������Ҫȷʵ�����������������Ǻ��ټ��ġ��������Ҫ�м�������������ڱ���ʹ�ñ�־�в�����������

UPDATE tbl_name SET row_flag=1 WHERE id=ID; 

����б��ҵ����ֲ���row_flag��ԭ�������Ѿ�����1������Ӱ�������MySQL����1��

������뵽������ΪMySQL������IJ�ѯ��Ϊ��

UPDATE tbl_name SET row_flag=1 WHERE id=ID and row_flag <> 1;

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

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