select * for updateËø±íµÄÎÊÌâ
ÓÉÓÚInnoDBÔ¤ÉèÊÇRow-Level Lock£¬ËùÒÔÖ»ÓС¸Ã÷È·¡¹µÄÖ¸¶¨Ö÷¼ü£¬MySQL²Å»áÖ´ÐÐRow lock (Ö»Ëø×¡±»Ñ¡È¡µÄ×ÊÁÏÀý) £¬·ñÔòMySQL½«»áÖ´ÐÐTable Lock (½«Õû¸ö×ÊÁÏ±íµ¥¸øËø×¡)¡£
¾Ù¸öÀý×Ó:
¼ÙÉèÓиö±íµ¥products £¬ÀïÃæÓÐid¸úname¶þ¸öÀ¸Î»£¬idÊÇÖ÷¼ü¡£
Àý1: (Ã÷È·Ö¸¶¨Ö÷¼ü£¬²¢ÇÒÓд˱Ê×ÊÁÏ£¬row lock)
SELECT * from products WHERE id='3' FOR UPDATE;
Àý2: (Ã÷È·Ö¸¶¨Ö÷¼ü£¬Èô²éÎ޴˱Ê×ÊÁÏ£¬ÎÞlock)
SELECT * from products WHERE id='-1' FOR UPDATE;
Àý2: (ÎÞÖ÷¼ü£¬table lock)
SELECT * from products WHERE name='Mouse' FOR UPDATE;
Àý3: (Ö÷¼ü²»Ã÷È·£¬table lock)
SELECT * from products WHERE id<>'3' FOR UPDATE;
Àý4: (Ö÷¼ü²»Ã÷È·£¬table lock)
SELECT * from products WHERE id LIKE '3' FOR UPDATE;
×¢1: FOR UPDATE½öÊÊÓÃÓÚInnoDB£¬ÇÒ±ØÐëÔÚ½»Ò×Çø¿é(BEGIN/COMMIT)ÖвÅÄÜÉúЧ¡£
×¢2: Òª²âÊÔ
Ëø¶¨µÄ×´¿ö£¬¿ÉÒÔÀûÓÃMySQLµÄCommand Mode £¬¿ª¶þ¸öÊÓ´°À´×ö²âÊÔ¡£
......
MySQL5.X¶¼ÒѾ·¢²¼ºÃ¾ÃÁË£¬µ«ÊÇ»¹ÓкܶàÈËÈÏΪMySQLÊDz»Ö§³ÖÊÂÎñ´¦ÀíµÄ£¬Õâ²»µÃ²»¹ÖËûÃÇÊǹª¹ÑÎŵ쬯äʵ£¬Ö»ÒªÄãµÄMySQL°æ±¾
Ö§³ÖBDB»òInnoDB±íÀàÐÍ£¬ÄÇôÄãµÄMySQL¾Í¾ßÓÐÊÂÎñ´¦ÀíµÄÄÜÁ¦¡£ÕâÀïÃæ£¬ÓÖÒÔInnoDB±íÀàÐÍÓõÄ×î¶à£¬ËäÈ»ºóÀ´·¢ÉúÁËÖîÈçOracleÊÕ
¹ºInnoDBµÈÁîMySQL²»Ë¬µÄÊÂÇ飬µ«ÄÇЩÉÌÒµÉϵĶ·ÕùÓë¼¼ÊõÎ޹أ¬ÏÂÃæÒÔInnoDB±íÀàÐÍΪÀý¼òµ¥ËµÒ»ÏÂMySQLÖеÄÊÂÎñ¡£
ÏÈÀ´Ã÷È·Ò»ÏÂÊÂÎñÉæ¼°µÄÏà¹ØÖªÊ¶£º
ÊÂÎñ¶¼Ó¦¸Ã¾ß±¸ACIDÌØÕ÷¡£ËùνACIDÊÇAtomic£¨Ô×ÓÐÔ£©£¬Consistent£¨Ò»ÖÂÐÔ£©£¬Isolated£¨¸ôÀëÐÔ£©£¬Durable£¨³ÖÐøÐÔ£©Ëĸö´ÊµÄÊ××ÖĸËùд£¬ÏÂÃæÒÔ“ÒøÐÐתÕʔΪÀýÀ´·Ö±ð˵Ã÷Ò»ÏÂËüÃǵĺ¬Ò壺
Ô×ÓÐÔ£º×é³ÉÊÂÎñ´¦ÀíµÄÓï¾äÐγÉÁËÒ»¸öÂß¼µ¥Ôª£¬²»ÄÜÖ»Ö´ÐÐÆäÖеÄÒ»²¿·Ö¡£»»¾ä»°Ëµ£¬ÊÂÎñÊDz»¿É·Ö¸îµÄ×îСµ¥Ôª¡£±ÈÈç£ºÒøÐÐתÕʹý³ÌÖУ¬±ØÐëͬʱ´ÓÒ»¸öÕÊ»§¼õȥתÕʽð¶î£¬²¢¼Óµ½ÁíÒ»¸öÕÊ»§ÖУ¬Ö»¸Ä±äÒ»¸öÕÊ»§ÊDz»ºÏÀíµÄ¡£
Ò»ÖÂÐÔ£ºÔÚÊÂÎñ´¦ÀíÖ´ÐÐǰºó£¬Êý¾Ý¿âÊÇÒ»Öµġ£Ò²¾ÍÊÇ˵£¬ÊÂÎñÓ¦¸ÃÕýÈ·µÄת»»ÏµÍ³×´Ì¬¡£±ÈÈç£ºÒøÐÐתÕʹý³ÌÖУ¬ÒªÃ´×ªÕʽð¶î´ÓÒ»¸öÕÊ»§×ªÈëÁíÒ»¸öÕÊ»§£¬ÒªÃ´Á½¸öÕÊ»§¶¼²»±ä£¬Ã»ÓÐÆäËûµÄÇé¿ö¡£
¸ôÀëÐÔ£ºÒ»¸öÊÂÎñ´¦Àí¶ÔÁíÒ»¸öÊÂÎñ´¦Àíà ......
MYSQLÓв»Í¬ÀàÐ͵ÄÈÕÖ¾Îļþ(¸÷×Ô´æ´¢Á˲»Í¬ÀàÐ͵ÄÈÕÖ¾)£¬´ÓËüÃǵ±ÖпÉÒÔ²éѯµ½MYSQLÀï¶¼×öÁËЩʲô£¬¶ÔÓÚMYSQLµÄ¹ÜÀí¹¤×÷£¬ÕâЩÈÕÖ¾ÎļþÊDz»¿ÉȱÉٵġ£
1.´íÎóÈÕÖ¾(The error log)£º¼Ç¼ÁËÊý¾Ý¿âÆô¶¯¡¢ÔËÐÐÒÔ¼°Í£Ö¹¹ý³ÌÖдíÎóÐÅÏ¢£»
2.ISAM²Ù×÷ÈÕÖ¾(The isam log)£º¼Ç¼ÁËËùÓжÔISAM±íµÄÐ޸쬏ÃÈÕÖ¾½ö½öÓÃÓÚµ÷ÊÔISAMģʽ£»
3.SQLÖ´ÐÐÈÕÖ¾(The query log)£º¼Ç¼Á˿ͻ§¶ËµÄÁ¬½ÓÒÔ¼°ËùÖ´ÐеÄSQLÓï¾ä£»
4.¸üÐÂÈÕÖ¾(The update log)£º¼Ç¼Á˸ıäÊý¾ÝµÄÓï¾ä£¬ÒѾ²»½¨ÒéʹÓã¬Óɶþ½øÖÆÈÕÖ¾Ìæ´ú£»
5.¶þ½øÖÆÈÕÖ¾(The binary log)£º¼Ç¼ÁËËùÓжÔÊý¾Ý¿âÊý¾ÝµÄÐÞ¸ÄÓï¾ä£»
6.³¬Ê±ÈÕÖ¾(The slow log)£º¼Ç¼ËùÓÐÖ´ÐÐʱ¼ä³¬¹ý×î´óSQLÖ´ÐÐʱ¼ä(long_query_time)»òδʹÓÃË÷ÒýµÄÓï¾ä£»
Èç¹ûÄãÊÇÔÚÓÃmysqlµÄ¸´ÖÆ¡¢±¸·Ý¹¦ÄÜ£¬ÄÇô´Ó·þÎñÆ÷»¹ÌṩÁËÒ»ÖÖ½Ð×örelay logµÄÈÕÖ¾Îļþ¡£
ĬÈÏÇé¿öÏÂËùÓÐÈÕÖ¾Îļþ»á¼Ç¼ÔÚMYSQLµÄÊý¾ÝĿ¼Ï£¬Äã¿ÉÒÔͨ¹ýÇ¿ÖÆmysqlÈ¥¹Ø±Õ²¢ÖØÐ´ò¿ªÒ»¸öÎļþ½øÐÐÈÕÖ¾¼Ç¼£¬µ±È»ÏµÍ³»á×Ô¶¯¼Óºó׺
(Èç.00001, .00002)£¬·½Ê½ÓÐÔÚmysql»·¾³ÏÂÖ´ÐÐÓï¾ä mysql>flush logs;
»òÕßͨ¹ýmysqladmin¹ÜÀí³ÌÐòÖ´ÐÐ #mysqladmin flush-logs »ò #mysqladmin refresh
ÕâЩÈÕÖ¾µÄÆ ......
MySQLµÄÒ²Ö§³Ö´æ´¢¹ý³Ì£¬º¯Êý£¬´¥·¢Æ÷¡£
ÒÔϸ÷¸ö¹¦ÄܵÄÏêÊö£¬Ö÷ÒªÊÇʾÀý¡£
/**1.¶¨Òå·Ö¸î·û*/
DELIMITER //
/**2.´´½¨º¯Êý-¼ÆËãÁ½ÊýÖ®ºÍ*/
CREATE FUNCTION f_sum(num1 INT,num2 INT) RETURNS INT
BEGIN
RETURN num1+num2;
END;
//
/**
*3.´´½¨´æ´¢¹ý³Ì
*˼·£º3.1.Óиô洢¹ý³ÌÔòɾ³ý£¬3.2ÓÐʹÓõÄÖмä±íҲɾ³ý£¬²¢´´½¨¸Ã±í²åÈëÊý¾Ý£¬3.3ͳ¼Æ±íÖй²ÓжàÉÙÊý¾Ý²¢Í¨¹ýÊä³ö²ÎÊý·µ»Ø¸øµ÷ÓÃÕß 3.4ɾ³ýÖмäʹÓõ½µÄ±í
*/
DROP PROCEDURE IF EXISTS p_count ;//
DROP TABLE IF EXISTS T;//
CREATE TABLE T(i_num INT);//
INSERT INTO T VALUES(1),(2),(3);//
CREATE PROCEDURE p_count(OUT param INT)
BEGIN
SELECT COUNT(*) INTO param from T;
DROP TABLE T;
END;//
CALL p_count(@a);//
/**
*4.´´½¨´¥·¢Æ÷
*/
DROP TABLE IF EXISTS t;//
DROP TABLE IF EXISTS tx;//
CREATE TABLE tx(a INT);//
CREATE TABLE t(a INT);//
INSERT INTO t VALUES(2),(3),(4);//
CREATE TRIGGER tr_insert BEFORE INSERT ON t FOR EACH ROW
BEGIN
temp INT;
SELECT COUNT(*) INTO temp from t;
INSERT INTO tx VALUES(temp);
INSERT INTO tx S ......
MySQL ÖÐÎÄÏÔʾÂÒÂë
Èç¹ûÄãÓöµ½ÂÒÂëÎÊÌ⣬¿ÉÒÔ´ÓÏÂÃæ¼¸¸öÎÊÌâÖð²½¼ì²é£º
£¨1£©¼ì²éÄãµÄÎļþ´æ´¢±àÂëÊÇ·ñºÍ meta ÉùÃ÷µÄÒ»Ö£¬¼ÙÈçÄãµÄÎļþÊǰ´ÕÕ utf-8 ±àÂë´æ´¢£¬µ«ÊÇ meta È´ÉùÃ÷Ϊ gb2312 £¬½«µ¼ÖÂÂÒÂë¡£
½â¾ö°ì·¨£º½«Ò³Ãæ´æ´¢±àÂëºÍ meta ÉùÃ÷±£³ÖÒ»Ö¡£ÓüÇʱ¾´ò¿ªÎļþ£¬“Áí´æÎª”£¬ÏÂÃæÓиöÑ¡ÏîÊÇ“±àÂ딣¬Ñ¡ÔñºÍ meta ÉùÃ÷Ò»ÖµıàÂ뷽ʽ¡£(Ìáʾ£ºmeta µÄ±àÂëÉùÃ÷Òª·ÅÔÚ title ±êÇ©Ç°Ãæ£¬·ñÔòÈÝÒ×µ¼ÖÂÒ³Ãæ¿Õ°×¡£)
£¨2£©¼ì²éÄãµÄÊý¾Ý¿âÁ¬½ÓÓÐûÓÐÉèÖÃÁ¬½Ó·½Ê½£¨SET NAMES£©£¬MySQL 4.1 °æ±¾ÒÔºó£¬Èç¹ûÄãûÓÐÉèÖÃÊý¾Ý¿âÁ¬½Ó·½Ê½£¬ÄÇô²åÈë»òÕß²éѯ½«³öÏÖÂÒÂëÇé¿ö¡£
½â¾ö°ì·¨£ºÔÚÄãµÄÊý¾Ý¿âÁ¬½ÓÉèÖÃΪ£º
ÔÚhibernate.cfg.xmlÖÐÓ¦¸ÃÕâÑùд
<property name="connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</property>
Èç¹ûÓÃhibernate.properties
#hibernate.connection.url jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
ÆäÖР ......
»·¾³ÉèÖãº
°²×°ÍêMySQLÖ®ºó£¬½«°²×°Ä¿Â¼ÖеÄincludeĿ¼ÏµÄlibmysql.libÎļþ¿½µ½VS2008°²×°Ä¿Â¼ÖеÄVC\lib\Ï£¬È»ºóÔÚ ÏîÄ¿-Ñ¡Ïî-c/c++-³£¹æ Öеĸ½¼Ó°üº¬Ä¿Â¼ÒÔ¼° Á´½ÓÆ÷-³£¹æ Öеĸ½¼Ó¿âĿ¼ÖмÓÈë“c:\MySQL\include\”£¬²¢ÇÒÔÚ Á´½ÓÆ÷-ÊäÈë Öеĸ½¼ÓÒÀÀµÏîÄÚÌí¼Ó“libmysql.lib”£¬ÕâÑù¼´¿Éʹ±àÒëÆ÷ÕÒµ½mysql.hÍ·Îļþ£¬²¢¿ÉÔÚ³ÌÐòÖÐʹÓÃcÓïÑÔµÄmysql APIÀ´²Ù×÷Êý¾Ý¿â¡££¨Èç¹ûMySQL°²×°Ä¿Â¼ÖÐÎÞincludeĿ¼£¬¿Éµ½MySQL¹ÙÍøÏÂÔØ²¢°²×°MySQL connector for C£¬²¢ÐÞ¸ÄincludeĿ¼·¾¶£©
´úÂëʾÀý£º
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
#include <iostream>
using namespace std;
int main()
{
const char user[] = "root"; //username
const char pswd[] = "root"; & ......
»·¾³ÉèÖãº
°²×°ÍêMySQLÖ®ºó£¬½«°²×°Ä¿Â¼ÖеÄincludeĿ¼ÏµÄlibmysql.libÎļþ¿½µ½VS2008°²×°Ä¿Â¼ÖеÄVC\lib\Ï£¬È»ºóÔÚ ÏîÄ¿-Ñ¡Ïî-c/c++-³£¹æ Öеĸ½¼Ó°üº¬Ä¿Â¼ÒÔ¼° Á´½ÓÆ÷-³£¹æ Öеĸ½¼Ó¿âĿ¼ÖмÓÈë“c:\MySQL\include\”£¬²¢ÇÒÔÚ Á´½ÓÆ÷-ÊäÈë Öеĸ½¼ÓÒÀÀµÏîÄÚÌí¼Ó“libmysql.lib”£¬ÕâÑù¼´¿Éʹ±àÒëÆ÷ÕÒµ½mysql.hÍ·Îļþ£¬²¢¿ÉÔÚ³ÌÐòÖÐʹÓÃcÓïÑÔµÄmysql APIÀ´²Ù×÷Êý¾Ý¿â¡££¨Èç¹ûMySQL°²×°Ä¿Â¼ÖÐÎÞincludeĿ¼£¬¿Éµ½MySQL¹ÙÍøÏÂÔØ²¢°²×°MySQL connector for C£¬²¢ÐÞ¸ÄincludeĿ¼·¾¶£©
´úÂëʾÀý£º
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
#include <iostream>
using namespace std;
int main()
{
const char user[] = "root"; //username
const char pswd[] = "root"; & ......