0% found this document useful (0 votes)
18 views

MySQL网络数据库指南

The document provides an overview of MySQL, a relational database management system (RDBMS) that uses Structured Query Language (SQL). It covers various aspects of MySQL including database creation, data manipulation, and querying techniques. Additionally, it discusses integration with programming languages like Perl and PHP, as well as operating system compatibility.

Uploaded by

whk666888
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

MySQL网络数据库指南

The document provides an overview of MySQL, a relational database management system (RDBMS) that uses Structured Query Language (SQL). It covers various aspects of MySQL including database creation, data manipulation, and querying techniques. Additionally, it discusses integration with programming languages like Perl and PHP, as well as operating system compatibility.

Uploaded by

whk666888
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 480

MySQL

1 MySQL SQL
MySQL RDBMS SQL

MySQL

MySQL SQL
MySQL
1.2

1.1 MySQL

MySQL MySQL

MySQL 1.2
2 MySQL

MySQL

MySQL

6
1 MySQL SQL 3

MySQL

Web

Web

Web
Web
Web

Web
MySQL MySQL Web
4 MySQL

MySQL

MySQL

1.2

MySQL

Web

1.2.1
1 MySQL SQL 5
Web
Web

MySQL

Web

Email Email

Web
Web

Web
Web

MySQL MySQL Web


MySQL MySQL
MySQL
Perl DBI Perl MySQL
Perl
Perl RT F

PHP PHP Web


Web MySQL PHP
6 MySQL

Apache Web

MySQL

MySQL
$200
MySQL Perl DBI
PHP Apache

UNIX
Windows UNIX MySQL
UNIX Windows Windows

1.2.2

MySQL

A
B C D F

MySQL

1.2.3

MySQL
1 MySQL SQL 7

1.3

1.3.1

MySQL RDBMS

RDBMS DB

MS
R DBMS

Web

1-1 company
ad
hit

company
hit
Pickles.
7 14
1) company Pickles, Inc 14
2) ad
48 101
8 MySQL

3) ad hit
48
101

C.J.Date E.F.Codd
company

ad

hit

1-1
1 MySQL SQL 9
1.3.2

MySQL SQL Structured Query Language SQL


SQL

SQL
MySQL
MySQL MySQL

SQL
SQL SQL
C R E ATE TABLE

1.3.3 MySQL

MySQL MySQL /

MySQL
mysql
mysqldump mysqlimport
mysqladmin
MySQL
C C

MySQL /

MySQL
10 MySQL

MySQL

Sally Phil

1.4 MySQL

MySQL
MySQL

mysql MySQL
SQL RDBMS SQL
SQL MySQL
MySQL /
mysql mysql
SQL mysql MySQL

samp_db
samp_db

samp_db

MySQL
MySQL

1.4.1

MySQL MySQL
MySQL mysql
mysqlimport

MySQL A
MySQL
ISP MySQL ISP MySQL
J
MySQL
MySQL mysql :
1 MySQL SQL 11

MySQL mysql
MySQL MySQL RDBMS mysql

MySQL my-ess-queue-ell MySQL


SQL sequel ess-queue-ell

paul localhost
samp_db secret
paul % % paul
localhost
GRANT GRANT
MySQL 11 MySQL

1.4.2

A
samp_db

1.4.3

UNIX Windows DOS


mysql

% UNIX $
Windows c:\>
mysql options

mysql MySQL

MySQL

MySQL

-h host_name --host=host_name
12 MySQL

mysql

-u user_name --user=user_name
MySQL UNIX MySQL
mysql MySQL
Windows ODBC
USER set
paul

-p --password
mysql MySQL -pyour_password
--password=your_password
-p mysql

Enter password:
MySQL UNIX Windows
-p mysql
-h -u
-p -p
MySQL paul secret
mysql

mysql Enter password: ******


secret
mysql mysql>

-h pit -
viper.snake.net

mysql -h -u -p

mysql
1.5 mysql
1 MySQL SQL 13

Control-D UNIX

1.4.4

mysql

mysql ;
Enter mysql
\g
mysql
mysql mysql

NOW()

mysql
mysql

mysql -> mysql

mysql
mysql

SQL
14 MySQL

\c

mysql> mysql
mysql
my_file.sql

.sql SQL
mysql samp_db
mysql INSERT

mysql>

mysql> SQL
mysql Perl PHP
mysql

1.4.5

samp_db

1)
2)
3)
1 MySQL SQL 15

mysql CREATE DATABASE

samp_db

samp_db USE

USE HELP
HELP
USE samp_db

mysql

p i t - v i p e r.snake.net samp_db

mysql samp_db
USE samp_db

1.4.6

samp_db
16 MySQL

1.

(president)
(member)

(1) president
president

member

Bush, George W.
George W.Bush
Jimmy Carter
J r. James
E . C a r t e r, J r. C a r t e r, James E., Jr. J r.

MySQL NULL

(2) member
member
president member member
president
1 MySQL SQL 17
ID ID
ID MySQL
member

NULL

Zip P.O. Box 123


123 Elm St.

Zip

(3)
C R E ATE TABLE

tbl_name column_specs
4

president CREATE TABLE

mysql samp_db
18 MySQL

CREATE TABLE
mysql
president

mysql

CREATE TABLE

president VARCHAR DATE VARCHAR n


n n
state VARCHAR(2)

DATE
YYYY-MM-DD
1999-07-18 ANSI SQL
president NULL NOT NULL
NOT NULL NULL s u ff i x
death
member CREATE TABLE

mysql

member
expiration DATE 0000-00-
00 NULL expiration
NULL NULL
0000-00-00
0000-00-00
1 MySQL SQL 19
ID ALTER TABLE

MySQL mysql

MySQL 3.23

state
CHAR(2) VARCHAR(2)
MySQL VARCHAR CHAR
3 ALTER
TABLE
DESCRIBE member mysql member
DESCRIBE
MySQL I N S E RT
LOAD DATA
DESCRIBE DESC DESCRIBE
tbl_name SHOW COLUMNS FROM tbl_name
SHOW TABLES samp_db

mysql
SHOW DATABASES
20 MySQL

samp_db mysql
MySQL
DESCRIBE SHOW
% mysqlshow SHOW DATABASES
% mysqlshow db_name SHOW TABLES
% mysqlshow db_name tbl_name DESCRIBE tbl_name

2.
1-2

ID
9 3 6 16 23 9 9 10 1

1-3
MySQL YYYY-MM-DD
score

1-2 1-3

1-3

T Q
1-4

9 23 Q 10 1 score
T

score
1-4 score
1 MySQL SQL 21
score
event 1-5
score 9 23 score event

score event

1999-09-23

1999-09-23

1-5 score event

score

1-2

score
T Q
event

1-5 event
score event
score event
score event

1) event
22 MySQL

ID event_id
1-2 ID
ID
2) score ID
1-6 score event ID
event event
ID

1-6 score
1-4
score score 1-6

ID score
score event

1-6 score event ID

MySQL

MySQL
1 MySQL SQL 23
score ID
ID event
ID
MySQL

MySQL ID
MySQL
1999 9 23

score event

1-4 ID
MySQL

SQL
1.5 mysql

ID score ID
Name student name student_id
1-7

student score event

1-7 student score event ID ID


24 MySQL

ID ID

1-7 student

adsence

ID 1-8
MySQL 1-8 absence

student CREATE TABLE

mysql

CREATE TABLE student name sex


student_id
name 20

sex ENUM
F M
ENUM CHAR(1) ENUM
ENUM DESCRIBE tbl_name MySQL

ENUM ENUM
( female , male )
1 MySQL SQL 25
student_id ID
ID student_id

INT
UNSIGNED
NOT NULL ID
AUTO_INCREMENT MySQL
student student_id NULL MySQL
ID
name sex MySQL student_id
P R I M A RY KEY
ID ID
MySQL AUTO_INCREMENT
AUTO_INCREMENT PRIMARY KEY
ID
ID
student_id AUTO_INCREMENT
event

mysql

NOT NULL
date MySQL DATE YYYY-MM-DD
type student sex type
T Q
event_id A U TO_INCREMENT student student_id
AUTO_INCREMENT ID student student_id

score

mysql
26 MySQL

score INT
58.5 FLOAT DECIMAL
student_id event_id
student event
P R I M A RY KEY
MySQL REPLACE
DELETE INSERT MySQL

event_id student_id score


event_id student_id

absence

mysql

student_id date NOT NULL

1.4.7

I N S E RT
LOAD
D ATA mysqlimport mysql
INSERT

INSERT SQL
INSERT

INTO MySQL 3.22.5 INSERT


1 MySQL SQL 27
VALUES
DESCRIBE tbl_name
MySQL NULL
student event AUTO_INCREMENT
student_id event_id
3.22.5 MySQL I N S E RT

INSERT

MySQL 3.22.5 INSERT

MySQL 3.22 .10 col_name = value

SET
INSERT
LOAD DATA
mysqlimport
LOAD DATA mysql

m e m b e r.txt
member
MySQL 3.22.15 LOAD DATA LOCAL
LOAD DATA LOCAL
MySQL
LOAD DATA tab

D LOAD DATA
mysqlimport LOAD DATA
28 MySQL

mysqlimport LOAD DATA

mysqlimport LOAD DATA member.txt member


MySQL 3.22.15 --local LOAD
DATA LOCAL mysql

mysqlimport
member.txt member president.txt president
mysqlimport
member1.txt member2.txt mysqlimport
member1 member2 m e m b e r.1.txt m e m b e r.2.txt m e m b e r.txt1
member.txt2

DELETE
INSERT

1.4.8

SELECT

SELECT
SELECT

SELECT
SELECT
FROM
WHERE
SQL SELECT
1 MySQL SQL 29
SELECT
FROM WHERE GROUP BY ORDER
BY LIMIT
FROM
FROM

FROM SELECT
* student

MySQL DESCRIBE student


...

SELECT * FROM student


30 MySQL

MySQL

UNIX
UNIX
Windows Windows

MySQL

1.
SELECT WHERE
1 MySQL SQL 31

WHERE 1-1 1-2 1-3

MySQL MySQL
C MySQL
1-1

+ *
/

1-2

< != <>
<= >=
= >

1-3

AND
Vi rginia Maryland OR
NOT

Virginia Maryland
and
SQL OR
32 MySQL

SQL
Virginia Maryland
2. NULL
NULL
NULL

NULL

NULL = != NULL
NULL IS NULL IS NOT NULL
NULL

IS NOT NULL
1 MySQL SQL 33
MySQL3.23 MySQL <=>
NULL NULL

3.
SELECT * FROM tbl_name

MySQL

ORDER BY

ORDER BY ASC DESC


DESC

ORDER BY ASC DESC

NULL NULL
NULL
34 MySQL

president

4.
LIMIT
ORDER BY MySQL n
5

ORDER BY birth DESC 5


LIMIT
0 1
11 5

MySQL 3.23.2 ORDER BY


RAND( ) LIMIT president
1 MySQL SQL 35

5.
MySQL

AS name
36 MySQL

6.
MySQL 1999 7 27
1999-07-27 , 07-27-1999 27-07-1999
MySQL

D ATE

YEAR( ) MONTH( ) DAYOFMONTH( )


3
1 MySQL SQL 37

MONTH( ) DAYOFMONTH( )

CURRENT_DATE

TO_DAYS( ) 365

FLOOR( )

60

MySQL 3.22 DATE_ADD( ) DATE_SUB( )


38 MySQL

70

DATE_ADD( )

7.
MySQL
LIKE NOT LIKE
_ % LIKE
NOT LIKE
W w

W% w%
W w
1 MySQL SQL 39

MySQL C REGEXP

8.
MySQL
MySQL

DISTINCT

COUNT( ) COUNT (*)


WHERE COUNT(*)

WHERE COUNT(*)
40 MySQL

COUNT(*) COUNT(col_name) NULL

41
MySQL 3.23.2 COUNT( ) DISTINCT

SELECT DISTINCT state FROM president SELECT COUNT(*)

MySQL
1 MySQL SQL 41

GROUP BY MySQL

COUNT(*) GROUP BY

GROUP BY
ORDER BY
ORDER BY
42 MySQL

ORDER BY
COUNT(*) count

ORDER
BY
GROUP BY ORDER BY

COUNT( ) ORDER BY LIMIT president 4


1 MySQL SQL 43
LIMIT COUNT( )
HAVING

H AVING WHERE

COUNT( ) MIN( ) MAX( ) SUM( ) AVG( )

event
44 MySQL

9.

DBMS

join
1 MySQL SQL 45

ID ID
ID

FROM

WHERE event score event_id

tbl_name.col_name MySQL
event_id
date score type

student
student_id score student
student_id

student FROM event score


student_id
score.student_id student.student_id
WHERE ID score student

ID

ID ID MySQL ID
46 MySQL

ID
absence ID student_id
absence student ID

GROUP BY
GROUP BY
student_id MySQL ORDER BY

LEFT JOIN WHERE ID LEFT JOIN


MySQL LEFT JOIN
student
absence

score
ID score
event
ID
1 MySQL SQL 47

COUNT( ) AVG( )
48 MySQL

p1 p2

WHERE

MONTH( ) D AYOFMONTH( )

DAYOFYEAR( ) MONTH( ) DAYOFMONTH( )

MySQL
event president

MySQL
1 MySQL SQL 49

1.4.9

DELETE UPDATE

DELETE
DELETE FROM tbl_name WHERE

WHERE
DELETE

WHERE SELECT
WHERE president Ohio

DELETE WHERE
DELETE SELECT WHERE
Te d d y
Roosevelt

Franklin Roosevelt WHERE

WHERE DELETE

mysql
50 MySQL

UPDATE
UPDATE tbl_name SET
WHERE

WHERE DELETE
G e o rg e

Jerome

NULL NULL
Jerome
NULL

DELETE UPDATE SELECT WHERE

samp_db
1.4.7

1.4.10

member ALTER
TABLE ALTER TABLE
A LTER TABLE
3
member
AUTO_INCREMENT MySQL
CREATE TABLE
1 MySQL SQL 51
ALTER TABLE

member
MySQL MySQL
AUTO_INCREMENT

1.5 mysql

mysql

1.5.1

mysql

mysql
1.
3.22 MySQL mysql

MySQL mysqlimport

~/.my.cnf
.my.cnf

[client] MySQL

serverhost yourname yourpass


.my.cnf

[client]
MySQL UNIX user
.my.cnf
52 MySQL

Windows c : \ m y. c n f
chmod
3.22 MySQL
Windows MySQL
MySQL 3.21 MySQL Windows
MySQL Web
E MySQL
2.
csh tcsh bash

mysql
% !my

my
Ctrl-P Ctrl-N
Enter tcsh bash

3.

csh tcsh alias samp_db

bash

alias csh .cshrc bash .bash_profile


mysql UNIX
samp_db

samp_db chmod +x samp_db


samp_db mysql
Windows samp_db.bat

DOS samp_db
Windows
1 MySQL SQL 53
mysql

1.5.2

mysql
mysql

mysql

mysql
INSERT
1. mysql
mysql GNU Readline

Enter

1-4
Readline
Readline http://www.gnu. org/ GNU Web
1-4 mysql

Up Ctrl-P
Down Ctrl-N
Left Ctrl-B
Right Ctrl-F
Escape Ctrl-B
Escape Ctrl-F
Ctrl-A
Ctrl-E
Ctrl-D
Delete
Escape D
Escape Backspace
Ctrl-K
Ctrl-_

mysql

Enter president persident


Ctrl-B s Delete er re
Enter Enter mysql
54 MySQL

Ctrl-P
mysql Windows MySQL Web
cygwin_32 mysqlc mysql

2.

1) Telnet DOS mysql


2) Mac OS BBEdit UNIX
X Window System xterm vi
3) Telnet DOS
mysql

ORDER BY

Telnet mysql
.mysql_history
mysql .mysql_history .mysql_history

3. mysql
mysql mysql

mysql
member interests

mysql

interests.sql mysql

mysql
mysql -t
1 MySQL SQL 55
Thomas Jefferson
depression Je fferson mysql

interests.sh

< < Q U E RY_INPUT Q U E RY_INPUT mysql


$1 $1 $2...

4.
INSERT INSERT

LOAD DATA mysqlimport

MySQL

UNIX
Telnet
1) UNIX Telnet Mac OS Better Telnet NCSA
Telnet Windows Telnet
2)
3) Telnet data.txt

cat
4) Telnet cat
data.txt
5)
Enter Ctrl-D cat data.txt
56 MySQL

data.txt LOAD
DATA mysqlimport
UNIX

FTP UNIX
UNIX UNIX
Mac OS Windows /
LOAD DATA mysqlimport UNIX

LOAD DATA FIELDS ENCLOSED BY


mysqlimport --fields - enclosed - by D LOAD
DATA

1.6

MySQL
MySQL

7 Perl DBI API 8 PHP API

MySQL
MySQL
MySQL
MySQL
MySQL mysql
2 MySQL
SELECT 1

MySQL 37.4 abc


CREATE TABLE

INSERT
14 int_col
a b C O N C AT( ) C O N C AT( ) ab
str_col
1 9 9 9 0 115 date_col MySQL

MySQL MySQL

NULL
CHAR
AUTO_INCREMENT TIMESTAMP

MySQL

13 13 abc 0
abc

B C MySQL
58 MySQL

2.1 MySQL

MySQL
1.
48 193.62 MySQL

0x
0 9 a f 0x0a 10 0 x ffff
65535 0x 0X 0x0a 0x0A
0X0a 0X0A

MySQL e E +
- 1.34E+12 43.27e-1
1.34E12 e

-
2.
Madison, Wisconsin patient shows improvement

2-1
\ NUL NULL NUL
NULL
2-1

\0 NUL (ASCII 0) \n
\ \r
\ \t
\b \\
2 MySQL 59
ASCII 0x616263
abc
3.
1999-06-17 12:30:43 MySQL /
1999-06-17 12:30:43 MySQL - -
MySQL ANSI SQL
DATE_FORMAT( )

4. NULL
NULL
NULL
NULL NULL NULL
NULL

2.2 MySQL

C R E ATE TABLE

SMALLINT
VARCHAR(32)
MySQL
MySQL
MySQL

NULL

MySQL

2.2.1

MySQL NULL
NULL NULL
MySQL 2-2
60 MySQL

2-2

TINYINT BIGINT
SMALLINT FLOAT
MEDIUMINT DOUBLE
INT DECIMAL

MySQL 2-3

MySQL

2-3

CHAR
VARCHAR
TINYBLOB BLOB
BLOB BLOB
MEDIUMBLOB BLOB
LONGBLOB BLOB
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM
SET

2-4 MySQL

2-4

DATE YYYY-MM-DD
TIME hh:mm:ss
DATETIME YYYY-MM-DD hh:mm:ss
TIMESTAMP YYYYMMDDhhmmss
YEAR YYYY

CREATE TABLE
f c i
my_table
2 MySQL 61

col_name 64

MySQL SELECT DELETE C R E ATE


POS MIN
col_type

CHAR(10) 10 TINYBLOB 255

UNSIGNED B I N A RY
CHAR VARCHAR
NULL NOT NULL
NULL DEFAULT def_value
def_value def_value
BLOB TEXT

MySQL
C R E ATE TABLE
[] MEDIUMINT[(M)] M
CHAR(M) (M)

2.2.2

MySQL
1 43 -3 0 -798432

3.14159 -.00273 -4.78 39.3E+4

2-5 2-6
62 MySQL

CREATE TABLE
C R E ATE TABLE
1 CREATE TABLE D

2-5

TINYINT[ (M) ] -128 127 -27 27 - 1


0 255 0 2 -1
8

SMALLINT[ (M) ] -32768 32767 -21 5 2 15 - 1


16
0 65535 0 2 -1
MEDIUMINT[ (M) ] -8388608 8388607 -22 3 22 3 - 1
24
0 16777215 0 2 -1
INT[ ( M) ] -2147683648 2147683647 -23 1 2 3 1-1
0 4294967295 0 23 2 - 1
BIGINT[ (M) ] -9223372036854775808 9223373036854775807 -2 63
26 3 - 1
0 18446744073709551615 0 26 4 - 1
FLOAT[ (M, D )], 1.175494351E - 38
FLOAT(4) 3.402823466E + 38
DOUBLE[ (M, D) ], 2.2250738585072014E - 308
FLOAT(8) 1.7976931348623157E + 308
DECIMAL (M, D) M D

2-6

TINYINT[ (M) ] 1
SMALLINT[ (M) ] 2
MEDIUMINT[ (M) ] 3
INT[ ( M) ] 4
BIGINT[ (M) ] 8
FLOAT[ (M, D)], FLOAT(4) 4
DOUBLE[ (M, D) ], FLOAT(8) 8
DECIMAL (M,D) M MySQL < 3.23 M+2 MySQL ≥ 3.23

MySQL TINYINT SMALLINT MEDIUMINT INT BIGINT


INT INTEGER
UNSIGNED 0

MySQL F L O AT DOUBLE DECIMAL


UNSIGNED

DOUBLE PRECISION[(M, D)] REAL[(M, D)] DOUBLE[(M, D)]


NUMERIC(M, D) DECIMAL(M, D) FLOAT(4) FLOAT(8) ODBC
MySQL 3.23 FLOAT(10, 2) DOUBLE(16, 4)
2 MySQL 63
MySQL 3.23 FLOAT(4) FLOAT(8)

TINYINT MEDIUMINT
BIGINT INT
DOUBLE FLOAT
FLOAT
M M 1 255
MEDIUMINT(4) 4
MEDIUMINT

M M
M D M 1 255
D 0 30 M-2 ODBC M D
ODBC M D FLOAT DOUBLE
DECIMAL
M D
M D DECIMAL M D

DESCRIBE my_table Field Type


MySQL 3.23 BIGINT
21 20
64 MySQL

MySQL

SMALLINT(3)
3 -32768 32767 12345
12345 99999
32767 32767
F L O AT(8, 1)
1.23456 1.2 F L O AT(8, 4)
1.2346

MySQL 3.23 FLOAT(4) FLOAT(8)


4 8

DECIMAL F L O AT DECIMAL DECIMAL


DECIMAL DOUBLE M D
M D M 2-7
M D D 2-7

2-7 M D DECIMAL(M, D)

MySQL < 3.23 MySQL ≥ 3.23


DECIMAL(4, 1) -9.9 99.9 -999.9 9999.9
DECIMAL(5, 1) -99.9 999.9 -9999.9 99999.9
DECIMAL(6, 1) -999.9 9999.9 -99999.9 999999.9
DECIMAL(6, 2) -99.99 999.99 -9999.99 99999.99
DECIMAL(6, 3) -9.999 99.999 -999.999 9999.999

DECIMAL MySQL MySQL 3.23


DECIMAL(M, D) M M
DECIMAL(5, 2) -9.99 99.99
5
MySQL 3.23 DECIMAL ANSI ANSI
DECIMAL(M, D) M D DECIMAL(5, 2)
-999.99 999.99 MySQL 3.23
DECIMAL M+2 DECIMAL(5, 2) -999.99 7
MySQL
ANSI DECIMAL(5, 2) 9999.99 7

MySQL 3.23 DECIMAL(M, D)


DECIMAL(M + 2, D)
MySQL DECIMAL D 0
2 MySQL 65
1.
ZEROFILL
ZEROFILL

SELECT

AUTO_INCREMENT AUTO_ INCREMENT


AUTO_INCREMENT 1 1 NULL AUTO_
INCREMENT MySQL 1
AUTO_INCREMENT
AUTO_INCREMENT NOT NULL
P R I M A RY KEY UNIQUE
AUTO_INCREMENT

AUTO_INCREMENT
UNSIGNED UNSIGNED

itiny itiny_u TINYINT 256 itiny


128 127 itiny_u 0 255 UNSIGNED

UNSIGNED
UNSIGNED
NULL NOT
66 MySQL

NULL NULL NOT NULL NULL DEFAULT

NULL NULL NULL 0


INT 1 1 NULL

2.

ID
A U TO_INCREMENT
AUTO_INCREMENT
AUTO_INCREMENT
(1) MySQL 3.23 AUTO_INCREMENT
MySQL 3.23 AUTO_INCREMENT
NULL A U TO_INCREMENT MySQL
AUTO_INCREMENT 1
1 2 3
1
0 AUTO_INCREMENT NULL
AUTO_INCREMENT NULL
AUTO_INCREMENT
AUTO_INCREMENT

AUTO_INCREMENT

A U TO _
INCREMENT 1000 1
1000
NULL A U TO_INCREMENT
AUTO_INCREMENT 999
1000
AUTO_INCREMENT
AUTO_INCREMENT

1
REPLACE
2 MySQL 67
U P D ATE A U TO _ I N C R E M E N T
NULL 0

LAST_INSERT_ID( )
AUTO_INCREMENT LAST_INSERT_ID( )
A U TO_INCREMENT
AUTO_INCREMENT AUTO_INCREMENT
LAST_INSERT_ID( ) 0
AUTO_INCREMENT

(2) MySQL 3.23 AUTO_INCREMENT


MySQL 3.23 AUTO_INCREMENT
143
MySQL 144
A U TO _ I N C R E -
MENT seq 1,000,000

AUTO_INCREMENT = 1000000
AUTO_INCREMENT
(3) AUTO_INCREMENT
AUTO_INCREMENT
A U TO_INCREMENT A U TO _
INCREMENT MySQL 3.23
CHAR A U TO_INCREMENT
AUTO_INCREMENT
A U TO_INCREMENT
A U TO_INCREMENT A U TO_INCREMENT
UNSIGNED
AUTO_INCREMENT

MySQL

AUTO_INCREMENT
AUTO_INCREMENT
68 MySQL

TINYINT UNSIGNED 255

MySQL 3.23 A U TO_INCREMENT


C R E ATE TABLE
DELETE

1 CREATE
TABLE
MySQL DELETE

MySQL

3.23
AUTO_INCREMENT
NULL
LAST_INSERT_ID( )

AUTO_INCREMENT 100 1
MySQL
MySQL 3.23 C R E ATE TABLE

WHERE SELECT
COUNT(*)
100 NULL MySQL
100 101 MySQL

1
ID 1 000 000
ID
ZEROFILL
Perl PHP
Perl
2 MySQL 69

Perl s ++ +=
+= $s

1
1
(4) AUTO_INCREMENT
AUTO_INCREMENT
LAST_INSERT_ID( ) MySQL 3.22.9.
L A S T _ I N S E RT_ID(expr)
LAST_INSERT_ID( ) expr AUTO_INCREMENT
expr

seq_table seq 0

seq 1 L A S T _ I N S E RT _
ID(seq + 1) A U TO_INCREMENT
LAST_INSERT_ID( )
LAST_INSERT_ID( )
1
100

seq
3

2.2.3

MySQL
70 MySQL

gzip

4GB
/
24MB
2-8 MySQL

L
2-8

CHAR(M) M M
VARCHAR(M) M L +1
TINYBLOB, TINYTEXT 28 -1 L +1
BLOB, TEXT 21 6 - 1 L +2
MEDIUMBLOB, MEDIUMTEXT 2 2 4-1 L +3
LONGBLOB, LONGTEXT 2 3 2-1 L +4
ENUM( value1 , value2 , ...) 65535 1 2
SET( value1 , value2 , ...) 64 1 2 3 4 8

L MySQL

MEDIUMBLOB 2 24 - 1 3 3
MEDIUMINT 2 24 - 1
1. CHAR VARCHAR
CHAR VARCHAR CHAR
VARCHAR CHAR(M) M M
VARCHAR(M)
ANSI SQL VARCHAR

CHAR VARCHAR

VARCHAR
MySQL 3.23 CHAR VARCHAR 1 255 M
MySQL 3.23 CHAR(0)
CHAR(0) A LT E R
TABLE NULL CHAR(0) on/off
2 MySQL 71
NULL CHAR(0)
CHAR VA R C H A R MySQL

2.3

VARCHAR CHAR MySQL


VARCHAR

DESCRIBE my_table

VARCHAR MySQL c1 VARCHAR


ALTER TABLE c1 CHAR VARCHAR CHAR
VARCHAR

BLOB TEXT VARCHAR


BLOB TEXT CHAR CHAR
VARCHAR
CHAR 4
MySQL CHAR VARCHAR

4 VARCHAR
MySQL
VARCHAR CHAR MySQL

VARCHAR CHAR
72 MySQL

DESCRIBE my_table

2. BLOB TEXT
BLOB
MySQL BLOB TINYBLOB BLOB MEDIUMBLOB
LONGBLOB 2-8
MySQL TEXT TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB BLOB
TEXT BLOB TEXT

BLOB TEXT MySQL 3.23

BLOB TEXT
BLOB TEXT

BLOB TEXT
BLOB TEXT
OPTIMIZE TABLE
4
max_allowed_packet
11 MySQL
E MySQL mysql
mysqldump
3. ENUM SET
ENUM SET
ENUM SET
ENUM SET

ENUM ENUM
65 536 MySQL
ENUM( N , Y ) N Y ENUM
2 MySQL 73
Web ENUM

ENUM

ENUM
SET SET ENUM
SET ENUM
64 SET
SET

SET

SET
SET
SET
SET Web

Web

ENUM SET

ENUM SET
ENUM( Y , N )
y n Y N
ENUM SET
ENUM SET

SET SET

ENUM SET
ENUM SET

ENUM SET
74 MySQL

ENUM 1 0 MySQL
ENUM 256
65 536 TINYINT
UNSIGNED SMALLINT UNSIGNED 65 536
256 ENUM
65 535 65 536 MySQL
ENUM MySQL
mysql
NULL

ENUM

0
x ENUM
2 MySQL 75
SET ENUM
SET 0 1
SET 0 SET 8
SET 64 1 8
9 16 17 24 25 32 33 64 SET 1 2 3 4 8

SET SET
SET

SET

SET
SET
SET

chair, couch, table couch


table, chair MySQL
1 couch
MySQL

lamp, lamp, lamp SET


lamp
MySQL SET
c h a i r, table c h a i r, table
table, chair
ENUM SET
76 MySQL

NULL
ENUM
ENUM
ENUM CONCAT( )
ENUM

4.
CHAR VARCHAR BINARY

NULL NOT NULL


NULL NOT NULL
NOT NULL

BLOB TEXT DEFAULT


MySQL NULL
NULL NULL ENUM ENUM
SET NULL

2.2.4

MySQL D AT E D AT E T I M E TIME
TIMESTAMP YEAR 2-9 MySQL
YEAR MySQL 3.22
MySQL 2-10

2-11 NOT NULL


2 MySQL 77
2-9

DATE 1000 - 01 - 01 9999 - 12 - 31


TIME - 838:59:59 838:59:59
DATETIME 1000 - 01 - 01 00:00:00 9999 - 12 - 31 23:59:59
TIMESTAMP[(M)] 19700101000000 2037
YEAR[(M)] 1901 2155

2-10

DATE 3 MySQL 3.22 4


TIME 3
DATETIME 8
TIMESTAMP 4
YEAR 1

MySQL ANSI 2-11


1999 12 3
1999-12-03 MySQL
DATE 0000 - 00 - 00
TIME 00:00:00
DATETIME 0000- 00 - 00 00:00:00
10 TIMESTAMP 00000000000000
YEAR 0000

12/3/99 3/12/99 MySQL

MySQL
1. DATE TIME DATETIME
DATE TIME D ATETIME
YYYY - MM - DD hh:mm:ss YYYY - MM - DD hh:mm:ss DATETIME
DATE DATETIME MySQL
00:00:00
MySQL DATETIME TIME DATETIME
TIME
TIME
12:30 TIME 00:12:30 12 30
TIME
12 30 12:30:00
2. TIMESTAMP
TIMESTAMP YYYYMMDDhhmmss 19700101000000
2037 UNIX UNIX 1970
1970 T I M E S TAMP
UNIX 2037
78 MySQL

T I M E S TAMP UNIX
MySQL
TIMESTAMP
TIMESTAMP NULL
TIMESTAMP
TIMESTAMP TIMESTAMP
NULL
T I M E S TAMP 2-12 TIMESTAMP
M 2-12
M TIMESTAMP
TIMESTAMP(14) YYYYMMDDhhmmss
M 0 14 TIMESTAMP(12) YYYYMMDDhhmm
TIMESTAMP(14) 1 13 TIMESTAMP(10) YYMMDDhhmm
M TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
T I M E S TAMP
TIMESTAMP(4) YYMM
T I M E S TAMP TIMESTAMP(2) YY
4 14

SELECT

MySQL T I M E S TAMP
14
MySQL

TIMESTAMP NULL
2 MySQL 79

DATETIME NOW( )

UPDATE tbl_name SET /* angthing BUT dt_col here */ WHERE ...

T I M E S TAMP
TIMESTAMP TIMESTAMP
T I M E S TA M P
TIMESTAMP NOW( )
TIMESTAMP
3. YEAR
YEAR 1 1901 2155
YEAR
YEAR
YEAR M 4 2 YEAR
M 4
TINYINT YEAR
YEAR SMALLINT
YEAR YEAR
SMALLINT YEAR MySQL MySQL
2 4 97 14 1997 2014
00 0000 2-13
2000 2000
00
DATETIME YYYY - MM - DD hh:mm:ss
4. TIMESTAMP YY - MM - DD hh:mm:ss
YYYYMMDDhhmmss
NULL NOT YYMMDDhhmmss
YYYYMMDDhhmmss
NULL
YYMMDDhhmmss
NULL NOT NULL DATE YYYY - MM - DD
NULL YY - MM - DD
D E FA U LT YYYYMMDD
YYMMDD
YYYYMMDD
NULL YYMMDD
NULL TIME hh:mm:ss
hhmmss
hhmmss
5. YEAR YYYY
MySQL YY
D ATE YYYY
YY
80 MySQL

2-13

- :

: MySQL :
10

001231
DATE 2000-12-31 DATETIME 2000-12-31 00:00:00
001231 1231
DATE 20001231 DATETIME 200012310000
DATE DATETIME TIMESTAMP

DATETIME TIMESTAMP DATE


DATE DATETIME TIMESTAMP
T I M E S TAMP 1970 2037
1970 DATETIME TIMESTAMP
2037 TIMESTAMP
MySQL C
6.
DATE DATETIME TIMESTAMP YEAR
MySQL MySQL
4.0 69 1969 2069 X/Open UNIX

00 69 2000 2069
70 99 1970 1999
YEAR
2 MySQL 81
00 0000 2000 0 YEAR
2000 0 00
CONCAT( ) YEAR MySQL CONCAT( )

MySQL MySQL

MySQL
MySQL 2000
MySQL

MySQL
president 1700

MySQL

2.3

MySQL

2 11 2 11

MySQL
82 MySQL

UNSIGNED ENUM
SET

10 CHAR(255)

MySQL BLOB TEXT


MySQL NOT NULL
NULL

ALTER TABLE
SMALLINT MEDIUMINT
CHAR ENUM MySQL 3.23
PROCEDURE ANALYSE( )

2.3.1

0.25 (trace)
2 MySQL 83

NULL

0.01

FLOAT DOUBLE

DECIMAL(M, 2) M
DECIMAL

100

height
6 2 6-2
74

MySQL

MySQL
DATE DATETIME
D ATE TIME
TIME NULL

date DATE NOT NULL,


time TIME NULL
84 MySQL

-
ID

D ATETIME
DATE TIME

TIME

D ATE

NULL MySQL 3.23


DATE 0 0

2.3.2

0 1000 SMALLINT BIGINT


2 000 000 SMALLINT MEDIUMINT BIGINT

BIGINT

BIGINT
2 MySQL 85
ALTER TABLE
1 score
score INT 0
100 TINYINT UNSIGNED
UNSIGNED

256 CHAR VA R C H A R TINYTEXT TINYBLOB


TEXT BLOB CHAR VARCHAR

ENUM SET

1000

0 100
TINYINT UNSIGNED
1
NULL 1 1 UNSIGNED
ALTER TABLE

2.3.3

MySQL
1.

ENUM SET
86 MySQL

dotted-quad IP 192.168.0.4
UNSIGNED IP
IP INT

2.

I/O
MEDIUMINT
BIGINT F L O AT DOUBLE
BLOB 2 LONGBLOB
4 64KB BLOB
2 TEXT
3.

OPTIMIZE TABLE

CHAR(n)
n
VARCHAR(N)
CHAR VARCHAR

CHAR VARCHAR
A LT E R
TABLE
255

4.

5. NULL NOT NULL


NOT NULL MySQL
NULL
NULL NULL
2 MySQL 87
MySQL
CHAR VARCHAR
VARCHAR

2.3.4

2-14
BINARY CHAR VARCHAR
BLOB TEXT
2-14

CHAR(M) CHAR(M) BINARY


VARCHAR(M) VARCHAR(M) BINARY
TINYTEXT TINYBLOB
TEXT BLOB
MEDIUMTEXT MEDIUMBLOB
LONGTEXT LONGBLOB

TEXT
TEXT

B I N A RY my_col
CHAR
my_col = ABC
BINARY my_col = ABC
my_col = BINARY ABC

ENUM ENUM

2.3.5

4
WHERE

3.23.2 MySQL NOT NULL BLOB


TEXT MySQL 3.23.2
88 MySQL

NULL
DATE 0000 - 00 - 00
-1
BLOB TEXT 255
VARCHAR VARCHAR(255) BINARY BLOB
VARCHAR(255) TEXT

2.3.6

A U TO _
INCREMENT
NULL
A U TO_INCREMENT
TINYINT BIGINT
A U TO_INCREMENT

PRIMARY KEY UNIQUE


MySQL 3.23.2 NULL
NOT NULL
AUTO_INCREMENT

AUTO_INCREMENT
AUTO_INCREMENT UNSIGNED

2.4

MySQL

SELECT WHERE

WHERE
2 MySQL 89
DELETE UPDATE WHERE INSERT VALUES( )

MySQL (4 * 3)/(4 - 2) 6
MySQL 960821
1996-08-21
MySQL MySQL
MySQL MySQL
C

2.4.1

0
abc

NOW( )
STRCMP( abc , def )
STRCMP( abc , def )
STRCMP ( abc , def )

MySQL

SELECT

1.
MySQL 2-15
+ - *
BIGINT 64 / %
90 MySQL

BIGINT 64
64
2-15

+ a+b
- a-b
- -a
* a*b
/ a/b
% a%b

2-16 MySQL
C && || ! AND OR NOT ||
ANSI SQL || MySQL
0

MySQL abc def 0, 0 0


0 MySQL CONCAT( abc , def )
2-16

AND, && a AND B, a && b


OR, || a OR B, a || b
NOT, ! NOT a, !a

2-17
AND OR BIGINT 64

2-17

& a&b AND 1 1


| a|b OR 1 1
<< a << b a b
>> a >> b a b

2-18
NULL <=> MySQL MySQL 3.23

2-18

= a=b
!=, <> a != b, a <> b
< a<b a b
<= a <= b a b
2 MySQL 91

>= a >= b a b
> a>b a b
IN a IN (b1, b2, ...) a b1, b2, ...
BETWEEN a BETWEEN b AND c a b c b c
LIKE a LIKE b SQL a b
NOT LIKE a NOT LIKE b SQL a b
REGEXP a REGEXP b a b
NOT REGEXP a NOT REGEXP b a b
<=> a <=> b NULL
IS NULL a IS NULL NULL
IS NOT NULL a IS NOT NULL NULL

MySQL 3.23 B I N A RY

NOT BINARY
BINARY
CHAR BINARY VARCHAR BINARY BLOB

UPPER( ) LOWER( )

e
ASCII
MySQL LIKE %
_ SQL MySQL
grep sed vi UNIX REGEXP
=
NOT LIKE NOT REGEXP

LIKE REGEXP
MySQL 3.23.4
REGEXP
SQL

LIKE % _ Frank%
Frank
92 MySQL

% Frank% Frank

% % NULL
NULL

MySQL LIKE
Frank% Frankly frankly

ANSI SQL LIKE


%bert Englebert Bert Albert
%bert% Berthold Bertram Alberta

LIKE _ __
c_t cat cut c_t _
% _
\% \_

MySQL REGEXP LIKE


RLIKE REGEXP
.

[...] -
^

* x* x

0 ^pat
pat$ pat ^pat$
2 MySQL 93
pat

REGEXP

MySQL C
2.

*
/ + -

3. NULL
NULL

NULL NULL

NULL NULL

NULL <=> IS NULL IS NOT NULL


NULL NULL
94 MySQL

NULL NULL NULL


IFNULL( ) NULL STRCMP( )
NULL NULL NULL
NULL NULL NULL
NULL NULL

2.4.2

MySQL

+ 1 2

MySQL
+
MySQL 2 2 3
C O N C AT( )
CONCAT( )

C O N C AT( )

CONCAT(1, 2, 3) 123 123 /10 123/10


12.3 REPEAT( )
12 REPEAT( X , 12) 12 X
MySQL
MySQL

abc 0
abc
0000-00-00

MySQL
2 MySQL 95

MySQL
0

MySQL 3.23
3.23

.3
.3 0 1

IF( )
1

MySQL
MySQL

< <= =
96 MySQL

MySQL

MySQL
<=> NULL NULL NULL <=> NULL
<=> =

T I M E S TAMP D ATETIME
TIMESTAMP ODBC

0 14.3
14.3 L4.3 0
1.
MySQL

my_table DATE date_col

TO_DAYS( )

2.
mysql
SELECT

DELETE UPDATE
2 MySQL 97
DELETE U P D ATE WHERE
my_table CHAR char_col

00
MySQL char_col 00
MySQL
DELETE char_col 0 00 0
0 WHERE
DELETE DELETE SELECT
WHERE

MySQL

+0 + 0.0

CONCAT( )

ASCII( ) ASCII

DATE_ADD( )
98 MySQL

3.

MySQL

TIME

ENUM SET
ENUM SET ENUM

SET

2 - 11
TIME NULL

ALTER TABLE LOAD DATA UPDATE INSERT


mysql
MySQL C API mysql_info( )
Perl DBI API mysql_info
SELECT ... INTO
OUTFILE
3 MySQL SQL
MySQL SQL mysql
SQL
MySQL SQL SQL

1 MySQL SQL MySQL


MySQL SQL
SQL

MySQL SQL

3.1 MySQL SQL

MySQL SQL
3-1 3-1
MySQL
SQL
mysqlshow SHOW COLUMNS

GRANT
REVOKE 11 MySQL

D SQL
MySQL MySQL Reference
Manual
MySQL
MySQL
MySQL

MySQL

3-1 MySQL SQL


100 MySQL

LOCK
TABLES UNLOCK TABLES MySQL

/ Postgres
MySQL 3.24

3.2 MySQL

SQL

3.2.1

_ $

MySQL
E e
23e + 14 23e 14 23e+14

64
256

db_name

tbl_name
samp_db

member samp_db
db_name.tbl_name.col_name
tbl_name.col_name col_name
FROM
3 MySQL SQL 101

USE
SELECT

MySQL

3.2.2 SQL

SQL

SQL

MySQL

UNIX UNIX
Windows Windows

UNIX Windows
abc ABC Windows

MySQL

SQL

SelECt NamE FrOm ...

3.3

MySQL C R E ATE DATABASE


102 MySQL

DROP DATABASE USE


1. CREATE DATABASE
CREATE DATABASE

2. DROP DATABASE

DROP DATABASE

DROP DATABASE

3. USE
USE

db_name.tbl_name

USE

MySQL

3.4

CREATE TABLE DROP TABLE ALTER TABLE


MySQL
CREATE INDEX DROP INDEX

3.4.1 CREATE TABLE

C R E ATE TABLE
3 MySQL SQL 103
1 C R E AT E
TABLE
MySQL
D C R E ATE TABLE
REFERENCES CONSTRAINT CHECK
MySQL

CREATE TABLE

1 C R E ATE TABLE 2

MySQL 3.23 CREATE TABLE

1.
MySQL 3.23 ISAM MySQL 3.23
CREATE TABLE TYPE = type
type MYISAM ISAM HEAP

ALTER TABLE

HEAP
HEAP

MyISAM MyISAM 3.23 MySQL


104 MySQL

ISAM

AUTO_INCREMENT ISAM 2
NULL BLOB
TEXT
myisamchk
myisamchk - fast

ISAM ISAM MySQL 3.23


ISAM MyISAM ISAM
MyISAM
HEAP HEAP

CREATE TEMPORARY TABLE HEAP


HEAP MyISAM ISAM
= <=>
NULL
BLOB TEXT
AUTO_INCREMENT
2.
CREATE TABLE IF NOT EXISTS
IF NOT EXISTS
mysql C R E ATE TABLE

IF NOT EXISTS

3.
C R E ATE TEMPORARY TABLE
DROP TABLE
mysql

MySQL
3 MySQL SQL 105

samp_db member
member member
DROP TABLE member member

member

4. SELECT
SELECT
SELECT
MySQL 3.23 SELECT

1) DESCRIBE SHOW COLUMNS


2)
3) INSERT ... SELECT

MySQL 3.23 CREATE TABLE ... SELECT


SELECT

WHERE
WHERE

LOAD DATA

LOAD DATA

CREATE TEMPORARY TABLE SELECT

my_tbl

C R E ATE TEMPORARY TA B L E

C R E ATE TEMPORARY ... SELECT


WHERE 0
106 MySQL

mysql

t1 t2
c

3.4.2 DROP TABLE

MySQL DROP TABLE

IF EXISTS DROP TABLE MySQL

IF EXISTS mysql mysql

DROP TA B L E
IF EXISTS

3.4.3

4
4

1.
MySQL

ENUM SET n n
3 MySQL SQL 107
MySQL
ISAM MyISAM
ISAM MyISAM
NULL
BLOB TEXT
16 32
16 16
256 500
ISAM NOT NULL
BLOB TEXT MyISAM
MySQL
3.23 NULL

MySQL 3.23 ISAM


ALTER TABLE MyISAM

2.
C R E ATE TABLE C R E ATE INDEX
ALTER TABLE CREATE INDEX MySQL 3.23
3.23 A LTER TABLE MySQL
CREATE INDEX ALTER TABLE
P R I M A RY KEY
UNIQUE

PRIMARY KEY UNIQUE PRIMARY KEY


PRIMARY UNIQUE PRIMARY KEY
UNIQUE

A LTER TABLE C R E ATE INDEX


ALTER TABLE UNIQUE PRIMARY KEY

tbl_name column_list
index_name
MySQL ALTER TABLE

CREATE INDEX UNIQUE


108 MySQL

tbl_name index_name column_list ALTER TABLE


CREATE INDEX PRIMARY KEY
C R E ATE TABLE A LT E R
TABLE

A LTER TABLE INDEX UNIQUE


MySQL
PRIMARY KEY PRIMARY KEY

NOT NULL ISAM


NULL MyISAM NULL
PRIMARY KEY
n column_list
col_name(n) col_name
CHAR
3 MySQL SQL 109
MyISAM BLOB TEXT

3.
DROP INDEX ALTER TABLE CREATE INDEX
DROP INDEX A LTER TABLE DROP INDEX
MySQL 3.22

P R I M A RY KEY

P R I M A RY KEY UNIQUE MySQL


UNIQUE

3.4.4 ALTER TABLE

ALTER TABLE MySQL

ALTER TABLE D
ALTER TABLE

CREATE TABLE
ALTER TABLE
Web

AUTO_INCREMENT
50 000 UNSIGNED
SMALLINT 65 535
50 000
CHAR(255)
100
ALTER TABLE

action MySQL ALTER TABLE

VARCHAR CHAR

ALTER TABLE
110 MySQL

MySQL 3.23

CHANGE MODIFY my_tbl


SMALLINT UNSIGNED MEDIUMINT UNSIGNED

CHANGE CHANGE MODIFY


i j

t1.name CHAR(10) t2.name CHAR(15)


CHAR(15) t1.name

3.23 MySQL
3.23

chartbl VARCHAR
CHAR

A LTER TABLE
DESCRIBE chartbl
VARCHAR MySQL
VARCHAR
VARCHAR

DESCRIBE CHAR
ALTER TABLE
BLOB TEXT
3 MySQL SQL 111
chartbl

CHAR VARCHAR MySQL CHAR


chartbl

MySQL 3.23 3.23


ISAM MyISAM

MyISAM ISAM NULL BLOB


TEXT MyISAM
11

3.5

MySQL
A LTER TABLE

SHOW
SHOW DATABASES
SHOW TABLES
SHOW TABLES FROM db_name
SHOW COLUMNS FROM tbl_name
SHOW INDEX FROM tbl_name
SHOW TABLE STATUS
SHOW TABLE STATUS FROM db_name

DESCRIBE tbl_name EXPLAIN tbl_name SHOW COLUMNS FROM tbl_name

mysqlshow SHOW

% mysqlshow
% mysqlshow db_name
% mysqlshow db_name tbl_name
% mysqlshow -- keys db_name tbl_name
% mysqlshow --status db_name

mysqldump C R E ATE TABLE SHOW


COLUMS mysqldump
mysqldump - no - data
112 MySQL

mysqlshow mysqldump -- host

3.6

SELECT SELECT SQL

SELECT
SELECT selection_list
FROM table_list
WHERE primary_constraint
GROUP BY grouping_columns
ORDER BY sorting_columns
HAVING secondary_constraint
LIMIT count

SELECT column_list
FROM MySQL

1 SELECT
WHERE GROUP BY ORDER BY HAVING LIMIT
SELECT join MySQL
MySQL

3.8 SQL
SELECT
SELECT
SELECT
SELECT

LEFT JOIN

MySQL

t1 t2
3 MySQL SQL 113

3.6.1

trivial join

SELECT
SELECT

3.6.2

100 200 300 100 200 300


=6 WHERE

WHERE
equi-join
114 MySQL

JOIN CROSS JOIN INNER JOIN ,


STRAIGHT_JOIN FROM
MySQL
STRAIGHT_JOIN
SELECT STRAIGHT_JOIN SELECT
FROM

SELECT FROM
FROM

tbl_name.col_name
my_tbl1 a b my_tbl2 b c a c
b my_tbl1.b my_tbl2.b

alias_name.col_name

3.6.3

NULL

NULL LEFT JOIN

ON USING( )
ON
3 MySQL SQL 115
USING( ) ON
my_tbl1.b my_tbl2.b

LEFT JOIN
NULL WHERE

NULL

LEFT JOIN NOT NULL

LEFT JOIN LEFT OUTER JOIN LEFT JOIN


LEFT JOIN MySQL ODBC oj outer join

NATURAL LEFT JOIN LEFT JOIN LEFT JOIN

RIGHT JOIN MySQL

3.7

MySQL SQL
# C
/* */ C

MySQL 3.23 C MySQL


/*! /* MySQL
MySQL
MySQL
MySQL MySQL
INSERT DELAYED
116 MySQL

MySQL 3.23.3
--
MySQL
5--7 5-- 7

3.8

3.8.1

MySQL 3.24 MySQL

MySQL

1.
score

2.

LEFT JOIN
3 MySQL SQL 117
LEFT JOIN

table2.column2 NOT NULL

3.8.2

3.6
LEFT JOIN NULL

t1 t2

t2.i2 t1.i1 LEFT JOIN

1
student event
score
score

LEFT JOIN

/ student event

score LEFT JOIN


118 MySQL

ON score
LEFT JOIN student event
score
score NULL WHERE score
score

ORDER BY

ID ID student_id
student score student.student_id
score.student_id
NULL score.student_id NULL
event_id event score

3.8.3 UNION
3 MySQL SQL 119
UNION MySQL UNION 3.24

SELECT

MySQL 3.23

HEAP

3.23 hold_tbl
DROP TABLE

3.8.4

A LTER TABLE A U TO_INCREMENT


mysql
AUTO_INCREMENT
120 MySQL

3.8.5

AUTO_INCREMENT
ALTER TABLE

3.8.6

ENUM

3.8.7

2 LAST_INSERT_ID(expr)

Web nnn

LAST_INSERT_ID( )

P R I M A RY
KEY
Web

index.html
LAST_INSERT_ID( )
3 MySQL SQL 121
LAST_INSERT_ID( )

UPDATE SELECT
LOCK TABLES UNLOCK
TA B L E S L A S T _ I N S E RT_ID( )

3.8.8

mysql

3.9 MySQL

MySQL
MySQL

SELECT SELECT

MySQL 3.24
3.8.1
/ SQL
/

MySQL SQL
LOCK TABLES UNLOCK TABLES

MySQL
122 MySQL

47
t1 1 3
t2 47

t3 2 2
t4 2 47

t5 1 47 - 3 = 44 44

t6 2 47 - 2 = 45 45

5 45 42

2
1 MySQL
1 LOCK TABLES UNLOCK
TABLES

t1 1 3
t2 1 47

t3 2 2
t4 2 1

t5 1 47 - 3 = 44 44

t6 2 2 44

t7 2 44 - 2 = 42 42

WRITE inventory
READ
2
3 MySQL SQL 123

inventory customer
inventory customer

t1 1 3
t2 1 3

t3 2 2
t4 2 2

Bill Bob $100 Bob


Bill $100 Bob

MySQL

samp_db
score student_id student
score.student_id
124 MySQL

student
student
score
MySQL
MySQL

MySQL

DELETE
C R E ATE TABLE FOREIGN KEY
MySQL MySQL
MySQL

score
student
ID score
score
DELETE
13
student score

MySQL DELETE

SQL

MySQL

MySQL

MySQL
GET_LOCK( ) RELEASE_
LOCK( ) C

-- MySQL
MySQL 3.23
3.7
4

SELECT

MySQL

4.1

MySQL

MySQL

4.1.1

4-1 1 MySQL SQL ad


126 MySQL

4-2 company_num
company_num
13
3 14
14

ad

ID

4-1 ad

4-2 ad

t1 t2 t3 c1 c2 c3 1
4 127
1000 1000

1000 3

WHERE 1000 1000 1000


MySQL
1000

1) t1
2) t2 t2 t1 t3
t3 t1
3) t1 t1
t1 t2 t3

MySQL WHERE

MIN( ) MAX( )
MySQL ORDER BY
MySQL

4.1.2

MySQL

4.4

4.1.3
128 MySQL

WHERE SELECT

SELECT
col_a
FROM
Tbl1 LEFT JOIN tbl2
ON tbl1.col_b = tbl2.col_c
WHERE
col_d = expr

WHERE

col1 = col2
col_b col_c MySQL

M F

CHAR(200) 10 20
10 20
I/O

MySQL

n MySQL n

state city zip


state/city/zip state/city state
state state city MySQL

MySQL city zip


zip 1 3
4 129

MySQL
MySQL

< <= = >= >


BETWEEN LIKE
STRCMP( )

4.2 MySQL

MySQL
MySQL
Getting Maximum Performance from MySQL MySQL
MySQL
h t t p : / / w w w.mysql.com/
MySQL
MySQL
MySQL

MySQL WHERE
EXPLAIN EXPLAIN MySQL
SELECT EXPLAIN
SELECT EXPLAIN

EXPLAIN

EXPLAIN

4.2.1

MySQL
SELECT
130 MySQL

col1 900 col2 300


30 col1 900 col2 30
870 col2 col1 30
300 270 I/O

CHAR(10) CHAR(10) VARCHAR(10) CHAR(12)


VARCHAR(12) INT BIGINT MySQL 3.23
3.23
A LTER TA B L E

MySQL

WHERE
4/2 2 my_col 2
MySQL my_col 2 4

date_col

1990
date_col
date_col

TO_DAYS(date_col) cutoff TO_DAYS(CURRENT_DATE)

date_col
4 131
date_col
LIKE WHERE

string
%
% Mac
WHERE

last_name

REGEXP

myisamchk isamchk --analyze


myisamchk MyISAM isamchk ISAM
MySQL
EXPLAIN
STRAIGHT_JOIN
MySQL

4.2.2

MySQL
MySQL WHERE
DELETE

MySQL DELETE
DELETE MySQL

MySQL
132 MySQL

AUTO_INCREMENT 1
MySQL 3.23 AUTO_INCREMENT
2
WHERE 1 > 0 DELETE

MySQL
A U TO_INCREMENT MyISAM
MySQL 3.23 ISAM
WHERE

my_tbl key_col

WHERE key_col MySQL

MySQL 3.23.2

MySQL 3.23.3 ORDER BY RAND( )


MySQL

MySQL
ORDER BY
age

STRIGHT_JOIN

STRAIGHT_JOIN

4.3

BLOB
BLOB TEXT

CHAR VARCHAR
4 133
CHAR
40
CHAR(255) CHAR(40) MEDIUMINT
BIGINT I/O
NOT NULL
NULL
ENUM
ENUM ENUM
PROCEDURE ANALYSE( ) MySQL 3.23
PROCEDURE ANALYSE( )

PROCEDURE
ANALYSE( ) 16 256 ENUM
ENUM
PROCEDURE ANALYSE( )
ALTER TABLE
BLOB BLOB

3 ALTER TABLE
Web
ALTER TABLE
Web
BLOB

BLOB DELETE
UPDATE BLOB

OPTIMIZE TABLE

BLOB
OPTIMIZE TABLE

< >=
MySQL 3.23 MD5( )
BLOB MySQL 3.23.2
134 MySQL

BLOB 3.23.2
BLOB BLOB
BLOB TEXT WHERE
SELECT *
BLOB
BLOB
BLOB
BLOB BLOB
BLOB

4.4

SELECT

SQL SQL

LOAD DATA INSERT

LOAD DATA LOAD DATA LOCAL LOAD DATA


FILE LOAD
DATA LOCAL
INSERT

mysqldump --extended-insert
INSERT --opt --extended-insert
mysqldump --complete-insert INSERT
--complete-insert
/ MySQL
--compress
4 135
MySQL I N S E RT

LOAD DATA I N S E RT

DROP INDEX CREATE INDEX


myisamchk isamchk MySQL

.MYI MyISAM myisamchk .ISM


ISAM isamchk

n --description

13

SELECT SELECT
I N S E RT

SELECT

Web Web MySQL

MyISAM DELAYED_KEY_WRITE MySQL


136 MySQL

--delayed-key-write
mysqld
flush-tables

4.5

MySQL

MySQL
SELECT
DELETE I N S E RT REPLACE UPDATE

MySQL

LOCK TABLES
UNLOCK
TABLES

MySQL DELETE
INSERT LOAD DATA REPLACE UPDATE LOW_PRIORITY
SELECT HIGH_PRIORITY I N S E RT REPLACE
DELAYED
LOW_PRIORITY

LOW_PRIORITY

LOW_PRIORITY
4 137
LOW_PRIORITY
SELECT HIGH_PRIORITY SELECT

I N S E RT D E L AYED I N S E RT DELAYED

MySQL
MySQL MySQL

DELETE LOW_PRIORITY 3.22.5


INSERT LOW+PRIORITY 3.22.5
INSERT DELAYED 3.22.15
LOAD DATA LOW_PRIORITY 3.23.0
LOCK TABLES ... LOW_PRIORITY 3.22.8
REPLACE LOW_PRIORITY 3.22.5
REPLACE DELAYED 3.22.15
SELECT ... HIGH_PRIORITY 3.22.9
UPDATE LOW_PRIORITY 3.22.5
SET SQL_LOW_PRIORITY_UPDATES 3.22.5

INSERT DELAYED
SELECT
INSERT DELAYED INSERT DELAYED

I N S E RT I N S E RT DELAYED
INSERT DELAYED
AUTO_INCREMENT

I N S E RT DELAYED
kill -9 TERM

4.6

MySQL
MySQL
MySQL MySQL
138 MySQL

4.6.1

11
delayed_queue_size
INSERT DELAYED INSERT
D E L AYED

key_buffer_size

MySQL

MySQL 3.23 --init-


file SQL
HEAP

4.6.2

RAM
RAM

I/O

10

Web Web
MySQL

UDF
MySQL

5 MySQL
MySQL
MySQL mysqldump mysqlimport
mysqladmin mysql
MySQL
mysql mysql
SQL

MySQL
MySQL

MySQL
MySQL

mysql
MySQL
mysql SQL
SQL

curses S-Lang Tcl/Tk X Web

SELECT

INSERT REPLACE UPDATE SQL


MySQL
MySQL

mysql
140 MySQL

Missing NULL

State

94384.24 $94,384.24

SQL SQL
SQL

mysql SQL mysql


--force

SQL mysql
LAST_INSERT_
ID() AUTO_INCREMENT

mysql
mysql
mysql -

MySQL
5 MySQL 141
Web

SQL mysql shell script


UNIX

MySQL

1 MySQL SQL samp_db


MySQL
Historical League

Web
MySQL Web
MySQL Web MySQL
Web Web
MySQL Web
Web

Web Web
MySQL MySQL
Web
MySQL
MySQL
MySQL Web
Web
Historical League
Web Web
League Web

MySQL Web Web


MySQL Web Web MySQL

MySQL

Web
MySQL Web MySQL
142 MySQL

Web MySQL
Web MySQL

Web MySQL MySQL


MySQL

Web
5.2 API

5.1 MySQL API

MySQL C
C MySQL API API

C MySQL C
C MySQL MySQL
C API MySQL
API Perl PHP Java Python C++ Tcl
MySQL MySQL Web
API
MySQL
MySQL API
C API MySQL
Perl DBI API DBI DBD
Perl
DBD MySQL
DBI MySQL
Web Web MySQL
PHP API PHP Web
PHP
MySQL PHP Personal Home Page
PHP PHP Web
PHP Hypertext Preprocessor GNU( GUN
UNIX)

MySQL
I
5 MySQL 143
API API
API
API API API
API

API A

5.1.1 C API

C API C MySQL

DBI PHP
DBI Perl Mysqlperl Mysql.pm
MySQL Mysqlperl MySQL DBI
MySQL Perl
DBI Mysqlperl
MySQL Perl Mysqlperl DBI
DBI DBI Mysqlperl
PHP 3 PHP/FI 2.0 FI form interpreter
Mysqlperl PHP/FI

MySQL C API
mSQL RDBMS , MySQL C API
mSQL C API MySQL SQL
mSQL mSQL MySQL
MySQL API mSQL API MySQL
mSQL API MySQL msql2mysql
MySQL mSQL
MySQL C API C MySQL
Java API MySQL C
A DBI PHP MySQL Perl DBI
MySQL PHP

5.1.2 Perl DBI API

DBI API Perl API


API

DBI Perl 5-1


DBI(
144 MySQL

DBD(

Perl

Perl

mSQL/MySQL Postgres
DBD

Other
RDBMS
servers

5-1 DBI

MySQL DBI Msql-Mysql-modules DBD


5-1 RDBMS
Msql-Mysql-Modules mSQL MySQL
mSQL MySQL C API MySQL C API mSQL C API mSQL
DBD mSQL C API MySQL
DBI DBI
DBI DBD
DBD DBI

DBI

MySQL

Postgres mSQL

DBI

DBI
5 MySQL 145
RDBMS SQL SQL
SQL
SQL MySQL SHOW TABLES

DBD
MySQL DBD
DBD
MySQL
7 MySQL DBD
MySQL

DBI

5.1.3 PHP API

Perl PHP Perl PHP


Web PHP API Web
Web
Web PHP PHP

Web PHP
IP

Historical League Web


League
146 MySQL

DBI DBD
DBI DBD DBI
DBD
PHP < php > HTML

HTML

PHP DBI
API C
PHP MySQL PHP MySQL C

5.2 API

API C DBI PHP API

C MySQL C

API

API
API
MySQL

5.2.1

cron job
cron
Web

API
C C
Web C Perl PHP
Web
5 MySQL 147
Perl C Web Perl
CGI.pm Perl MySQL Web
CGI.pm Web
DBI MySQL
PHP Web
PHP MySQL Web
PHP

C Perl Web
Perl PHP
Perl

5.2.2

Web

API
API API

Web Web

1.

C
Perl PHP C Perl PHP
C MySQL mysql

C
C

MySQL

2.
148 MySQL

Web
Apache Web Apache Web
Apache Apache Perl
PHP Apache
CGI Common Gateway
Interface CGI
Apache
Apache Perl PHP mod_perl mod_php3

Perl PHP

CGI

Apache
Web

Web

4 5
Apache
Apache
Apache Apache

Perl PHP mod_perl mod_php3

Perl PHP
Perl
mod_perl
Perl PHP

mod_perl PHP mod_perl Apache


mod_php3 PHP
Perl
Web
Perl Perl

Apache
Perl PHP PHP 4 PHP 4
5 MySQL 149
PHP 3 Zend Zend
Perl PHP

ID
Web ID

mod_perl
mod_perl Apache Perl
Apache Web mod_perl
http://perl.apache.org/guide/
Perl PHP Apache

Apache suEXEC
ID

5.2.3

MySQL API
Perl C
Perl DBI API C API

Perl /
ID/ C C

C
Perl PHP

( Perl PHP) C
PHP Perl
150 MySQL

Perl DBI PHP API C


API MySQL C Perl PHP MySQL
MySQL C Perl PHP MySQL
API

C malloc()
free() Perl PHP

Perl PHP C

Perl PHP

C
C API

API Perl PHP


C
Perl
PHP
C MySQL C API
C C++ Perl
Perl Apache
Perl Comprehensive Perl Archive
Network, CPAN Perl
MIME

PHP
PHP PHP Base Library PHPLIB
Web Web
5 MySQL 151
PHPLIB
PHPLIB

5.2.4

MySQL
MySQL

API
DBI API DBI
PHP DBI
PHP C API

C API MySQL

RDBMS RDBMS

DBI PHP
DBI PHP
DBI
MySQL mSQL Postgres
DBI DBI-
>connect() PHP

MySQL crash-me
DBI
6 MySQL C API
MySQL C MySQL

C API

MySQL
C

MySQL

1. 1
2. 2
3. 3
4. 4

SQL

5 mysql

F C API

MySQL C
MySQL
mysql mysqladmin mysqldump
C MySQL
6 MySQL C API 153
MySQL

MySQL

6.1

MySQL

6.1.1

C MySQL C
gcc
MySQL
MySQL
MySQL
MySQL
MySQL RPM
RPM MySQL
A

6.1.2

MySQL

/usr/local/include/mysql /usr/local/lib/mysql
MySQL
-I/usr/local/include/mysql

-L/usr/local/lib/mysql -lmysqlclient

floor() -lm

Solaris -lsocket -lnsl


154 MySQL

make
myclient main.c aux.c
myclient.h Makefile

LIBS -lm
LIBS = -L/usr/local/lib/mysql -lmysqlclient -lm
-lsocket -lnsl LIBS
Makefile make
gcc

6.2 1

MySQL
MySQL

1 client.c
6 MySQL C API 155

stdio.h mysql.h MySQL

main()
1) mysql_init() MYSQL
NULL mysql_init()
MYSQL
2) mysql_real_connect() mysql_real_connect()

NULL mysql_init()
NULL localhost
UNIX IP
TCP/IP
Windows TCP/IP UNIX
Windows NT NULL TCP/IP

NULL
NULL
0 NULL

F mysql_real_connect()
0
F mysql_real_connect()
mysql_close()
mysql_close() mysql_init()

% client1
156 MySQL

6.3 2

MySQL

1
Connect Quit

Access denied

MySQL
NULL NULL NULL
C NULL MySQL NULL
mysql_init() mysql_real_connect()
NULL
0 0 0 -1

MySQL API 0
0

MySQL
6 MySQL C API 157
API mysql_close()

API
mysql_error() mysql_errno()
API mysql_error()
mysql_errno()

2
1 client2.c

mysql_init() mysql_real_connect()
NULL mysql_init()
mysql_init()
158 MySQL

mysql_real_connect()

1 1
1 2
API
MySQL

7 Perl DBI API 8 PHP API


2 Access denied
#define

strings

6.4 3

3 do_connect()
do_disconnect()
main()

1) common.c
6 MySQL C API 159
2) common.h
3) common.h
4)
5)
do_connect() do_disconnect()
do_connect() mysql_init() mysql_real_connect()
mysql_real_connect() do_connect()
do_ connect()
NULL do_connect() NULL
do_ disconnect ()
mysql_close () common.c

common.h common.c

common.h common.c
common.h common.c
common.c common.h
160 MySQL

common.c
do_disconnect() do_disconnect()
mysql_close()

mysql_close()

1 MySQL3.22 mysql_real_connect()
MySQL do_connect()
do_connect() 3.22
do_connect()

do_connect() mysql_real_connect()
MySQL MySQL_VERSION_ID do_connect()
MySQL_VERSION_ID mysql_real_connect()
6 MySQL C API 161

do_connect()

db_name mysql_real_connect()

NULL do_connect() mysql_select_db()


db_name
do_connect() NULL
2 do_connect()
mysql_errno() mysql_error()

print_error (conn, mysql_real_connect() failed );


print_error() conn NULL
mysql_init() print_
error() fprintf() print_error()

stderr print_error()

print_error()
162 MySQL

Print_error() common common.

do_connect() print_error()

client3.c client2.c
6 MySQL C API 163

6.5 4

MySQL
6-1

6-1 MySQL

-h host_name --host=host_name
-u user_name --user=user_name
-p -pyour_password --password --password=your_password
-P port_num --port=port_num
-S socket_name --socket=socket_name

MySQL

/. my.cnf . m y.cnf
MySQL

E MySQL
164 MySQL

6.5.1

load_default() load_default()
a rgv[]
a rgv[]

a rgv[]
load_defaults()
show_argv load_defaults()

groups[]
client [client] NULL
my_init() load_defaults()
load_defaults() my

load_defaults() a rgv
&argv
show_argv load_defaults()
load_defaults()
[client] .my.cnf .my.cnf
6 MySQL C API 165

show_argv

~ /.my.cnf show_argv
.my.cnf
load_defaults() MySQL /etc/my.cnf my.cnf Windows
load_defaults() Windows C : my. c n f C : \ m y s q l \ d a t a \ m y.cnf
my.ini
load_defaults() client

[show_argv] ~/.my.cnf

show_argv
166 MySQL

group[] [client]

[client] [show_argv] host [show_argv]


host
load_defaults()
MYSQL_TCP_PORT MYSQL_UNIX_PORT getenv()
MySQL

MySQL
load_default()

6.5.2

getopt_long()
getopt_long() MySQL
getopt.h MySQL include

load_defaults()
ps load_defaults()
ps
a rgv[] load_defaults()
ps

ps 6.5.2

show_param load_defaults() getopt_long()


show_param
1)
2)
3) load_defaults()
4) getopt_long()
6 MySQL C API 167
show_param

do_connect() show_param

show_param.c
168 MySQL

show_argv() getopt_long()

getopt_long()

long_options
long_options[]

r e q u i r e d _ a rg u m e n t o p t i o n a l _ a rgument n o _ a rg u m e n t

getopt_long()
NULL getopt_long() optarg
long_options[]
6 MySQL C API 169
NULL getopt_long() switch

long_options[]
getopt_long()

long_options[] 0
getopt_long() int getopt_long()
long_options[] show_param
--password -p
--password --password = your_pass
-p -pyour_pass p long_options[]
o p t i o n a l _ a rgument MySQL

4
show_param ~ /.my.cnf show_argv

getopt_long() -h host_name
--user = paul --password = secret

client4.c
170 MySQL
6 MySQL C API 171

1 2 3 4

getopt_long()
MySQL

ps

get_tty_password()

MySQL getpass()
Windows get_tty_password()
172 MySQL

4
4 localhost UNIX
4 -p
some_host some_user

4 some_db do_connect()

MySQL

client4.c
do_connect()
do_disconnect()

1) client4.c
2) client4.c
3)

6.6

1)
2)
3) SELECT
INSERT

mysql_real_query()
mysql_real_query()

mysql_query()
6 MySQL C API 173
mysql_query()

mysql_query()
C strcpy()
sprintf()

6.8.2

mysql_query() mysql_real_query()

SELECT DELETE

I N S E RT DELETE
U P D AT E

SELECT SHOW
MySQL
MYSQL_RES

6.6.1

mysql_query() mysql_real_query()
mysql_affected_rows()
174 MySQL

mysql_affected_rows() unsigned long


my_ulonglong
FreeBSD Solaris unsigned long
%lu my_ulonglong
mysql_num_rows() mysql_insert_id()

mysql_rows_affected()
I N S E RT DELETE U P D AT E
MySQL MySQL
U P D ATE WHERE

UPDATE

CLIENT_FOUND_ROWS flags mysql_real_connect() CLIENT_FOUND_


ROWS flags do_connect() mysql_real_connect()

6.6.2

mysql_query() mysql_real_query()
MySQL SELECT SHOW
DESCRIBE EXPLAIN

mysql_store_result() mysql_use_result()
MYSQL_RES NULL mysql_store_result()
mysql_use_result()
mysql_store_result()
mysql_fetch_rows() MYSQL_ROW

mysql_fetch_rows() NULL
mysql_free_result()
6 MySQL C API 175

process_result_set()

mysql_fetch_row() MYSQL_ROW
row[i] i 0 1
MYSQL_ROW
MYSQL_ROW MYSQL_ROW row
MYSQL_ROW *row
MYSQL_ROW

MYSQL_ROW NULL NULL NOT NULL


NULL

mysql_num_fields() ,

process_result_set()
176 MySQL

process_result_set() NULL NULL


mysql_num_rows()
m y s q l _ a ffected_rows() mysql_num_rows() my_ulonglong
unsigned long %lu
mysql_store_result()
mysql_fetch_row() NULL mysql_use_result()
mysql_fetch_row() NULL
process_result_set()
process_result_set()

6.6.6

%s printf()
printf()
fwrite() putc()

6.6.3
6 MySQL C API 177
INSERT SHOW TABLES

MySQL C API

mysql_store_result()
mysql_store_result()
mysql_field_count()

mysql_field_count()

MySQL 3.22.24
mysql_field_count() mysql_num_fields() MySQL
mysql_field_count()

mysql_field_count() MySQL 3.22.24


mysql_num_fields()
mysql_field_count() 0
INSERT DELETE UPDATE
mysql_store_result() mysql_fetch_row()
NULL
178 MySQL

6.6.4

process_query()
mysql_query()
mysql_store_query()
mysql_field_count()

mysql_real_query()
mysql_query()
mysql_use_result() mysql_store_result()
mysql_error() mysql_field_count()

process_query() process_real_query()
process_query()
6 MySQL C API 179

6.6.5 mysql_store_result() mysql_use_result()

mysql_store_result() mysql_use_result()

mysql_store_result() mysql_use_result()
mysql_store_result() mysql_fetch_row()

mysql_store_result()
mysql_fetch_row()
mysql_fetch_row() NULL
mysql_use_result()
180 MySQL

mysql_fetch_row() mysql_fetch_row()
NULL
mysql_errno() mysql_error()
mysql_use_result() mysql_store_result()

mysql_use_result()
mysql_use_result()
mysql_use_result()

mysql_use_result()

mysql_store_result()
mysql_data_seek() mysql_rowseek()
mysql_row_tell() mysql_use_result()
mysql_fetch_row()
mysql_store_result()
mysql_store_result()
mysql_store_result() mysql_use_result()
mysql_num_rows()
MYSQL_FIELD max_width mysql_use_result()
mysql_num_rows() max_width

mysql_use_result() mysql_store_result() mysql_use_result()


mysql_store_result()
mysql_fetch_row()
mysql_store_result()
mysql_store_result()
mysql_fetch_row()
my_tbl

mysql_store_result() mysql_num_rows()
mysql_fetch_row() mysql_free_result()
mysql
6 MySQL C API 181
mysqldump mysql_store_result()
--quick mysql_use_result()

6.6.6

mysql_num_rows() mysql_num_fields()
mysql_fetch_lengths()

MYSQL_FIELD mysql_fetch_fields() F
MYSQL_FIELD

mysql_store_result() mysql_use_result()

6.6.1
process_result_set()

process_result_set()

process_result_set()
182 MySQL

1)
2)
3)
NULL NULL
4)

mysql mysql
process_result_set()

MYSQL_FIELD mysql_fetch_seek()
mysql_fetch_field()

field->name
field->max_length
NULL NULL field->flag
NULL
max_length max_length
MYSQL_FIELD
MySQL
max_length max_length
unsigned int
mysql_use_result()
max_length max_length
mysql_store_result() (MYSQL_FIELD length
mysql_store_result() mysql_use_result()
)
6 MySQL C API 183
field name

NULL
row[i] field

field->type INT F L O AT DECIMAL


IS_NUM

print_dashes() :
184 MySQL

MySQL

mysql_field_seek() mysql_fetch_field() MYSQL_FIELD


F mysql_fetch_field() mysql_fetch_field_direct()

6.7 5

process_query
process_result_set()
5 mysql 5

\g
quit Control-D
5 10
client4.c
6 MySQL C API 185
5 client4.c client5.c
process_query() process_result_set() print_dashes() client5.c main()

client5.c client5.o, client5.c common.o 5


MySQL

6.8

client1 client5

MySQL

6.8.1

summary_stats(),
NULL
summary_stats()

summary_stats()
186 MySQL

mysql_fetch_row() mysql_data_seek()
summary_stats() summary_stats()
mysql_store_result()
mysql_use_result()
summary_stats()
t-
6 MySQL C API 187
6.8.2

SELECT name

name 0 Malley,Brian

name
ANSI SQL SQL

mysql_escape_string()
mysql_escape_string()
Control-Z Windows
mysql_escape_string()

mysql_escape_string()

mysql_escape_string() 2
\0 , 0 ASCII 0
\\ \ \
mysql_escape_string()

mysql_escape_string() from_str to_str


strcpy() strlen()
from_str char
to_str char
NULL mysql_escape_string()
to_str (from_len*2)+1 from_str
2
from_len to_len unsigned int from_len from_str
from_str
mysql_escape_string() to_len

mysql_escape_string() to_str
188 MySQL

from_str \0
SELECT

6.8.3

mysql_escape_string()

BLOB

images load_image()

load_image() 100K
6 MySQL C API 189

MYSQL_ROW mysql_fetch_
length()

6.8.4

MySQL

SELECT
mysql DESCRIBE
images

SHOW FIELDS FROM tbl_name LIKE col_name

6.8.5

MySQL C API
MySQL
1. 1
NULL mysql_init()
MYSQL
MYSQL mysql_init()

mysql_init()

mysql_init() conn
main()
mysql_init() conn
190 MySQL

conn

conn 0 NULL
mysql_init() NULL conn
NULL MySQL C API
conn MYSQL

NULL mysql_init()
MYSQL conn

mysql_init() NULL
2. 2

mysql_store_result() res_set NULL while

3. 3 NULL
mysql_fetch_row() MYSQL_ROW NULL
row[i] NULL
6 MySQL C API 191
printf() NULL (null)
printf()

NULL IS_NOT_NULL()

4. 4

to_str
mysql_escape_string to_str
7 Perl DBI API
Perl DBI MySQL DBI
DBI C PHP API 5
samp_db
Perl
Perl
Programming Perl Wa l l
Christiansen Schwartz Potter O’ Reilly 1996 1999
Perl 5
DBI 1.13 1.xx

MySQL DBI 5.004_05 Perl Msql-Mysql


Data-Dumper Perl MySQL C Web
DBI CGI.pm Apache Web
A

Perl DBI
G DBI

DBD MySQL MySQL C


6

7.1 Perl

Perl Perl
UNIX #

Perl /usr/local/bin/perl5 /opt/bin/perl


#! Perl
# #! / 4

UNIX Perl
7 Perl DBI API 193
Windows ActiveState Perl

7.2 Perl DBI

DBI
DBI 7.3 DBI

7.2.1 DBI

Perl DBI API 6 C C


MySQL
DBI API

DBI 7-1 DBI


7-2
DBI

7-1 Perl DBI

$dbh
$sth
$fh
$h

7-2 Perl DBI

$rc
$rv
$rows
@ary

7.2.2 DBI

dump_members DBI
MySQL
DBI

dump_members
194 MySQL

DBI
MySQL
7.2.8

Perl

use

use DBI Perl DBI


DBI DBD
DBI
use strict Perl use strict
7 Perl DBI API 195
$my_var $mv_var

$mv_var
n Perl $mv_var
undef

connect( ) DBI->connect( ) DBI

connect( ) DBI connect( )


DSN DBD
MySQL

localhost
7.2.8 DBI mysql

DBI
RaiseError DBI
dump_members
DBI 7.2.3

connect( ) $dbh connect( )


undef RaiseError connect( )
DBI
dump_members SELECT

SELECT

prepare( ) SQL
196 MySQL

execute( ) prepare( ) $sth


undef
mysql
; SQL DBI
\g DBI

execute( ) dump_members

fetchrow_array( )
SELECT
NULL undef Perl NULL
\t \n Perl

\t \n
finish( ) DBI

finish( ) finish( )
finish( )

dump_members DBI
DBI
prepare( ) SELECT
7.3 DBI
League DBI
Perl SELECT

7.2.3

dump_members connect( ) RaiseError


7 Perl DBI API 197
DBI
DBI connect( )
RaiseError PrintError
RaiseError DBI DBI die( )

PrintError DBI DBI warn( )

RaiseError PrintError connect( )


DBI connect( )

connect( ) undef exit( ) DBI

connect( )

RaiseError PrintError

$DBI::err $DBI::errstr die( )


MySQL C API mysql_errno( )
mysql_error( )
DBI RaiseError

dump_members
RaiseError
$SIG{_DIE_}
RaiseError DBI

$SIG{_DIE_} RaiseError
DBI _DIE_
DBI
198 MySQL

connect( )

dump_members2
dump_member2 dump_members PrintError
RaiseError DBI
bail_out( ) $DBI::err $DBI::errstr
7 Perl DBI API 199

bail_out( ) bail_out( ) 6
C print_error( ) bail_out( )
$DBI::err $DBI::errstr

dump_member2 dump_members
fetchrow_array( ) dump_members2

7.2.4

DELETE I N S E RT REPLACE U P D ATE SELECT


DESCRIB EXPLAIN SHOW
SELECT do( ) do( )
Marcis Brown 2002 6 3

do( ) undef
undef
do( ) 0
0E0 0 Perl 0E0 0
undef do( ) 0 undef
200 MySQL

0E0 0 $rows undef

printf( ) %d $row

do( ) execute( ) prepare( ) INSERT do( )

7.2.5

SELECT (
SELECT , DESCRIBE EXPLAIN SHOW)

1.
dump_members DBI prepare( )
execute( ) fetchrow_array( ) finish( )

prepare( ) execute( ) finish( )


fetchrow_array( ) 7-3

7-3 DBI

fetchrow_array( )
fetchrow_arrayref( )
fetch( ) fetchrow_arrayref( )
fetchrow_hashref( )
7 Perl DBI API 201

fetchrow_array( )

fetchrow_array( )
$ary[0]
$ary[1]
fetchrow_array( )

DBI
SELECT

fetchrow_arrayref( ) fetchrow_array( )
undef

$ary_ref $ary_ref->[$i]
$ary[$i] @{$ary_ref}
fetchow_arrayef( )

fetchrow_arrayref( )
202 MySQL

fetchrow_arrayref( ) undef @{undef} C


NULL
fetchrow_hashref( )

fetchrow_hashref( )
undef Perl
$hashref

SELECT

SELECT
fetchrow_hashref( ) fetchrow_hashref( )

fetchrow_hashref( )
fetchrow_hashref( )
fetchrow_array( ) fetchrow_arrayref( )
SELECT MySQL

Perl
NAME_lc NAME_uc
fetchrow_hashref( )

fetchrow_hashref( )

2.
7 Perl DBI API 203
SELECT SELECT
SELECT
MySQL execute( ) rows( )
MySQL mysql_use_result
rows( ) G

3.

count_members

SELECT fetchrow_array( )

fetchrow_array( )
undef
LIMIT 1

MAX( ) MIN( )
selectrow_array( )
prepare( ) execute( )
selectrow_array( )
204 MySQL

4.
DBI

president

president

fetchrow_array( )

dump_members
7 Perl DBI API 205

$rows 0 $cols 0
@{$matrix[$i]} $i

fetchrow_arrayref( )

fetchrow_arrayref( )

fetchrow_array( ) fetchrow_arrayref( )
DBI
fetchall_arrayref( )
fetchall_arrayref( ) prepare( )
execute( )

fetchall_arrayref( )
undef RaiseError
$i
@{$matrix_ref->[$i]}
fetchall_arrayref( )
fetchall_arrayref( )
selectall_arrayref( ) prepare( ) execute( )
finish( ) selectall_arrayref( )
206 MySQL

5. NULL
NULL 0
DBI NULL undef
false!

false!

NULL NULL defined( ) NULL

$col_val
0

7.2.6

Perl
SQL Perl
7 Perl DBI API 207

Perl MySQL

Perl

$var 14

MySQL

qq{} Perl qq{ }


q

qq{}
qq{}
INSERT

{ } qq qq( ) qq//
qq{} { ) /
)
INSERT qq( )
qq{} Perl

dump_members SELECT

qq{}
208 MySQL

qq{}

qq{} Perl
Perl SQL member

do( ) MySQL

SQL 6
mysql_escape_string( ) DBI
quote( )

do( ) MySQL

$last $first quote( )


7 Perl DBI API 209
7.2.7

DBI

student

I N S E RT
do( ) prepare( ) execute( ) prepare( )
INSERT execute( )
prepare( ) DBI

INSERT ? execute( )
do( )
prepare( ) execute( )

quote( )

execute( )
210 MySQL

NULL undef
quote( )

SELECT

MySQL
DBI

DBI

member DBI Perl

bind_col( )
1 bind_col( ) execute( )
bind_col( ) bind_columns( )

7.2.8

connect( )

DBI
7 Perl DBI API 211
DBI_DSN
DBI_USER DBI_PASS
Windows user
localhost
undef UNIX Windows
ODBC
undef

mysql_read_default_file

/u/paul/.my.cnf

connect( ) p i t - v i p e r-snake-net MySQL


secret paul

$ENV{HOME}

mysql_read_default_group
.my.cnf [client]
DBI [dbi]

mysql_read_default_file mysql_read_default_group MySQL 3.22.10


DBD::mysql 1.21.06
G MySQL E
connect( )
connect( )
--host --user --password

MySQL DBI
212 MySQL

DBI
- / . m y.cnf MySQL
. m y.cnf
E

Web 7.4 Web DBI


7 Perl DBI API 213
7.2.9

DBI

DBI
DBI

1.
MySQL mysql
DBI DBI

mysql

DBI

VALUES( )

do( )
214 MySQL

do(
)
2.
DBI
0 9 1 2 2
quote( )

trace( ) DBI_TRACE
DBI
trace( )
STDERR

DBI->trace( ) DBI

SELECT

trace( ) DBI

DBI DBI_TRACE

value n n STDERR
2 n=file_name n
csh
1 STDERR
1 trace.out
2 trace.out

.cshrc .lonin .profile


DBI_TRACE UNIX csh
7 Perl DBI API 215

sh ksh bash

Windows

7.2.10

DBI

DBI NUM_OF_FIELDS
MySQL DBD::mysql DBI MySQL
mysql_max_length
MySQL

prepare( ) execute( )
SELECT finish( )
MySQL mysql_max_length
DBI NAME
box_out mysql SELECT
box_out SELECT
216 MySQL

execute( ) $sth->{NAME} $sth-


>{mysql_max_length}

6 5

print_dashes( ) print_row( ) 5

box_out

show_member
7 Perl DBI API 217

show_members
23 C

show_member NAME
NUM_OF_FIELDS
218 MySQL

show_member
SELECT * NAME member

SELECT * FROM tbl_name WHERE 1 = 0


prepare( ) execute( ) @{$sth->{NAME}}
MySQL

DBI DBD::mysql G
MySQL

7.3 DBI

DBI
1 DBI

League

7.4
Web DBI Web
8 PHP API

7.3.1
7 Perl DBI API 219
RTF Rich Text Format
Microsoft Word
WordPerfect A p p l e Work
RTF RT F
RTF
RTF

gen_dir

1)
RTF
2)
3) RTF

banquet rtf

1)
2)
3) gen_dir

%switchbox
220 MySQL

$func_hashref

fetchrow_hashref( )
$sth->{NAME}

$entry_ref->{col_name}

1.
7 Perl DBI API 221

format_banquet_entry( )
Jr. Sr.
II III

I V X 1 39

format_banquet_entry( ) RTF
format_rtf_entry( )

format_name( ) format_banquet_entry( )

2.
RTF
RTF
RTF
222 MySQL

{ } RTF
\rtfn n RTF
0

\fonttbl
0 Times

\plain \f0 0
Times \fs24 12 \fs

Email: Address:

RTF

Name: \b \b0
\par

RTF
7 Perl DBI API 223

format_rtf_entry( )

gen_dir

Windows gen_dir Windows


UNIX
Macintosh
mutt -a

FTP

RTF RTF DBI


MySQL Perl
MySQL MySQL
Perl

7.3.2
224 MySQL

cutoff
0

1 need_renewal
2
2 renewal_notify

need_renewal

need_renewal
7 Perl DBI API 225
renewal_notify
renewal_notify ID
ID @
ID

need_renewal renewal_notify
member
renewal_notify

renewal_notify sendmail
Windows Windows sendmail
sendmail
sendmail

interpret_argument( ) ID

read_file( )
need_renewal renewal_notify

interpret_argument( ) ID
226 MySQL

ID notify_member(
)

ID
ID
ID

notify_member( )
notify_member( )
ID
show_member
7 Perl DBI API 227

member

% need_renewal > junk


% junk
% renewal_notify junk
ID

7.3.3

Web
edit_member
edit_member
228 MySQL

ID edit_member
Enter
ID show_member last_name

SQL edit_member member_id

edit_member member

member I N S E RT
7 Perl DBI API 229

new_member( )

col_prompt( ) $show_current
$show_current 0
230 MySQL

Enter

edit_member( ) UPDATE INSERT

edit_member member
expiration

col_prompt( )
expiration
7 Perl DBI API 231

1999-14-22

UPDATE
WHERE AND
col_name = col_val UPDATE

7.3.4

Find

MySQL

mysql
DBI interests

member interests

% interests
232 MySQL

format_entry( ) gen_dir format_rtf_entry( )


format_entry( ) RTF

7.3.5

7.4 MySQL We b
Web
HTML Web
HTML DBI HTML HTML

HTML

gen_dir
HTML

HTML 1
</BODY> </HTML>
7 Perl DBI API 233
format_rtf_entry( ) HTML
RTF

HTML gen_dir

HTML Web
234 MySQL

cron crontab
4 gen_dir

cron samp_db
Web

7.4 Web DBI

DBI DBI
Web Web DBI

Web

Web
samp_db
Web

member interests
Web

CGI.pm Perl DBI Web


CGI.pm A CGI.pm
Web
CGI.pm Web
CGI.pm HTML HTML
HTML
CGI.pm Web
Lincoln Stein (John
Wiley 1998 ) Official Guide to Programming with CGI.pm
7 Perl DBI API 235
http://stein.cshl.org/www/software/CGI/

7.4.1 CGI Apache

DBI CGI.pm Web Web


Apache

Apache /usr/local/apache
htdocs HTML cgi-bin Web
conf

cgi-bin Apache

Apache CGI cgi-bin


Apache
Apache www

www root cgi-bin

Web URL
URL
http://your.host.name/cgi-bin/script_name
Web Web We b

mod_perl CGI
1) Perl 5.004 CGI.pm 2.36 mod_perl 1.07
2) mod_perl Apache
3) /usr/local/apache/cgi-perl cgi-bin
Apache cgi-perl
4) Apache cgi-perl mod_perl

Apache
httpd.conf Apache Alias
srm.conf Location access.conf cgi-perl mod_perl
PerlSendHeader PerlSetupEnv CGI.pm
236 MySQL

mod_perl URL CGI URL cgi-


perl cgi-bin

Apache Web mod_perl

7.4.2 CGI.pm

CGI.pm Perl use


CGI.pm CGI

CGI CGI.pm $cgi


1 h1( )

CGI.pm $cgi->
$cgi-> DBI
CGI.pm
1.
CGI.pm We b
param( )

CGI.pm HTML

$cgi
7 Perl DBI API 237

CGI.pm HTML
HTML
CGI.pm
CGI.pm HTML < >
CGI.pm HTML
CGI.pm
2. HTML URL
CGI.pm start_html( ) h1( )
& CGI.pm
&amp;

CGI.pm
escapeHTML( )
URL escape( )

Perl

HTML
URL

3.
Web HTML HTML
CGI

1)
2)

Web
238 MySQL

Web
param( ) CGI

We b
URL samp_db

URL
my_script

Click Me! my_script Web

URL Web
param ( )
URL ? /
&

URL CGI script_name ( )


URL

URL CGI.pm a( ) <A>

CGI
flip_flop A
page B B page
B
A B
7 Perl DBI API 239

flip_flop

$url URL
escape( )
URL

7.4.3 Web MySQL

DBI MySQL
CGI

use CGI

.my.cnf Web Web

/usr/local/apache/conf/samp_db.cnf
240 MySQL

Web Web
Web
Web www nobody 400
600 Web

Web Web

samp_db SELECT MySQL


samp_db.cnf

11 MySQL MySQL
Apache suEXEC

MySQL

Web

Apache WWW FAQ

http://www.w3.org./Security/Faq/

7.4.4 samp_db

Web samp_db
samp_db Web
samp_db
samp_db MySQL samp_db

Web
samp_browse
samp_browse Web
Web
Web

samp_db
samp_db
LIMIT
7 Perl DBI API 241
samp_browse CGI Web
tbl_name

CGI.pm Web
param( ) samp_browse
tbl_name
tbl_name sort_column
end_html( ) HTML
display_table_list( ) display_table_list( )
HTML
242 MySQL

display_table_list( )

samp_browse tbl_name
display_table( )
ORDER BY 1
7 Perl DBI API 243
sort_column
event

display_table_list( ) display_table( ) display_cell( ) HTML


&nbsp;

display_cell( )
display_cell( ) URL

samp_browse

7.4.5

score_browse samp_browse

score_browse event_id
score_browse event
244 MySQL

display_events( ) event
event_id
URL score_browse

display_events( )

ID score_browse
7 Perl DBI API 245
score_browse event_id display_scores( )
Show Event List
URL score_browse event_id
display_scores( )

display_scores( ) 1 1.4.8

ID score_browse ID
ID
246 MySQL

ID ID

7.4.6

samp_browse score_browse

7.3 DBI

Web
interests member
%
interests

samp_browse score_browse interest


URL POST
CGI.pm param( )
format_html_entry( )
gen_dir
7 Perl DBI API 247
8 PHP API
PHP Web
Web
PHP MySQL We b C PHP Perl DBI
API 5 MySQL
samp_db
1 MySQL SQL PHP 4 ß
PHP 3 PHP3
PHP 4 PHP 3 PHP4
PHP 3 PHP 4 PHP 4
PHP Apache Server MySQL C
PHP PHP MySQL
A

UNIX PHP Apache Apache


CGI Windows
Windows NT Apache PHP 4 PHP

PHP
MySQL H PHP API PHP
PHP MySQL MySQL PHP
DBI PHP Web h t t p : / / w w w. p h p . n e t /
Web PHP 3 PHP 4

8.1 PHP

PHP Web PHP


PHP
.php .php3 .phtml Apache
A Apache

8.2 PHP

PHP Web
HTML PHP
8 PHP API 249
PHP HTML
PHP HTML PHP
PHP
HTML HTML
PHP
PHP

PHP

PHP
HTML PHP
PHP
PHP <?php
?> PHP <?php
HTML PHP PHP ?>

PHP

hello, world
Web Web
HTML
PHP Web
HTML PHP
PHP HTML

PHP PHP
HTML PHP PHP
HTML PHP
250 MySQL

PHP
PHP
PHP PHP
PHP

ASP Active Server Page

<SCRIPT> HTML
PHP

ASP H

PHP
Perl PHP

hello.php chmod +x

Web
Web
PHP
MySQL Web 5
Web
8 PHP API 251

HTML
samp_db
member
MySQL
samp_db
member

Web PHP Web

mysql_pconnect()

mysql_pconnect()
FA L S E exit()

mysql_pconnect() @
PHP mysql_pconnect()
Web

@
mysql_pconnect()

PHP @ mysql_pconnect()

Web
Web PHP
8.2.1 include

mysql_pconnect() PHP API MySQL

mysql_select_db()
252 MySQL

mysql_pconnect() mysql_connect()
mysql_pconnect() mysql_connect()
FALSE
mysql_pconnect() mysql_connect()
PHP
Apache mysql_pconnect()

MySQL PHP
MySQL
C DBI API MySQL

$link mysql_pconnect()

$link

mysql_select_db

mysql_query() \g
mysql_query() FALSE

mysql_fetch_row()
$row $row[0]

mysql_free_result()
PHP
mysql_free_result()
Apache
ushl ushl/index.php
8 PHP API 253
gp Web pit-
viper.snake.net URL

index.php

8.2.1 include

PHP DBI PHP Web


DBI cgi-bin

MySQL PHP DBI

PHP
PHP
$link $result $row

$
$x
$x $x
$x[0] $x[1] $x yellow
large $x[ yellow ] $x[ large ]
PHP $x[1]
$x[ l a rg e ] $x $x-
>property_name $x->yellow $x->large $x
$x->1 PHP
MySQL
PHP include
samp_db_connect() include

samp_db_
connect() PHP

include Apache
Web
include Web

Web include
254 MySQL

7.4.3 Web MySQL DBI


PHP include

PHP
C C
PHP C
C PHP
PHP C
PHP C Java Perl

Perl . .=

include

samp_db pit-viper boa


samp_db_connect() include mysql_pconnect()
include PHP
include

1) PHP include Web


/usr/local/apache/php PHP include
/usr/local/apache/htdocs
2) PHP include
PHP PHP include C
PHP include C
C PHP PHP
/usr/local/lib/php3.ini include_path

include_path

3) include include
samp_db.inc
MySQL samp_db
samp_db_connect() samp_db
FALSE
8 PHP API 255

samp_db.inc <?php ?> PHP


HTML PHP
PHP HTML
PHP
4)

PHP

include samp_db.inc include


samp_db_connect() MySQL

include( ) require( )
PHP require() include() include()
include() require()
require()
require()
include()
include()
256 MySQL

samp_db.inc

HTML
html_begin() html_end() html_begin()

HTML

Copyright USHL
html_end()
8 PHP API 257
8.2.2

member 7
dump_members DBI PHP dump_members.php DBI
Web
HTML
HTML

die() die() exit()

dump_membes.php

ushl http://pit-viper.snake.net/ushl/dump_members.php
258 MySQL

8.2.3

MySQL PHP
mysql_query()
mysql_query()

SELECT DELETE I N S E RT REPLACE


UPDATE mysql_query() TRUE FALSE
m y s q l _ a ffected_rows()

SELECT mysql_query() FALSE

mysql_query() FA L S E

MySQL
mysql_query() FA L S E
mysql_error() mysql_errno()
8.2.4
mysql_query()
8 PHP API 259
1.
DELETE

ID 149 MySQL mysql_query() TRUE


mysql_query() TRUE
mysql_query() TRUE

mysql_affected_rows()
2.
SELECT

mysql_query()
PHP PHP

mysql_query() FALSE
mysql_query()
mysql_query()
FA L S E
mysql_query()

mysql_num_rows()
mysql_num_fields()
mysql_fetch_
260 MySQL

row()
mysql_free_result() PHP

mysql_query() SELECT 8-1 PHP

FALSE

8-1 PHP

mysql_fetch_row()
mysql_fetch_array()
mysql_fetch_object()

mysql_fetch_row()
0 mysql_num_fields() 1
mysql_fetch_row()

$row $row[$i] $i PHP


count() mysql_num_fields() count()
PHP NULL count()

mysql_fetch_array() 8-1 mysql_fetch_row()

mysql_fetch_array() mysql_fetch_row()
mysql_fetch_array()
mysql_fetch_object()
8 PHP API 261
$row->col_name President last_name
first_name $row->last_name $row->first_name

NULL
isset() SELECT NULL
$row $row[$i] NULL isset($row[$i]) FALSE
$row[$i] NULL isset($row[$i]) TRUE empty()
NULL empty() NULL

mysql_fetch_object()

full_name mysql_fetch_object() $row->full_name

8.2.4

PHP
@ @
mysql_pconnect()

error_reporting()

1
2
4
8

error_reporting()
1 2 MySQL

4
8
16 32 PHP

mysql_error() mysql_errno() MySQL


C API mysql_error()
262 MySQL

mysql_errno()
0 MySQL
MySQL
mysql_query()

mysql_error() mysql_errno() PHP C API


C PHP
mysql_error() mysql_errno()

H PHP API

mysql_error()

8.2.5

PHP C Perl

O Malley MySQL
C mysql_escape_string() Perl DBI
quote( ) PHP addslashes( )
addslashes O’ Malley O’ Malley

DBI quote( ) addslashes( )

Web HTML
URL HTML URL
PHP htmlspecialchars( ) urlencode( ) CGI.pm
escapeHTML( ) escape( )
8 PHP API 263
8.3 PHP

Web

Web

8.3.1

Web URL
h t t p : / / p i t - v i p e r. s n a k e . n e t / g p / index.php
7 score_browser

s c o r e _ e n t r y. p h p

1)

2)

3) ID

score

PHP
PHP URL
URL action
264 MySQL

score_entry.php action $action


name address
Web $name $address
PHP
x[0] x[1] PHP
$x $x[0] $x[1]
action score_entry.php
$action
8 PHP API 265

$action switch()
PHP define() PHP switch() C
score_entry.php
display_events() MySQL
event ID
ID

$PHP_SELF URL
global :
266 MySQL

PHP global
$PHP_SELF
global URL
display_cell() 7 DBI PHP

display_events() New Event


SOLICIT_ EVENT solicit_event_info()

solocit_event_info()
Submit ADD_EVENT s c o r e _ e n t r y. p h p
add_new_event() event

add_new_event() global date


type $date $type
event
8 PHP API 267
display_scores()
268 MySQL

display_scores()

LEFT JOIN score


display_scores() MySQL
3.8.2

s c o r e [n] n student_id
Web PHP $score

ENTER_SCORES score_entry.php
enter_scores()

ID PHP each $score


8 PHP API 269
trim()

is_long() is_int()
FA L S E
TRUE

score REPLACE INSERT


REPLACE

score_entry.php Web
Web

PHPLIB

8.3.2

Web
president
pres_quiz.php

president

MySQL 3.23 ORDER BY RAND()


president

name
270 MySQL

Submit
Web

name place choice implode()

explode()
8 PHP API 271

response Web
$name $place $choice name place choice

check_response()
place response
$place $response

pres_quiz.php

8.3.3

edit_member.php

MySQL
272 MySQL

edit_script.php ID
ID
member

edit_member.php

ID
8 PHP API 273

member_pass MD5
mysql

7 samp_browse
samp_db member_pass
ID edit_member.php
274 MySQL

display_entry() ID
member_pass 0
e d i t _ m e m b e r.php check_pass()
member_pass

ID

member display_column()
8 PHP API 275

display_entry() member_id password


edit_script.php ID
276 MySQL

NULL
expiration NULL
0000-00-00
NULL NOT NULL
mysql_fetch_field()
member nullable()

mysql_fetch_field()
SELECT
member nullability
MySQL

9 MySQL
MySQL MySQL
MySQL
MySQL

MySQL

MySQL
MySQL
MySQL

MySQL

MySQL
MySQL

9.1

MySQL

MySQL
MySQL mysql safe_mysqld

MySQL MySQL

mysql SQL
mysqladmin
mysqladmin
isamchk myisamchk
278 MySQL

mysqldump
SQL mysqladmin

mysql
SQL MySQL GRANT
mysql
SQL SQL SQL
SQL
SQL SQL mysql
1 MySQL SQL
MySQL

9.2

mysqld MySQL

MySQL UNIX Windows


MySQL

UNIX dump

mysqldump
9 MySQL 279

ISP
MySQL
MySQL MySQL

9.3

MySQL MySQL

UNIX
MySQL

MySQL UNIX

MySQL

9.4

MySQL

isamchk myisamchk

MySQL 10
MySQL
MySQL
10 MySQL

MySQL
MySQL mysql MySQL
MySQL

MySQL

10.1

MySQL
/usr/local/var MySQL /usr/local/mysql/
data RPM /var/lib/mysql
--datadir = / path / to / dir

MySQL

mysqladmin UNIX
10 MySQL 281
/usr/local/var
Windows

TCP/IP
--port --socket

mysqladmin
--host = host_name

Windows Windows NT --pipe


--socket = pipe_name

ps mysql
ps --datadir

ps
ps --datadir mysqld

MySQL
Makefile Makefile
localstatedir datadir NFS
MySQL

find .frm
MySQL

MySQL DATADIR

10.2

MySQL
UNIX Windows
282 MySQL

10.2.1 MySQL

MySQL mysqld

10-1

1 2 3

UNIX TCP/IP ( )
UNIX UNIX, NT NT

MySQL

1 2 n

1 2 3 1 2 3 1 2 3

10-1 MySQL

SQL
10 MySQL 283
isamchk myisamchk isamchk myisamchk

13

10.2.2

MySQL
my_db DATADIR/my_db
C R E ATE DATA B A S E
db_name MySQL UNIX
db_name

% mkdir DATADIR/db_name
% chmod 700 DATADIR/db_name MySQL

DROP DATABASE DROP DATABASE d b _ n a m e


db_name
%rm -rf DATADIR/db_name

SHOW DATABASE
MySQL

10.2.3

10-
1 ISAM MyISAM
10-1 MySQL

.frm
.ISD(ISAM)
.MYD(MyISAM)
ISD(ISAM)
.MYI(MyISAM)
284 MySQL

C R E ATE TA B L E tbl_name tbl_name.frm

C R E ATE TABLE
MySQL
ALTER TABLE tbl_name.frm
CREATE DROP INDEX
ALTER TABLE DROP TABLE

my_db DROP TABLE my_tbl

SHOW TABLES my_db my_db .frm


MySQL

10.2.4

MySQL
_ $

64

MySQL
$
UNIX Windows
$my_db

MySQL 64
UNIX 14
System V-ish 14
10

UNIX my_tbl MY_TBL


Windows my_tbl MY_TBL
10 MySQL 285
UNIX Windows

10.2.5

per-process 11 MySQL

directory-
lookup routine

10 000 30 000
Linux ext2 Solaris

MySQL

MySQL MySQL

MySQL
286 MySQL

IBM AIX4.1 2GB


AIX4.2 64GB MySQL
3.23 4GB 3.23
9 000 000 10-2 MySQL AIX

10-2 MySQL

MySQL AIX

MySQL 3.22.22 AIX4.1 2GB AIX 2GB


MySQL 3.22.22 AIX4.2 4GB MySQL 4GB
MySQL 3.23.0 AIX4.1 2GB AIX 2GB
MySQL 3.23.0 AIX4.2 64GB AIX 64GB

10.2.6 MySQL

MySQL 10-3
HOSTNAME
10-3 MySQL

ID HOSTNAME.pid ID
HOSTNAME.err
HOSTNAME.log /
HOSTNAME.nnn

ID PID PID PID

mysql.server MySQL PID

safe_mysqld
stderr safe_mysqld

safe_mysqld
--log --log-update

SQL mysql

test
10 MySQL 287

ID

--log - long - format

root

12

UNIX

SHOW
D ATABASE
stat()
ls -l
288 MySQL

- d

11

10.3

10.2

MySQL

PID /var/run
MySQL PID

10.3.1

[mysqld]
symlink
symbolic link
10-4
/etc/my.cnf Windows
c:\my.cnf Windows c:\windows c:\NT
my.cnf

/etc/my.cnf
10 MySQL 289
10-4

symlink PID
symlink
symlink

10.3.2

du df ls -l

/usr/local/var /var/mysql df /var

/usr du -s

130MB /usr /usr


df

/usr/local/var df var
ls -l

/usr/local/var /var/mysql symlink


/var /var symlink
/var /usr

10.3.3
10-5

symlink
--datadir=/path/to/dir
10-5 [mysqld]
datadir=/path/to/dir
290 MySQL

10.3.4

symlink
symlink
bigdb

FLUSH TABLE

bigdb.orig

10.3.5

symlink A LTER TABLE


OPTIMIZE TABLE

symlink

symlink

10.3.6

PID safe_mysqld
safe_mysqld

10-6
10 MySQL 291
DROP DATABASE MySQL

symlink
MySQL symlink MySQL 3.23
10-6

-- pid - file = pidfile


--
-- log = logfile
pid - file = /var/run/mysqld.pid PID -- log - update = updatefile
/var/run/mysqld.pid -- pid - file [mysqld]
pid - file = pidfile
= mysqld.pid PID D ATA D I R/
log = logfile
mysqld.pid log - update = updatefile

MySQL .nnn .nnn


update.001 update.002
11 MySQL
MySQL MySQL

MySQL
MySQL 12 13

MySQL
mysqladmin
safe_mysqld mysql.server MySQL mysqld
mysqldump
myisamchk isamchk
E MySQL

11.1 MySQL

A MySQL
MySQL root MySQL

mysql UNIX mysql_install_db Windows


mysql Setup

MySQL mysql
root root
MySQL UNIX
root
test
test_

localhost
pit - viper.snake.net
test

root MySQL
MySQL root
11 MySQL 293

MySQL 3.22 mysqladmin


your password

MySQL mysql mysql

MySQL mysql U P D ATE


Windows

root
MySQL 3.22 mysqladmin flush.privileges FLUSH
PRIVILEGES SQL

root root

11.2 MySQL

MySQL

UNIX Windows
A

mysqladmin mysqldump
-h -u -p

11.2.1 MySQL

UNIX
paul paul su
root root

UNIX UNIX root


294 MySQL

root
MySQL
root root
mysql

1) mysqld
MySQL MySQL
mysqladm mysqlgrp
mysqladm mysqlgrp
MySQL
ID mysqladm
mysqlgrp
RPM RedHat Linux MySQL mysql
mysqladm
2) account-creation
root
3)
4) mysqladm
/usr/local/var mysqladm
# cd /usr/local/var
# chown -R mysqladm.mysqlgrp

5) mysqladm
/usr/local/var
mysqladm root
# cd /usr/local/var
# chmod -R go -rwx mysqladm

root
mysqladm root
--user = mysqladm ID
mysqladm
--user MySQL 3.22 mysql MySQL 3.22
root su
su
11 MySQL 295
11.2.2

mysqld mysqld --help

safe_mysqld safe_mysqld
safe_mysqld
safe_mysqld
safe_mysqld UNIX BSD
root safe_mysqld root
safe_mysqld

mysql.server safe_mysqld.mysql.server
System V /
start stop

safe_mysqld MySQL bin MySQL


scripts mysql.server MySQL share/mysql
MySQL support-files

BSD /etc
rc rc.local
rc.local
safe_mysqld

System V /etc
mysql.server Linux RPM MySQL

root

LinuxPPC /etc/rc.d/init.d /etc/rc.d/rc3.d

Solaris /etc/init.d /etc/rc2.d


296 MySQL

S99mysql start
chkconfig Linux mysql.server

1.

safe_mysqld mysql.server

UNIX /etc/my.cnf Windows c:\my.cnf


E

safe_mysqld GMT local time zone


TZ safe_mysqld mysql.server
safe_mysqld

TZ US Central Solaris
TZ

MySQL

2.
mysamchk
isamchk
13

11.2.3

mysqladmin

BSD
TERM mysqld
mysql.server System V-
stop
mysql.server
11 MySQL 297
11.2.4

MySQL root

localhost UNIX
/tmp/mysql.sock
/tmp cron

TCP/IP pit - viper.snake.net

cron cron

/usr/local/var /etc/my.cnf

root

root kill
ps PID
ID
kill TERM

kill -9

kill -9 myisamchk isamchk


13
--skip-grant-tables
root root
298 MySQL

mysqladmin flush-privileges
mysqladmin flush-privileges

11.3

MySQL
MySQL MySQL 3.22.11
GRANT MySQL REVOKE
mysql
GRANT REVOKE

user
db
tables_priv
columns_priv

host GRANT REVOKE


GRANT user
user
db tables_priv columns_priv
GRANT REVOKE
12 12
GRANT REVOKE
MySQL
MySQL
mysqlaccess mysql_setpermission MySQL
Perl GRANT
mysql_setpermission DBI

11.3.1

GRANT

privileges GRANT

CREATE
DELETE
DROP
INDEX
INSERT
11 MySQL 299
REFERENCES
SELECT
UPDATE
FILE
PROCESS
RELOAD
SHUTDOWN
ALL ALL PRIVILEGES
USAGE

SHUTDOWN
ALL USAGE

columns

what
COLUMNS

user MySQL

MySQL
MySQL UNIX
Windows MySQL
root
MySQL
nobody nobody
password IDENTIFIED BY

IDENTIFIED
BY GRANT SET PASSWORD
PASSWORD()
WITH GRANT OPTION GRANT

GRANT

GRANT MySQL
1.
300 MySQL

samp_db.* samp_db
max

% LIKE
% max
max@%
mary
snake.net %.snake.net

IP
IP MySQL 3.23
IP

129.168.128 Class C
IP 192.168.128.0/17 17
IP 17 192.168.128.0/17
MySQL

2.

ethel

ON *.*
ethel

FILE PROCESS RELOAD SHUTDOWN NO *.*

flush FLUSH
11 MySQL 301
ON db_name.*

bill samp_db
ro_user menagerie
SELECT

localhost
name reslover routine
pit-
viper pit-viper.snake.net

-h

GRANT

fine-grained

member
expiration UPDATE
MySQL

member UPDATE
expiration

assistant member UPDATE


302 MySQL

tmp mars.net
tmp GRANT

tmp.tbl_name tmp

3.
WITH GRANT OPTION
alicia big.corp.com
sales GRANT

WITH GRANT OPTION


GRANT SELECT
SELECT GRANT

11.3.2

REVOKE FROM TO
IDENTIFIED BY WITH GRANT OPTION REVOKE GRANT

user GRANT user


privileges GRANT REVOKE
REVOKE user

DELETE user

DELETE FLUSH
GRANT REVOKE
11.4 user

MySQL MySQL

fred snake.net
11 MySQL 303
samp_db fred
fred

mysql_install_db
fred anonymous-user entry
fred
12
user REVOKE

fred

11.4

MySQL

UPDATE DELETE
INSERT REPLACE CREATE TABLE DROP TABLE GRANT REVOKE
SQL mysql

mysql

--log --log-update
mysqld.safe_mysqld mysql.server [mysqld]

MySQL MySQL

log log
log.0 log log.0 log.1 log
log.0 log log.0 log.1
304 MySQL

LOAD DATA
LOAD DATE

10 MySQL

log.0 log.6
log.5 log.6 log.6 log.6

mysqlad-
min flush-logs

mysqladm .my.cnf
mysqladmin

RELOAD
flush flushpass GRANT

Linux logrotate MySQL mysql - log - rotate


mysql-log-rotate RPM MySQL
support-files
11 MySQL 305
update ,
update.001 update.002

flush-log
mysqldump
--flush-logs

find -name
update

--log-update=update.log update.log
flush-logs

cron
rotate-logs rotate-update-logs /usr/user/mysql/bin mysqlladm
mysqladm crontab

crontab

cron 4
crontab

11.5

DROP DATABASE DROP TABLE


MySQL
vi emacs

mysqldump cp
306 MySQL

tar cpio
mysqldump MySQL

mysqldump
mysqldump
MyISAM
ISAM S PARC
Solaris Intel Solaris MySQL 3.23
MyISAM

MySQL 3.23 MyISAM


ISAM

full dump

backup1 backup2

MySQL
11 MySQL 307

11.5.1 mysqldump

mysqldump C R E AT E
TABLE INSERT
mysqldump mysql

INSERT CREATE TABLE

mysqldump
samp_db

--add-drop-table mysqldump DROP TABLE IF EXISTS

mysql mysqldump
308 MySQL

samp_db p i t _ v i p e r.snake.net
boa.snake.net

boa.snake.net mysqladmin
--add-drop-table mysqldump

mysqldump
--flush-log --lock-tables --lock-table
--flush-log

--flush-logs

p e r- d a t a b a s e

mysqldump
--quick
mysqldump --opt
--quick -- opt

--opt --opt
--opt
--opt

--opt -delayed mysqldump I N S E RT


D E L AYED I N S E RT
--
delayed
--compress

--compress

mysqldump E

11.5.2

mysqldump cp
tar cpio cp
11 MySQL 309
direct-copy backup

13

samp_db DATADIR

MyISAM

11.5.3

live updating
MySQL 3.23

11.6

myisamchk isamchk
13
310 MySQL

mysql

11.6.1

mysql --skip-grant-tables
mysqladmin
flush-privileges

post-mortem examination
mysqldump
mysql tar
cp

mysql --one-database mysql

ls

update.392
update.393

DROP DATA B A S E DROP


TABLE DELETE

11.6.2

mysqldump
mysql
mysql_find_rows
11 MySQL 311
11.7

MySQL

mysqladmin variables --set-


variable var_name = value -o var_name = value
--set-variable
[mysqld]

E mysql
MySQL MySQL

back_log

delayed_queue_size INSERT DELAYED


I N S E RT DELAYED
I N S E RT
I N S E RT
DELAYED 4.5
flush_time
flush_time

Windows --flush

key_buffer_size
MySQL

MySQL 3.23 key_buffer MySQL 3.23

max_allowed_packet
BLOB TEXT
24MB
mysql 24MB

max_connections
312 MySQL

MySQL Web DBI


PHP Web

table_cache mysqld

max_connections table_cache

ulimit

r e c o r d _ b u ffer s o r t _ b u ff e r

mysqladmin variables

11.8

MySQL

MySQL

MySQL

TCP/IP UNIX
UNIX
11 MySQL 313

11.8.1

RPM
MySQL
configure --with-prefix
MySQL
version MySQL

-- with-prefix
TCP/IP --with-tcp-port --with-unix-socket

11.8.2

safe_mysqld mysql.server
safe_mysqld

/ e t c / m y. c n f
my.cnf
/ e t c / m y. c n f
DATADIR/my.cnf DATADIR
--defaults-file=path_name
path_name

/etc/my.cnf

11.9 MySQL

MySQL 3.11.1 3.22 3.23


3.23
3.24 MySQL
MySQL
MySQL

MySQL
314 MySQL

MySQL

MySQL MySQL C
MySQL PHP Apache Perl
DBD::mysql MySQL DBI
PHP MySQL
MySQL

MySQL R

MySQL
12
MySQL MySQL
11 MySQL root

MySQL

MySQL

MySQL
MySQL

12.1

MySQL mysql

MySQL

GRANT SET PASSWORD

MySQL
316 MySQL

GRANT INSERT SET PASSWORD

GRANT PASSWORD grep

MySQL

1) MySQL

2) mysql_install_db MySQL root


test
3) test
4) SHOW TABLES FROM test
SELECT *
5)
test

ls -l

menager tmp
MySQL

UNIX

1)

2) root
mysqladm mysqlgrp
12 317

3) mysqladm
root
mysqladm root

4) mysqladm
mysqladm root
11

12.2

MySQL
GRANT REVOKE
MySQL MySQL 3.22.11

MySQL

11 GRANT REVOKE
GRANT REVOKE MySQL
MySQL

12.2.1 MySQL

MySQL
mysql MySQL A
12-1 12-2 user db host tables_priv columns_priv

12-1 user db host

user db host
Host Host Host
318 MySQL

( )

User Db Db

Password User
/
Alter_priv Alter_priv Alter_priv
Create_priv Create_priv Create_priv
Delete_priv Delete_priv Delete_priv
Drop_priv Drop_priv Drop_priv
Index_priv Index_priv Index_priv
Insert_priv Insert_priv Insert_priv
References_priv References_priv References_priv
Select_priv Select_priv Select_priv
Update_priv Update_priv Update_priv

user db host
File_priv Grant_priv Grant_priv
Grant_priv
Process_priv
Reload_priv
Shutdown_priv

12-2 table_priv columns_priv


user user

tables_priv columns_priv
user Host Host
Db Db
DELETE User User
Table_name Table_name
Column_name

user Table_priv Column_priv

root
db db

host host db
GRANT REVOKE
tables_priv tables_priv
columns_priv columns_priv

12.2.4 GRANT GRANT

tables_priv columns_priv MySQL 3.22.11 GRANT


12 319
MySQL mysql user db host
3 . 2 2 . 11 tables_priv columns_priv
mysql_fix_privileges_table
rows_priv MySQL

advisory record-level locking C GET_LOCK()


scope column privilege column

1.
User Host
host
db Db
tables_priv columns_priv

2.

MySQL GRANT
user db host 11 GRANT
Select_priv SELECT
3.

ALTER ALTER TABLE

CREATE
DELETE
DROP
INDEX
INSERT
REFERENCES
SELECT SELECT SELECT
SELECT NOW() SELECT 4/2
UPDATE
4.

FILE
12.2.3
320 MySQL

/etc/passwd
mysql
FILE UNIX root root

GRANT GRANT
PROCESS SHOW PROCESSLIST mysqladmin processlist
KILL mysqladmin
kill PROCESS

RELOAD FLUSH SQL


mysqladmin reload refresh flush-hosts flush-logs flush-privileges flush-
tables

SHUTDOWN mysqladmin shutdown


user db host ENUM
N Y N o ff tables_priv
columns_priv SET

user db host SET


table_priv table_priv

columns_priv Column_priv

user File_priv
Process_priv Reload_priv Shutdown_priv

12.2.2

MySQL
user

MySQL
12 321
1.

Host IP localhost
localhost
pit-viper.snake.net user Host localhost
pit-viper.snake.net localhost localhost
p i t - v i p e r.snake.net
user Host SQL
% _ LIKE
SQL REGEX IP %.wise.edu
wise.edu 192.168.% 192.168 B
192.168.3.% 192.168.3 C
% Host
% db Host host

MySQL 3.23 IP
192.168.128.0/17 17 IP 17 192.168.128

User
User % %

user User

Password

Password
GRANT mysqladmin password
I N S E RT REPLACE U P D ATE SET PASSWORD
PASSWORD( NEW_PASSWORD ) new_password
Db columns_priv tables_priv Db
dn host Db
SQL % _ %
Ta b l e _ n a m e Column_name

12-3
Table_name
UNIX
Windows
322 MySQL

12-3

Host No Db Yes
User Yes Table_name Yes
Password Yes Column_name No

2.

user db table_priv columns_priv

1) user

2) db

3) tables_priv
columns_priv
4)

user
user
PASSWORD UNIX

MySQL UNIX
UNIX MySQL
UNIX CRYPT()
PASSWORD()

host GRANT REVOKE


GRANT REVOKE host

db Host
host
db Db host host
Host
db host
AND
12 323
db host

in-memory

INSERT user

FLUSH PRIVILEGES mysqladmin flush-privileges


mysqladmin reload flush-privileges
3.
MySQL
MySQL
user MySQL

user Host User Host


Host User

boa.snake.net boa.snake.net %.snake.net Host


%.snake.net %.net %.net % IP
192.168.3.14 IP 192.168.3.4
192.168.3.% 192.168.% 192.% % Host

12.2.3

user
user

mysql
mysql
GRANT GRANT

FILE FILE
324 MySQL

FILE
FILE

FILE

LONGBLOB

y other_db.x

SHOW DATABASE SHOW


TA B L E S -skip-show-database

ALTER user1 table1


table2 ALTER ALTER TABLE table2
table1
GRANT GRANT

12.2.4 GRANT

MySQL 3.22.11 GRANT REVOKE


GRANT
I N S E RT I N S E RT
GRANT

GRANT user
12 325
User Host Password
GRANT INSERT PASSWORD() INSERT

db User Host
Db
tables_priv columns_priv

GRANT GRANT

mysqladmin flush-privileges mysqladmin reload

grant

user ethel@localhost
INSERT

I N S E RT MySQL
user 14 SHOW
COLUMNS INSERT
GRANT

11 flush INSERT

ON db_name.* ON *.*

user user
db

N GRANT WITH GRANT OPTION


GRANT Y
tables_priv columns_priv INSERT
GRANT MySQL
326 MySQL

t a b l e s _ p r i v. Table_priv c o l u m n s _ p r i v.Column_priv SET


SET SELECT INSERT
tables_priv Table_priv Select, Insert
MySQL UPDATE
I N S E RT DELETE

MySQL mysqlaccess
mysql_setpermissions

11
MySQL

fred

mysql_install_db
user mysql_install_db
Host User user

localhost root
fred user
12 327
( )

localhost root
pit-viper.snake.net
Host fred fred
fred
fred
Host %.snake.net
fred

user

User db
tables_priv columns_priv

Host Host
13
MySQL
MySQL kill -9

MySQL myisamchk isamchk


4

myisamchk isamchk E
MySQL MySQL

13.1

1)
2)
3)
4)

11 mysqlaump

myisamchk isamchk

MySQL

mysql

13.1.1 myisamchk isamchk

MySQL myisamchk isamchk


MyISAM myisamchk
ISAM isamchk
13 329
.MYI MyISAM .ISM ISAM

tbl_name

MyISAM

% myisamchk *.MYI
% myisamchk *.ISM

myisamchk isamchk

13.1.2

myisamchk isamchk

--extend-check

myisamchk --medium-check
--extend-check

MySQL

myisamchk isamchk

13.1.3
330 MySQL

11
1.

1) --recover --quick

2) --quick myisamchk
isamchk

3) --safe-recover
-recover

myisamchk isamchk Can t create new temp file: file_name


--force

2.

1)
2)
3) mysql
tbl_name.frm

4) mysql
5)

CREATE TABLE
1)
2)
3) mysql CREATE TABLE
4) mysql
2
13 331
5)

13.1.4 MySQL

/ MySQL

myisamchk isamchk

myisamchk isamchk

SELECT UPDATE

myisamchk isamchk
myisamchk isamchk

--skip-locking
Linux mysqladmin variables
skip_locking
skip_locking off

mysqladmin flush-tables

skip_locking on myisamchk isamchk

myisamchk
isamchk mysql LOCK
TABLE mysql
myisamchk isamchk myisamchk isamchk mysql

LOCK TABLE UNLOCK TABLE FLUSH


TABLES
mysql LOCK FLUSH UNLOCK
mysql myisamchk isamchk
332 MySQL

mysql myisamchk isamchk

myisamchk isamchk
mysql myisamchk isamchk

1.
1 mysql

FLUSH

mysql 2

myisamchk isamchk 1 mysql

myisamchk isamchk
2.

FLUSH TABLE myisamchk isamchk

mysql 2 myisamchk
isamchk

--recover
myisamchk isamchk 1 mysql

13.1.5 myisamchk isamchk

myisamchk isamchk
13 333
key_buffer_size
read_buffer_size
sort_buffer_size
w r i t e_buffer_size

--help
--set-variable variable=value -O variable=value
key read sort write myisamchk 16MB
1MB

sort_buffer_size --recover --safe_recover ,


key_buffer

myisamchk
myisamchk MySQL 3.23
myisamchk

ISAM
ISAM MyISAM MySQL
ALTER TABLE

13.2

1)
2) cron
crontab
mysqladm mysqladm crontab
cron UNIX
334 MySQL

3)

myisamchk isamchk
MyISAM ISAM
myisamchk isamchk
crontab
cron
--silent
myisamchk --fast
DATADIR

*/*.MYI */*.ISM
too many arg u m e n t s
DATADIR

check_mysql_tables

cron
/usr/users/mysaladm/bin

check_mysql_tables

13.2.1 cron

mysqladm crontab check_mysql_tables


crontab
13 335
crontab

cron 3
crontab

13.2.2

BSD /etc/rc.local
check_mysql_tables
System V /etc/rc.d mysql.server
start stop
start
check_mysql_tables stop
mysql.check

mysql.check 11
mysql.server mysql.check
mysql.server S99mysql.server mysql.server
S98mysql.check mysql.check
A
MySQL Perl
DBI CGI.pm PHP Apache
samp_db

MySQL

A.1

MySQL
MySQL MySQL
DBI Web DBI
CGI.pm Web Apache

PHP MySQL PHP PHP


Web Web Apache
Apache PHP PHP Apache
Apache ISP
Apache ISP Web PHP
PHP CGI PHP
Apache
Linux RPM
C MySQL C++
MySQL gcc 2.95.1 MySQL egcs 1.03

gunzip tar tar rpm


RPM

A.2
338
MySQL http://www.mysql.com/ ftp://ftp.mysql.com/pub/mysql/
DBI http://www.symbolstone.org/ technology/perl/DBI/
http://www.mysql. com/Contrib/
PHP http://www.php.net/
ftp://ftp.php.net/
Apache http://www.apache.org/ ftp://ftp.apache.org/
CGI.pm http://stein.cshl.org/WWW/software/CGI/
FTP
MySQL www.mysql.com Scandinavia

http://www.mysql.com/mirrors.html

Perl http://cpan.perl.org/

β
β
β
β
MySQL RPM
MySQL MySQL

Web β

RPM
root

root

Web
configure
configure
configure
A 339

configure

A.3 UNIX MySQL

MySQL 3.22
3.23
MySQL RPM RPM

mysqld
mysql mysqladmin

RPM
RPM

A.3.1 MySQL

UNIX MySQL
1) UNIX
2)
3) mysql_install_db
4)
5) 11

A.3.2 MySQL

MySQL MySQL
MySQL UNIX
340
root MySQL

mysqladm mysqlgrp UNIX MySQL


mysqladm mysqlgrp
RPM RPM
mysql mysql mysqladm
MySQL root
root MySQL root
MySQL root
mysqladm root root
MySQL
MySQL core MySQL
mysqladm MySQL corn root
root

A.3.3 MySQL

MySQL

3.22.26 3.23.4-alpha sgi-irix6.3-mips dec-


osf4-0b-alpha
1.
msql-version-platform.tar.gz
MySQL /usr/local
tar z

m y s q l -v e r s i o n - p l a t f o r m

/usr/local MySQL /usr/local/mysql

MySQL A.3.4
A.3.5
2. RPM
RPM Linux MySQL
MySQL-version-platform.rpm
MySQL-client.version-platform.rpm
A 341
M y S Q L - d e v e l .v e r s i o n - p l a t f o r m.rpm
MySQL Perl DBI
MySQL-bench.version-platform.rpm Perl Msql-Mysql-modules
www.mysql.com Mysql-Mysql-modules RPM
MySQL-version.src.rpm
RPM RPM
RPM rpm_file

RPM

MySQL RPM RPM

RPM

MySQL
MySQL A.3.4
A.3.5
RPM

3.
mysql-version.tar.gz version MySQL

tar z

mysql-version

MySQL
MySQL
configure

configure

--without-server
342
--prefix = path_name /usr/local
var bin libexec lib include
--prefix
--localstatedir = path_name
/usr/local/var
--with-low-memory sql/sql_yacc.cc
fatal signal 11 --with-low-
memory
configure

--prefix root
MySQL
MySQL A.3.4 A.3.5

A.3.4

MySQL
mysql
bin

D ATA D I R root
mysqladm MySQL root
chown chmod
mysql_install_db RMP
mysql_install_db

mysql_install_db MySQL MySQL


mysql_install_db
mysql_install_db
mysql

mysql_install_db MySQL 3.22.10


mysql_install_db

chown MySQL chmod mysqladm


A 343
A.3.5

root mysqladm
MySQL root
--user

--user mysqladm

MySQL root

11

A.3.6 Perl DBI

MySQL Perl DBI DBI


MySQL MySQL C
Web DBI CGL.pm DBI Perl 5.004
Perl http://www.perl.com/ Perl DBI

DBI RPM
Data-Dumper Perl
DBI DBI
Msql-Mysql-modules MySQL DBI MySQL

tar z

tar root

Msql-Mysql-modules Makefile perl

Which drivers do you want to install? MySQL mSQL


mSQL MySQL
344
Do you want to install the MysqlPerl emulation? MysqlPerl MySQL Perl
MysqlPerl DBI
no
Where is your MySQL installed MySQL
/usr/local /usr/local/mysql MySQL
Which database should I use for testing the MySQL drivers? test

MySQL
On which host is the database running? localhost
make test
MySQL
User name for connecting to the database?
Password for connecting to the database?
MySQL
undef
Perl README DBI

CGI.PM Perl perldoc CGI


CGI CGI Perl

Web DBI mod_perl Apache


Apache Web mod_perl

A.3.7 PHP Apache

PHP I N S TA L L
VERBOSE INSTALL
Apache Apache
PHP Apache 1.3.9 PHP 3.0.12
apache_1.3.9 php-3.0.12

PHP Apache

Apache configure PHP


Apache configure PHP Apache
PHP PHP PHP
A 345

PHP configure PHP MySQL Apache


--enable-track-vars PHP
make PHP root php3.ini
PHP Apache
Apache Apache

Apache PHP Apache


httpd.conf Apache PHP PHP PHP
Apache .php .php3

PHP .php .php3


.phtml

Apache URL index.php index.php3

Apache httpd
httpd root

Apache Apache
apachectl start apachectl stop

A.4 Windows MySQL

Windows 95 Windows 98 Windows NT MySQL


TCP/IP Winsock 2
Windows
UNIX mysqld msyql mysladmin

MyODBC Access MySQL ODBC MySQL


346
Windows MySQL zip
Winzip pkunzip

mysqlwin.version.zip
winclients-version.zip mysql mysqladmin mysqldump
Windows
myodbc-version-win95.zip
myodbc-version-nt.zip
Windows 95 Windows 98 Windows NT MyODBC
mysqlclient-version-cygwin-b20.tar.gz Cygnus MySQL
mysqlc mysql
c:\mysql\lib cygwinb19.dll Windows

A.4.1 /

winclients.version.zip mysql
c:\
mysqlwin-version.zip
Setup c:\mysql MySQL

mysqld
mysqld-opt
mysqld-nt Windows NT

NT NT
mysqld mysqld-opt

mysqladmin

Windows NT mysqld-nt

mysqld-nt C : \ m y.cnf
mysqld-nt

control Panel Services Control Manager


mysqladmin

mysqld-nt
A 347
--standalone
mysqladmin
MySQL MySQL
MySQL root
11

A.4.2 MyODBC

Windows 95 98 Windows NT
Setup MySQL ODBC ODBC

MyODBC Problems while copying MFC30.DLL


MFC30.DLL Wi n d o w s
Setup
ODBC DSN
User DSN Add
MySQL Finish
OK
samp_db

Windows DSN name: samp_db


MySQL host (name or IP): pit-viper.snake.net
MySQL database name: samp_db
User: paul
Password: secret

ODBC MySQL

A.4.3 Perl DBI

ActiveState Web http://www.activestate.com/ ActiveState Perl


Perl ppm Perl Package Manager

CGI.pm
DBI

A.4.4 PHP Apache

Windows PHP MySQL DLL


348
Windows PHP Web
http://www.umesd.k12.or.us/php/win32install.html

A.5 samp_db

samp_db

samp_db.tar.gz

samp_db
samp_db 1
6 C
7 Perl DBI samp_db.cnf
8 PHP samp_db.inc
samp_db README
B
MySQL 2
MySQL 3.21.0

[]
M M 1 255
D D 0 30 D M
2 M D+2
ODBC M D

CREATE TABLE ALTER TABLE


C R E ATE TABLE A LT E R
TABLE D

DEFAULT

NULL NOT NULL


DEFAULT default_value

B.1

MySQL
AUTO_INCREMENT PRIMARY KEY
UNIQUE NULL AUTO_INCREMENT
350
UNSIGNED
ZEROFILL
1. TINYINT[(M)]

AUTO_INCREMENT, UNSIGNED, ZEROFILL


128 127 27 27 1 UNSIGNED 0 255 0
28 1
NULL NULL NOT NULL 0
1
2. SMALLINT[(M)]

AUTO_INCREMENT, UNSIGNED, ZEROFILL


32768 32767 2 15 2 15 1 UNSIGNED 0 65535
0 2 16
1
NULL NULL NOT NULL 0
2
3. MEDIUMINT[(M)]

AUTO_INCREMENT, UNSIGNED, ZEROFILL


8388608 8388607 2 23 2 23 1 UNSIGNED 0
1677215 0 2 24
1
NULL NULL NOT NULL 0
4
4. INT[ (M)]

AUTO_INCREMENT, UNSIGNED, ZEROFILL


2147483648 2147483647 231 231 1 UNSIGNED
0 4294967295 0 232 1
NULL NULL NOT FULL 0
4
INTEGER[(M)]
5. BIGINT[(M)]

AUTO_INCREMENT, UNSIGNED, ZEROFILL


9223372036854775808 9223372036854775807 263 263 1
UNSIGNED 0 18446744073709551615 0 2 64 1
NULL NULL NOT NULL 0
8
6. FLOAT[(M, D)]
B 351
DOUBLE
ZEROFILL
1.75494351E 38; 3.402823466E+38
NULL NULL NOT NULL 0
4
MySQL 3.23 FLOAT(4) M D FLOAT
MySQL 3.23 FLOAT(4)

7. DOUBLE[(M, D )]
FLOAT
ZEROFILL
2.2250738585072014E 308; 1 79769313-
48623157E+308
NULL NULL NOT NULL 0
8
DOUBLE PRECISION[(M, D)] REAL[(M, D )] DOUBLE[(M, D)]
MySQL 3.23 FLOAT(8) M D FLOAT
MySQL 3.23 FLOAT(8)

8. DECIMAL(M, D )
1
ZEROFILL
DOUBLE DECIMAL M
D D
NULL NULL NOT NULL 0
MySQL 3.23 M MySQL 3.23 M
+2
NUMERIC(M, D )
MySQL 3.23 M ANSI SQL

B.2

MySQL

1.CHAR(M)
0 M MySQL 3.23 M 1 255
MySQL 3.23 M 0 255 M
M M
352
BINARY
0 M
NULL NULL NOT NULL
M
BINARY
2. VARCHAR(M)
0 M M 1 255
MySQL 3.23 0 255 M
M
BINARY
0 M
NULL NULL NOT NULL
1
BINARY
3. TINYBLOB
BLOB

0 255 0 28 1
NULL NULL NOT NULL
1

4. BLOB
BLOB

0 65535 0 2 16 1
NULL NULL NOT NULL
2

5. MEDIUMBLOB
BLOB

0 16777215 0 224 1
NULL NULL NOT NULL
3

6. LONGBLOB
BLOB

0 4294967295 0 2 32 1
B 353
NULL NULL NOT NULL
4

7. TINYTEXT
TEXT

0 255 0 28 1
NULL NULL NOT NULL
2

8. TEXT
TEXT

0 65535 0 2 16 1
NULL NULL NOT NULL
2

9. MEDIUMTEXT
TEXT

0 16777215 0 2 24 1
NULL NULL NOT NULL
3

10. LONGTEXT
TEXT

0 4294967295 0 2 32 1
NULL NULL NOT NULL
4

11. ENUM( value1 , value2 , ...)

NULL NULL NOT NULL


1 255 1 255 65535 2
MySQL 3.22.1
12. SET( value1 , value2 , ...)
354
NULL NULL NOT NULL
1 1 8 2 9 16 3 17 24
4 25 32 8 33 64
MySQL 3.22.1

B.3

MySQL

1. DATE
YYYY-MM-DD

1000-01-01 9999-12-31
0000-00-00
NULL NULL NOT NULL 0000-00-00
3 MySQL 3.22 4
2. TIME
HH:MM:SS - HH:MM:SS

-838:59:59 838:59:59
00:00:00
NULL NULL NOT NULL 00:00:00
3
TIME 00:00:00

3. DATETIME
YYYY-MM-DD hh:mm:ss

1000-01-01 00:00:00 9999-12-31 23:59:59


0000-00-00 00:00:00
NULL NULL NOT NULL 0000-00-00
00:00:00
8
4. TIMESTAMP[(M)]
YYYYMMDDHHMMSS

19700101000000 2037
B 355
DESCRIBE SHOW COLLUMNS NULL
4
NULL TIMESTAMP
TIMESTAMP
14 NOT NULL

5. YEAR
YYYY

1900 2155
0000
NULL NULL NOT NULL 0000
1
YEAR MySQL 3.22
C
SQL MySQL
MySQL
2
MySQL MySQL
3.21.0 MySQL
MySQL

expression result

LOWER ("ABC") abc


mysql mysql
SELECT Enter

MySQL FROM SELECT


FROM
SELECT

BETWEEN

expr

str
n n
x x

[]

C.1
C 357
C.1.1

NOT BINARY

C.1.2

( )

C.1.3

NULL NULL
+

+
0 CONCAT( )

*
358
/ NULL

% m n m%n MOD(m, n )
NULL

+ - * BIGINT 64
64

/ % BIGINT

C.1.4

1 0

<=> NULL NULL


NULL <=>NULL <=> =

T I M E S TAMP D ATETIME
TIMESTAMP ODBC

0 14.3
14.3 L4.3 0

B I N A RY
CHAR BINARY VARCHAR BINARY BLOB
= 1 0
C 359

abc abc ABC


B I N A RY abc 0
abc 0
<=> NULL- NULL-safe 1
NULL =

= <=> NULL
!= <> 1 0

< 1 0

<= 1 0

>= 1 0

> 1 0

expr BETWEEN min AND max min expr max expr


1 expr min max

BETWEEN
360
expr
expr
expr
expr

BETWEEN MySQL 3.21.2


expr IN (value1, value2, ...)

expr IN 1 0 NOT IN

MySQL IN

expr IS NULL

expr NULL IS NULL 1 0 IS NOT NULL

IS NULL IS NOT NULL expr NULL


= =

NOT IS
C.1.5
BIGINT 64
C 361
NULL NULL
| OR

& AND

<<

>>

.1.6

1
0 0 NULL

NOT ! 1 0 NOT
NULL NULL

OR || OR NULL 1 0

AND && AND NULL 1


0
362

MySQL ! || && C
|| SQL CONCAT( )

C.1.7

BINARY

BINARY
BINARY MySQL 3.23.0

C.1.8

MySQL LIKE SQL REGEXP


SQL

SQL

str LIKE pat [ESCAPE c ]

LIKE SQL pat str


1 0 NOT LIKE

NULL NULL
SQL

% NULL

LIKE SQL
C 363

MySQL LIKE

\ ESCAPE

str REGEXP pat

REGEXP UNIX grep


sed C-1

C-1

^
$
.
[...]
[^...]
e* e
e+ e 1
e? e
e1|e2 e1 e2
e{m} e m
e{m,} e m
e{,n} e 0 n
e{m,n} e m n
(...)
other

pat str REGEXP 1 0 NOT REGEXP


364
NULL NULL

[...] [^...]
[a-z] [0-9]
] -
^ [

MySQL
^
$

str RLIKE pat

RLIKE NOT RLIKE REGEXP NOT REGEXP


MySQL C \n \t \\
\\n \\t
\\\\

C.2

NOW( )
NOW ( )

CONCAT( abc , def )


CONCAT( abc , def )

C.2.1

GREATEST(expr1, expr2, ...)


C 365

GREATEST( ) MySQL 3.22.5 MAX( )


I F (e x p r 1, e x p r 2, e x p r 3) e x p r1 0 NULL expr2
expr3 IF( )

expr
1.3 1 0.3 0
1 0
IFNULL(expr1, expr2)
expr1 NULL expr2 expr1 IFNULL()

INTERVAL(n, n1, n2, ...)


n < n1 0 n < n2 1 n NULL 1
n1, n2, ... n1 < n2 < ...
INTERVAL( )

ISNULL(expr) expr NULL 1 0

LEAST(expr1, expr2, ...) GREATEST( )

LEAST( ) MySQL 3.22.5 MIN( )


STRCMP(str1, str2) str1 str2 1 0
NULL NULL
366
C.2.2

NULL
NULL
ABS(x) x

ACOS(x) x x 1 1 NULL

ACOS( ) MySQL 3.21.8


ASIN(x) x x 1 1 NULL

ASIN( ) MySQL 3.21.8


ATAN(x) x x 1 1 NULL

ASIN( ) MySQL 3.21.8


ATAN2(x, y) ATAN(x)

GEILING(x) x

COS(x) x x

COS( ) MySQL 3.21.8


COT(x) x x

COT( ) MySQL 3.21.16


DEGREES(x) x
C 367
DEGREES( ) MySQL 3.21.16
EXP(x) ex e

FLOOR(x) x x

LOG(x) x e

LOG( ) b x LOG(x)/LOG(b)

LOG10(x) 10 x

MOD(m, n) m%n
PI( ) π

PI( ) MySQL 3.21.8


POW(x, y) xy x y

POWER(x, y) POW( ) MySQL 3.21.16


RADIANS(x) x

RADIANS( ) MySQL 3.21.16


RAND()
RAND(n)

RAND() 0.0 1.0 RAND(n) n


69 n
368

ROUND(x)

x R O U N D (x, d) x d
d 0

SIGN(x) x 1 0 1

SIN(x) x x

SIN( ) MySQL 3.21.8


SQRT(x) x

TAN(x) x

TAN( ) MySQL 3.21.8


TRUNCATE(x, d) x d d 0
d x

C.2.3

LENGTH( )
1 0
ASCII(str) str ASCII str 0 str
NULL NULL
C 369
ASCII( ) MySQL 3.21.2
BIN(n) n

CONV( )
CHAR(n1, n2, ...) ASCII
NULL

CHAR( ) MySQL 3.21.0


CHARACTER_LENGTH(str) LINGTH( )
COALESCE(expr1, expr2, ...) (expr1, expr2, ...)

COALESCE( ) MySQL 3.23.3


CONCAT(str1, str2, ...) NULL
NULL CONCAT( )

C O N V(n, from_base, to_base ) f ro m _ b a s e n


to_base n NULL NULL f ro m _ b a s e
to_base 2 36 N BIGINT 64
10 CONV()
11 36 A Z n
from_base 0 from_base 16 n
abcdefg 0 g
n
n
14

255

CONV( ) MySQL 3.22.4


ELT(n, str1, str2, ...) str1 str2 ... n n n
NULL n NULL NULL 1 ELT( ) FIELD( )
370

EXPORT_SET(n, on, off, [separator, [bit_count]]) on off separator


on n 1 off n 0 bit_count n
separator bit_count 64
"

EXPORT_SET( ) MySQL 3.23.2


FIELD(str, str1, str2, ...)
str1 str2 ... str str NULL
0 1 FIELD( ) ELT( )

FIND_IN_SET(str, str_list)
str_list SET FIND_IN_SET( )
str str_list str str_list 0 NULL
NULL 1

FIND_IN_SET( ) MySQL 3.21.22


FORMAT(X, D)
X nn,nn.nnn D D 0

HEX(n)
n

CONV( )
HEX( ) MySQL 3.22.4
INSERT(str, pos, len, new_str) str new_str pos len
pos NULL NULL

INSTR(str, substr) INSTR( ) LOCATE( )


C 371

L C A S E (s t r ) str str NULL


NULL

LEFT(str, len) str len len


str NULL NULL len NULL 1

LENGTH(str) str

LOCATE(substr, str )
LOCATE ( substr, str, pos)
LOCATE() substr str substr str
0 NULL NULL pos L O C ATE( )
pos substr

LOWER(str) LCASE( )
LPAD(str, len, pad_str) str pad_str
len str len str

LPAD( ) MySQL 3.22.2


LTRIM(str) str str NULL NULL

MAKE_SET(n, bit0_str, bit1_str, ...) n bit0_str bit1_str ... SET


n 1
0 1 bit0_str n 0 n
NULL NULL NULL
372
1 1
MAKE_SET( ) MySQL 3.22.2
M I D (s t r, pos, len) str pos len NULL
NULL

OCT(n) n

CON( )
OCT( ) MySQL 3.22.4
OCTET_LENGTH(str) LENGTH( )
POSITION(substr IN str) LOCATE( )

REPEAT(str, n ) str n n NULL

REPEAT( ) MySQL 3.21.10


REPLACE(str, from_str, to_str) str from_str
to_str NULL NULL to_str
from_str from_str REPLACE( ) str

R E V E R S E (s t r ) str str NULL


NULL

REVERSE MySQL 3.21.19


R I G H T (s t r, len) str len len
str NULL NULL len NULL 1

RPAD(s t r, len, pad_str) str pad_str len


str len str

RPAD( ) MySQL 3.22.2


C 373
RTRIM(str) str str

SOUNDEX(str) str str


A Z

SPACE(n) n n n NULL
NULL

SPACE( ) MySQL 3.21.16


SUBSTRING(str, pos )

str pos len


str pos

S U B S T R I N G _ I N D E X ( s t r, delim, n ) str n
SUBSTRING_INDEX( ) delim n
n str delim n
str delim
NULL NULL
. .

SUBSTRING_INDEX( ) MySQL 3.21.15


TRIM( [[LEADING | TRAILING | BOTH] [trim_str] FROM] str) str
/ trim_str LEADING trim_str
TRAILING trim_str BOTH trim_str
LEADING TRAILING BOTH BOTH trim_str
TRIM( )
374

TRIM( ) MySQL 3.21.12


UCASE(str) str str NULL NULL

UPPER(str) UCASE( )

C.2.4

D AT E
DATETIME TIMESTAMP
ADDATE(date, INTERVAL expr interval) DATE_ADD( )
CURDATE( ) YYYY-MM-DD
YYYYMMDD

CURRENT_DATE CURDATE( )
CURRENT_TIME CURTIME( )
CURRENT_TIMESTAMP NOW( )
C U RTIME() hh:mm:ss
hhmmss

CURTIME( ) MySQL 3.21.12


DATE_ADD(date, INTERVAL e xpr interval) date
expr expr -
date interval expr date DATE DATE
DATETIME
date NULL

C-2 interval INTERVAL


interval
expr
C 375

expr interval HOUR_


SECOND hh:mm:ss expr 15:21 00:15:21
15:21:00

C-2 DATE_ADD( )

SECOND ss
MINUTE mm
HOUR hh
DAY DD
MONTH MM
YEAR YY
MINUTE_SECOND mm:ss
HOUR_MINUTE hh:mm
HOUR_SECOND hh:mm:ss
DAY_HOUR DD hh
DAY_MINUTE DD hh:mm
DAY_SECOND DD hh:mm:ss
YEAR_MONTH YY-MM

interval YEAR MONTH YEAR_MONTH

DATE_ADD MySQL 3.22.4


DATE_FORMAT(date, format) format date
DATE_FORMAT( ) DATE DATETIME

C-3
MySQL 3.23.0 % %

DATE 00:00:00

DATE_FORMAT( ) MySQL 3.21.14


DATE_SUB(date, INTERVAL expr interval) DATE_ADD()
date expr expr DATE_ADD( )
376

DATE_SUB( ) MySQL 3.22.4


C-3 DATE_FORMAT( )

%S, %s 00,01, . . ., 59
%i 00,01, . . ., 59
%H 24 00,01, . . ., 23
%h, %I 12 01,02, . . ., 12
%k 24 0,1, . . ., 23
%l 12 1, 2, . . ., 12
%T 24 hh:mm:ss
%r 12 hh:mm:ss AM hh:mm:ss PM
%p AM PM
%W Sunday, Monday, . . ., Saturday
%a Sun, Mon, . . ., Sat
%d 00, 01, . . ., 31
%e 1, 2 . . ., 31
%D 1st, 2nd, 3rd, . . .
%w 0=Sunday, 1=Monday, . . ., 6=Saturday
%j 001, 002, . . ., 366
%U 0, 1, 52 Sunday
%u 0, 1, 52 Monday
%M January, February, . . ., December
%b January, February, . . ., December
%m 01, 02, . . ., 12
%c 1, 2, . . ., 12
%Y
%y
%% %

DAYNAME(date) date

DAYNAME( ) MySQL 3.21.23


DAYOFMONTH(date) date 1 31

DAYMONTH( ) MySQL 3.21.22


DAYOFWEEK(date) date ODBC
1 2 ... 7 WEEKDAY( )
C 377
DAYWEEK( ) MySQL 3.21.15
DAYOFYEAR(date) date 1 366

DAYOFYEAR( ) MySQL 3.21.22


EXTRACT(interval FROM datetime) interval datetime
interval DATE_ADD( )

EXTRACT( ) DATE NULL


EXTRACT( ) MySQL 3.23.0
F R O M _ D AY S (n) 0 TO _
DAYS( )

FROM_DAYS( ) 1582
FROM_UNIXTIME(unix_timestamp)
FROM_UNIXTIME(unix_timestamp, format)
UNIX unix_timestamp UNIX_TIMESTAMP( )
Y Y Y Y-MM-DD hh:mm:ss
YYYYMMDDhhmmss format
DATE_FORMAT( )

FROM_UNIXTIME( ) MySQL 3.21.5 MySQL


3.21.8
HOUR(time) time 0 23

HOUR( ) MySQL 3.21.22


MINUTE(time) time 0 59

MINUTE( ) MySQL 3.21.22


MONTH(date) date 1 12

MONTH( ) MySQL 3.21.22


MONTHNAME(date) date
378
MONTHNAME( ) MySQL 3.21.23
NOW() YYYY-MM-DD hh:mm:ss
YYYYMMDDhhmmss

PERIOD_ADD(period, n) period n
YYYYMM period YYYYMM YYMM

P E R I O D _ D I F F (period1, period2)
YYYYMM YYMM

QUARTER(date) date 1 4

QUARTER( ) MySQL 3.21.22


SECOND(time) time 0 59

SECOND( ) MySQL 3.21.22


S E C _ TO _ T I M E (s e c o n d s) seconds hh:mm:ss
hhmmss

SEC_TO_TIME( ) MySQL 3.21.5


SUBDATE(date, INTERVAL expr interval) DATE_SUB( )
SYSDATE( ) NOW( )
TIME_FORMAT(time, format) format time
DATE_FORMAT( )
NULL 0

TIME_FORMAT( ) MySQL 3.21.3


TIME_TO_SEC(time) time

TIME_TO_SEC( ) MySQL 3.21.16


TO _ D AY S (d a t e) date 0
FROM_DAYS( )
C 379

TODAYS( ) 1582
UNIX_TIMESTAMP( )
UNIX_TIMESTAMP(date)
UNIX 1970-01-01 00:00:00 GMT
date UNIX date
D ATE D ATETIME T I M E S TAMP
YYYYMMDD YYMMDD

WEEK(date)
WEEK(date, first)
date 0 52
first
first 0 first 1

WEEK( ) MySQL 3.21.22 MySQL 3.22.1


WEEKDAY(date) date 0
6 DAYOFWEEK( )

YEAR(date) date 1000 9999

YEAR( ) MySQL 3.21.22

C.2.5

summary function aggregate function


NULL COUNT(*)

1
my_table my_col
1 3 5 7 9 NULL
AVG(expr) NULL expr
380
BIT_AND(expr) NULL expr AND

BIT_AND( ) MySQL 3.21.11


BIT_OR(expr) NULL expr OR

BIT_OR( ) MySQL 3.21.11


COUNT(expr) * NULL
* NULL

WHERE COUNT(*) FROM


COUNT(*)

MAX(expr) NULL expr MAX( )

MIN(expr) NULL expr MIN( )

STD(expr) NULL expr

STDDEV(expr) STD( )
SUM(expr) NULL expr

C.2.6

BENCHMARK(count, expr) expr count BENCHMARK()


0
mysql

CPU
C 381
BENCHMARK( ) MySQL 3.22.15
BIT_COUNT(n) 1 BIGINT 64

DATABASE()

DECODE(str, password) ENCODE( ) str


password

ENCODE(str, password) password str


DECODE( )
BLOB
ENCRYPT(str)
ENCRYPT(str, salt)
str salt
salt salt
ENCRYPT( )

E N C RYPT( ) UNIX crypt( )


crypt( ) E N C RYPT( ) NULL E N C RYPT( )
crypt( ) crypt( ) 8

ENCRYPT( ) MySQL 3.21.12 MySQL 3.22 salt

GET_LOCK(str, timeout) GET_LOCK( ) RELEASE_LOCK( )

str timeout GET_LOCK( )


1 0
NULL timeout

Nellie 10
GET_LOCK( Nellie , 10)

GET_LOCK( )
382

1
Nellie 2 1
2

RELEASE_LOCK( )
RELEASE_LOCK( Nellie )

RELEASE_LOCK( ) 1
0 NULL
GET_LOCK( )

G E T _ L O C K ( s t r, 0) str
str RELEASE_LOCK( )

GET_LOCK( ) MySQL 3.21.7


LAST_INSERT_ID( )
LAST_INSERT_ID(expr)
AUTO_INCREMENT
0 U P D ATE

2 LAST_INSERT_ID( )

LAST_INSERT_ID( ) MySQL 3.22.9


LOAD_FILE(file_name) file_name

file
LOAD_FILE( ) NULL
LOAD_FILE( ) MySQL 3.23.0
MD5(str) RSA DATA Security, Inc. MD5 Message_Digest str
32

MD5( ) MySQL 3.23.2


PA S S W O R D (s t r) str MySQL
C 383
PASSWORD() UNIX
ENCRYPT( )
RELEASE_LOCK(str) RELEASE_LOCK( ) GET_LOCK( )
GET_LOCK( )
RELEASE_LOCK( ) MySQL 3.21.7
SESSION_USER( ) USER( )
SYSTEM_USER( ) USER( )
USER( ) MySQL 3.22.1
user@host user host

VERSION( ) 3.22.25.log
-log -debug -demo

VERSION( ) MySQL 3.21.13


D SQL
MySQL SQL SQL
MySQL
MySQL
MySQL MySQL
http://www.mysql.com/

[]
{}
|
...
MySQL 3.22.0

D.1 SQL

MySQL SQL
db_name USE db_name

D.1.1 ALTER TABLE

ALTER [IGNORE] TABLE tbl_name action _list


A LTER TABLE
tbl_name
IGNORE IGNORE ALTER TABLE
IGNORE
action_list

ADD [COLUMN] c o l _ d e c l a r a t i o n [FIRST | AFTER c o l _ n a m e]


col_declaration C R E ATE TABLE
FIRST AFTER col_name
D SQL 385
A D D I N D E X [ i n d e x _ n a m e ] ( i n d e x _ c o l u m s)
index_colums tbl_name
CHAR VARCHAR
col_name(n) n BLOB TEXT
index_name

ADD PRIMARY KEY (index_columns)


PRIMARY ADD INDEX index_columns

ADD UNIQUE [index_name] (index_columns) tbl_name


ADD INDEX index_name index_columns

ALTER [COLUMN] col_name {SET DEFAULT value | DROP DEFAULT}

CREATE TABLE

CHANGE [COLUMN] col_name col_declaration col_name


col_declaration col_declaration
C R E ATE TABLE

DROP [COLUMN] col_name

DROP INDEX index_name

DROP PRIMARY KEY PRIMARY KEY


UNIQUE

MODIFY [COLUMN] col_declaration CREATE TABLE


col_declaration
MODIFY MySQL 3.22.16

RENAME [AS] new_tbl_name tbl_name new_tbl_name


386
table_options C R E ATE TABLE table_
options

D.1.2 CREATE DATABASE

CREATE DATABASE db_name

D.1.3 CREATE FUNCTION

mysql function UDF function_name


SQL RETURNS
shared_library_name
AGGREGATE SUM() MAX() AGGREGATE
MySQL 3.23.5
CREATE FUNCTION UDF
MySQL

D.1.4 CREATE INDEX

CREATE [UNIQUE] INDEX index_name ON tbl_name (index_columns)

tbl_name index_name UNIQUE


ALTER TABLE ADD INDEX ALTER TABLE ADD UNIQUE
ALTER TABLE CREATE INDEX MySQL 3.22

D.1.5 CREATE TABLE


D SQL 387

CREATE TABLE tbl_name TEMPORARY


DROP TABLE

IF NOT EXISTS
T E M P O R A RY tbl_name

DROP TABLE
create_definition SELECT
table_options se l e c t _
statement SELECT SELECT

TEMPORARY IF NOT EXISTS table_options SELECT


MySQL 3.23
c reate_definition FOREIGN KEY re f e re n c e _ d e f i n i t i o n
CHECK
col_declaration col_name col_type
B

NULL NOT NULL NULL


NULL
DEFAULT default_value BLOB TEXT
NULL NULL
NULL
A U TO_INCREMENT 0 A U TO _
INCREMENT
T I M E S TAMP
D ATE 0000-00-00 T I M E S TAMP

ENUM ENUM

A U TO_INCREMENT A U TO_INCREMENT
388
NULL A U TO _
INCREMENT 1 UTO_INCREMENT
UNIQUE PRIMARY KEY NOT NULL
AUTO_INCREMENT
PRIMARY KEY PRIMARY KEY
UNIQUE UNIQUE MySQL 3.23
P R I M A RY KEY UNIQUE INDEX KEY P R I M A RY KEY
UNIQUE INDEX KEY
index_columns tbl_name
CHAR VARCHAR
index_name
MySQL 3.23 NOT NULL MySQL 3.23
PRIMARY KEY NOT NULL
MySQL 3.23 table_options

A U T O_INCREMENT = n A U TO_INCREMENT
MyISAM
AVG_ROW_LENGTH = n MySQL
BLOB TEXT
4GB
CHECKSUM = {0 | 1} 1 MySQL
MyISAM
COMMENT = string 60
DELAY_KEY_WRITE = {0 | 1} 1
MyISAM
MAX_ROWS = n
MIN_ROWS = n

PACK_KEYS = {0 | 1} 1
0
8 CHAR VARCHAR
MyISAM ISAM
PASSWORD = string

TYPE = {ISAM | MYISAM | HEAP} 3


MySQL 3.23
MyISAM MySQL 3.23 CREATE TABLE ISAM
select_statement SELECT
D SQL 389
IGNORE REPLACE

id PRIMARY KEY

HEAP

SELECT
PRIMARY KEY

D.1.6 DELETE

tbl_name where_expr

WHERE
WHERE DELETE WHERE
MySQL
0
WHERE

LOW_PRIORITY LOW_PRIORITY
MySQL 3.22.5
LIMIT n LIMIT MySQL 3.22.7
390
D.1.7 DESCRIBE

SHOW COLUMNS SHOW

D.1.8 DROP DATABASE

IF EXISTS
IF EXISTS IF
EXISTS MySQL 3.22.2

DROP DATABASE

D.1.9 DROP FUNCTION

CREATE FUNCTION

D.1.10 DROP INDEX

tbl_name index_name A LTER TABLE DROP


INDEX ALTER TABLE DROP INDEX MySQL 3.22

D.1.11 DROP TABLE

IF EXISTS IF
EXISTS MySQL 3.22.2

D.1.12 EXPLAIN

SHOW COLUMNS FROM tbl_name


SHOW
EXPLAIN MySQL EXPLAIN
SELECT

EXPLAIN
table
D SQL 391
type MySQL system const
eq_ref ref range ALL MySQL

possible_keys MySQL rows NULL

key MySQL NULL


key_len MySQL

ref MySQL const ???

rows MySQL

extra Only index MySQL


where used SELECT WHERE

D.1.13 FLUSH

FLUSH flush_option [, flush_option] ...


flush_option
HOSTS
LOGS
PRIVILEGES
STATUS
TABLES
FLUSH MySQL 3.22.9 STATUS MySQL 3.22.11

D.1.14 GRANT

GRANT MySQL priv_type

ALTER
CREATE
DELETE
DROP
INDEX
INSERT
REFERENCES
392
SELECT
UPDATE
FILE
PROCESS
RELOAD
SHUTDOWN
ALL ALL PRIVILEGES
USAGE

PROCESS
ON

*.*
*
db_name.*
db_name.tbl_name
tbl_name

ON column_list

TO IDENTIFIED
BY user_name@host_name user_name
host_name localhost IP
% - LIKE
user_name user_name@% MySQL 3.23 host_name
n.n.n.n./m IP / n.n.n.n IP m

IDENTIFIED BY
PASSWORD SET PASSWORD
IDENTIFIED BY
GRANT MySQL 3.22.11
GRANT 11
paul samp_db
user %

menagerie xyz.com

samp_db member
D SQL 393

menagerie

D.1.15 INSERT

tbl_name MySQL 3.22.5


INTO
LOW_PRIORITY LOW_PRIORITY
MySQL 3.22.5
R E L AYED
LAST_INSERT_TO( ) AUTO_INCREMENT
AUTO_INCREMENT DELAYED MySQL 3.22.15
IGNORE
IGNORE IGNORE MySQL 3.22.10
INSERT VALUES( )
column_list VALUES( )
column_list VALUES( )
MySQL 3.22.5
INSERT MySQL 3.23.3 VALUES( )

I N S E RT SELECT tbl_name
SELECT tbl_name column_list

MySQL 3.22.10 INSERT


SET
394
D.1.16 KILL

thread_id
PROCESS
mysqladmin kill ID
KILL ID
MySQL 3.22.9

D.1.17 LOAD DATA

LOAD DATA file_name tbl_name


INSERT
LOW_PRIORITY LOW_PRIORITY
MySQL 3.23

FILE
LOCAL
FILE LOCAL MySQL 3.22.15
LOCAL
file_name
file_name

LOCAL
file_name
file_name
IGNORE REPLACE

i m p o rt_options SELECT ... INTO


OUTFILE import_options

string char
D SQL 395
\0 ASCII 0
\b
\n
\r
\s
\t Tab
\
\
\\

MySQL 3.22.10 LINES


TERMINATED BY 0x02 Ctrl-B ASCII 2
FIELDS TERMINATED BY ENCLOSED BY ESCAPED
BY FIELDS
LINES FIELDS LINE FIELDS
TERMINATED BY
ENCLOSED BY
O P T I O N A L LY ( S E L E C T. . . I N TO OUTFILE),
ENCLOSED BY O P T I O N A L LY
CHAR VARCHAR
ENCLOSED BY
ESCAPED BY
ENCLOSED BY ESCAPED BY
ESCAPED BY
\ \N N \0 ASCII 0

\"
NULL \N \0 ESCAPED BY
ENCLOSED BY
ESCAPED BY ESCAPED BY ' ' \
ESCAPED BY '\\'
LINES TERMINATED BY
FIELDS LINES

FIELDS TERMINATED BY ENCLOSED BY


396
VARCHAR(15) MEDIUMINT(5) 15 5 NULL

IGNORE n LINES n
IGNORE 1 LINES

column_list

Windows
/ \r
\n

Windows
MS-DOS Ctrl-Z

CSV
LOAD DATA

Ctrl-A ASCII 1 Ctrl-B ASCII 2

D.1.18 LOCK TABLES

lock_list LOCK
TABLE LOCK TABLES
lock_list

READ
WRITE
LOW_PRIORITY WRITE

LOCK TABLES
D SQL 397
LOCK TABLES
LOCK TABLES

LOW_PRIORITY MySQL 3.22.5

D.1.19 OPTIMIZE TABLE

DELETE REPLACE U P D ATE


OPTIMIZE TABLE
MySQL 3.22.7
MySQL 3.23 MySQL

D.1.20 REPLACE

REPLACE INSERT INSERT


UNIQUE REPLACE
REPLACE IGNORE

D.1.21 REVOKE

priv_type column_list user GRANT


ON
REVOKE user MySQL

REVOKE MySQL 3.22.11


REVOKE superduper@localhost

member_mgr samp_db member

menagerie
398
D.1.22 SELECT

SELECT select_list

select_options
ALL
DISTINCT
DISTINCTROW
ALL DISTINCT
DISTINCTROW
HIGH_PRIORITY HIGH_PRIORITY
I N S E RT U P D ATE
SELECT HIGH_PRIORITY SELECT
SELECT
HIGH_PRIORITY
MySQL 3.22.9
SQL_BIG_RESULT
SQL_SMALL_RESULT

S Q L _ S M A L L _ R E S U LT MySQL 3.22.12 S Q L _ B I G _ R E S U LT
MySQL 3.23
STRAIGHT_JOIN FROM

select_list
AS alias_name
GROUP BY ORDER BY HAVING WHERE

* FROM tbl_name.*

SELECT INTO ' file_name' OUTFILE


FILE LOAD DATA LOCAL
D SQL 399
export_options LOAD DATA
import_options LOAD DATA
FROM SELECT MySQL
JOIN

WHERE HAVING LIMIT


SELECT
SELECT
JOIN CROSS JOIN INNER JOIN STRAIGHT_JOIN

LEFT JOIN
ON
conditional_expr USING column_list
conditional_expr WHERE column_list
LEFT OUTER JOIN
LEFT JOIN oj ODBC
NATURAL LEFT JOIN LEFT JOIN USING (column_list) column_list

FROM tbl_name alias_name tbl_name AS alias_name


SELECT
WHERE FROM
HAVING LIMIT
GROUP BY column_list select_list
COUNT( ) MAX( )
select_list 1
H AVING WHERE
HAVING WHERE
HAVING WHERE HAVING
WHERE WHERE

ORDER BY GROUP BY
400
ASC DESC MySQL 3.23.2
ORDER BY RAND( )
LIMIT SELECT LIMIT n n LIMIT
m, n m n LIMIT 0 1
PROCEDURE MySQL 3.23
PROCEDURE ANALYSE( )
SELECT 1

1900-01-01

1900-01-01

member

member

D.1.23 SET

SET OPTION MySQL

option_setting
CHARACTER SET {charset_name | DEFAULT}
cp1251_koi8
DEFAULT

INSERT_ID = n INSERT AUTO_INCREMENT

LAST_INSERT_ID = n LAST_INSERT_ID( )
D SQL 401
PASSWORD [FOR user] = PASSWORD(" password " ) FOR
password FOR
mysql user user_name@
host_name GRANT user_name host_name

S Q L _ A U TO _ I S _ N U L L = { 0 | 1 } 1
AUTO_INCREMENT WHERE auto_inc_col IS NULL WHERE
Access ODBC 1
MySQL 3.23.5

SQL_BIG_SELECTS = {0 | 1} 1 max_join_size
SELECT 1

SQL_BIG_TABLES = {0 | 1} 1
SELECT table
full 0
MySQL 3.23

SQL_LOG_OFF = {0 | 1} 1
0
PROCESS

SQL_LOG_UPDATE = {0 | 1}
SQL_LOG_OFF PROCESS
SQL_LOG_UPDATE MySQL 3.22.5

SQL_LOW_PRIORITY_UPDATES = {0 | 1} 1
DELETE INSERT REPLACE UPDATE SELECT
SELECT

SQL_LOW_PRIORITY_UPDATES MySQL 3.22.5

SQL_SELECT_LIMIT = {n | DEFAULT} SELECT


LIMIT
DEFAULT
402

SQL_WARNINGS = {1 | 0} 1 MySQL
I N S E RT 0
SQL_WARNINGS MySQL 3.22.11

TIMESTAMP = {timestamp_value | DEFAULT} TIMESTAMP

SET TIMESTAMP = DEFAULT

D.1.24 SHOW

SHOW
FROM db_name
LIKE pattern
% _ SQL
1. SHOW COLUMNS
SHOW COLUMNS SHOW FIELDS SHOW COLUMNS

SHOW COLUMN
Field
Type
Null NULL YES
Key
Default
Extra
Privileges MYSL 3.23
2. SHOW DATABASES
SHOW DATABASES
D SQL 403
3. SHOW GRANTS
SHOW GRANTS user_name$host_name
GRANT user_name host_name SHOW GRANTS
MySQL 3.23.4

4. SHOW INDEX
SHOW INDEX SHOW KEYS SHOW INDEX

SHOW INDEX
Table
Non_unique 1 0
Key_name
Seq_in_index 1
Column_name
Collation A D NULL

Cardinality --analyze myisamchk


isamchk
Sub_part
NULL
Packed NULL MySQL 3.23

Comment MySQL 3.23


5. SHOW PROCESSLIST
SHOW PROCESSLIST
Id ID
User
Host
db
Command
Time
State SQL MySQL MySQL

Info
6. SHOW STATUS
404
SHOW STATUS
Aborted_clients
Aborted_connects
Connections

Created_tmp_tables
Delayed_errors INSERT DELAYED
Delayed_insert_threads INSERT DELAYED
Delayed_writes INSERT DELAYED
Flush_commands FLUSH
Handler_delete
Handler_read_first
Handler_read_key
Handler_read_next
Handler_read_rnd

Handler_update
Handler_write
Key_blocks_used
Key_read_requests
Key_reads
Key_write_requests
Key_writes
Max_used_connections
Not_flushed_delayed_rows INSERT DELATED
Not_flushed_key_blocks
Open_files
Open_streams
Open_tables
Opened_tables

Questions
Slow_queries long_query_time
Threads_connected
Threads_running
Uptime
7. SHOW TABLE STATUS
SHOW TABLE STATUS SHOW TABLE STATUS
MySQL 3.23
D SQL 405

SHOW TABLE STATUS


Name
Type NISAM ISAM MyISAM HEAP
Row_format Fixed Dynamic
Compressed
Rows
Avg_row_length
Data_length
Max_data_length
Index_length
Data_free
OPTIMIZE TABLE
Auto_increment AUTO_INCREMENT
Create_time
Update_time
Check_time myisamchk
NULL
Create_options CREATE TABLE table_options

Comment
8. SHOW TABLES
SHOW TABLES

9. SHOW VARIABLES
SHOW VARIABLES E
mysqld

D.1.25 UNLOCK TABLES

UNLOCK TABLES
UNLOCK TABLE UNLOCK TABLES

D.1.26 UPDATE
406

tbl_name WHERE
SET

WHERE
U P D ATE

WHERE UPDATE
CLIENT_FOUND_ROWS F
mysql_real_connect( )
LOW_PRIORITY LOW_PRIORITY
MySQL 3.22.5
LIMIT n LIMIT MySQL 3.23.3

D.1.27 USE

db_name
USE

D.2

SQL mysql
mysql

MySQL
#
Perl
/* */
C
MySQL 3.23.3 --

MySQL
value1 - value2 value2
/* C
SQL MySQL
D SQL 407
MySQL MySQL
SQL MySQL
/*! MySQL 3.22.7
MySQL 3.22.26 /*! MySQL
UPDATE
3.23.3

mysql MySQL C
C

mysql mysql>
mysql
'>
\c mysql
E
E MySQL
MySQL

isamchk myisamchk

myisampack pack_isam
mysql MySQL

mysql.server MySQL
mysqlacess
mysqladmin
mysqlbug
mysqld MySQL

mysqldump
mysqlimport
mysqlshow
safe_mysqld MySQL
[]

E.1
MySQL

MySQL
mysqlbug mysql.server safe_mysqld MySQL --help

mysqlimport

? help

-? --help
E MySQL 409
-upaul -u paul -p
-p

E.1.1 MySQL

MySQL

-C, --compress
MySQL 3.22.3
-# debug_options, --debug=debug_options MySQL
debug_options
d:t:o,file_name
file_name
MySQL dbug/dbug.c

--defaults-file=path_name
--defaults-file
MySQL 3.22.23
-?, --
-h host_name, --host=host_name

--on-defaults

- p [p a s s w o rd], --password[= p a s s w o rd]


p a s s w o rd p a s s w o rd

-w, --pipe Windows

-p port_num, --port=port_num
TCP/IP localhost mysqld
TCP/IP
- -p r i n t - d e f a u l t s
--print-defaults
MySQL
--print-defaults
410
-O var-value, --set-variable var=value --set-
variable var
K M
k m K
M --help

-s, --silent silent

-S path_name, --socket=path_name
localhost
-u user_name, --user=user_name
UNIX Windows
ODBC mysqld UNIX
root
- v, --verbose

-V, --version

E.1.2

MySQL 3.22 MySQL


isamchk myisamchk myisampack mysql
mysqladmin mysqld mysqldump mysqlimport mysql.server pack_isam
MySQL share/mysql support-files
my-example.cnf

MySQL
UNIX

/etc/my.cnf
DATADIR/my.cnf
-/.my.cnf

Windows

SYSTEMDIR \my.ini
c:\my.cnf
DATADIR \my.cnf

DATADIR --
E MySQL 411
datadir Windows DATADIR c:\mysql\data SYSTEMDIR Windows
C:\Windows C:\WinNT Windows
\ /
\ \\ \

[mysql] mysql
[mysqlshow] mysqlshow [client]
MySQL [client]
mysql [client] [mysql] mysqlshow [client ]
[mysqlshow]

-c --compress
compress
=

[mysql]

= set-variable
=
#

\b
\n
\r
412
\s
\t Tab
\\

[client]
mysql skip-line-numbers [client]
mysqlimport skip-line-
nembers [mysql]
[client ] MySQL compress debug help host
password pipe port select user version help version

600
400 MySQL

E.1.3

MySQL

MySQL
MYSQL_DEBUG MySQL
MYSQL_DEBUG --debug
MYSQL_PWD MySQL MYSQL_PWD
--password
MYSQL_TCP_PORT , TCP/IP
mysqld TCP/IP M Y S Q L _ T C P _ P O RT --port

MYSQL_UNIX_PORT localhost UNIX


mysqld
MYSQL_UNIX_PORT --socket
TMPDIR --tmpdir
USER MySQL Windows
--user
mysql
MYSQL_HISTFILE
$HOME/.mysql_history $HOME
MYSQL_HOST --
host
E MySQL 413
E.2 isamchk myisamchk

4 13

myisamchk MyISAM .MYD .MYI


ISAM isamchk
ISD ISM

MySQL 13
myisamchk isamchk

E.2.1

tbl_name .ISM .MYI

1 SHOW INDEX
mysqlshow --key key_name myisamchk isamchk

MYSQL_PWD
MYSQL_PWD
PS

E.2.2 isamchk myisamchk

--silent --description --extend-check


myisamchk --check --verbose
--silent --verbose

E.2.3 isamchk myisamchk

isamchk myisamchk
414
-a, --analyze
--description --verbose isamchk myisamchk

-b n, --block-search=n n
-d, --description
-e, --extend-check isamchk
myisamchk
-f, --force
isamchk myisamchk tbl_name.TMD

--force -recover
-i, --information
-k n, --keys-used=n --recover MySQL n
n INSERT DELETE UPDATE
0

-l, --no-symlinks symlink


symlink symlink
-q, --quick --recover --recover

--quick
-r, --recover

-o, --safe-recover --recover --recover

-S, --sort-index
-R n, --sort-recoerds=n n

-u, --unpack myisamchk myisamchk


MyISAM isamchk pack_isam ISAM

- w, --wait --wait
10

E.2.4 myisamchk

isamchk myisamchk
E MySQL 415
-c, --check
-D n, --data-file-length=n
MySQL

-recover --safe-
recover
-F, --fast
-m, --medium-check
myisamchk 99.99%
medium CRC
CRC
-T, --read-only
-A [n], --set-auto-increment[=n] AUTO_INCREMENT n
n AUTO_INCREMENT
A U TO_INCREMENT

-t path_name, --tmpdir=path_name
TMPDIR /tmp

E.2.5 isamchk myisamchk

isamchk myisamchk --set-variable


key_buffer_size
read_buffer_size
write_buffer_size
sort_buffer_size --recover
--safe-recover
sort_key_blocks B-
decode_bits

E.3 myisampack pack_isam

myisampack pack_isam 40%


70% myisampack MyISAM pack_isam
ISAM BLOB TEXT
myisampack pack_isam MySQL 10

MySQL
MySQL
MySQL
416
myisamchk --
unpack MyISAM isamchk --unpack ISAM
myisampack pack_isam
myisampack myisampack -rq pack_isam isamchk -rq

E.3.1

tbl_name MyISAM .MYI


ISAM .ISM

E.3.2 muisampack pack_isam

E.3.3 myisampack pack_isam

-b, --backup myisampack pack_isam tbl_name tbl_name


tbl_name.OLD
-f, - -f o r c e
myisampack pack_isam
t b l _ n a m e. T M D

--force

-j join_tbl, --join=join_tbl join_tbl

-t, --test

-T path_name, --tmpdir=path_name
- w, --wait

E.3.4 pack_isam

myisampack pack_isam -p n, --packlength=n


pack_isam n n 1 3
pack_isam
pack_isam
E MySQL 417
pack_isam --packlength

E.4 mysql

mysql
mysql

mysql mysql>
mysql ;
/g mysql

mysql
mysql>
->
'>
">
'> ">

\c
mysql
$HOME/.mysql_history M Y S Q L _ H I S TO RY

Windows

,Ctrl-P
,Ctrl-N
,Ctrl-B
,Ctrl-F
Escape Ctrl-B
Escape Ctrl-F
Ctrl-A
Ctrl-E
Ctrl-D
Delete
Escape D
Escape
Ctrl-K
Ctrl_

mysql --batch --html


--quick
418
E.4.1

db_name
db_name mysql
USE db_name

E.4.2 mysql

--silent --verbose

E.4.3 mysql

-B, --batch mysql

--skip-column-names
-T, --debug-info
-e, query, --execute=query

-f, --force mysql


mysql
-H, --html HTML MySQL 3.22.26
-i, --ignore-space

-A, --no-auto-rehash mysql


Tab
mysql
mysql mysql
mysql> rehash
-o, --one-database
mysql

-q, --quick mysql

mysql
E MySQL 419
-r, --raw --batch
-N, --skip-column-names --
silent
-L, --skip-line-numbers
-t, --table
-n, --unbuffered
-E, --vertical row line

\G \g

MySQL 3.22.5
-w, --wait

E.4.4 mysql

mysql --set-variable
max_allowed_packet
n e t _ b u ffer_length
max_allowed_packet

E.4.5 mysql

mysql SQL

c l e a r, \c
mysql
connect [db_name [host_name]], \r [db_name [host_name]]
mysql
edit, \e EDITOR VISUAL vi

ego, \G MySQL
3.22.11
exit quit
go, \g, ;
help, \h, ? mysql
print, \p
quit, \q mysql
rehash, \# --no-auto-
420
rehash
stauts, \s

use db_name, \u db_name

E.5 mysql.server

mysql.server safe_mysqld mysqld

mysql.server System V /etc


start stop

E.6 mysqlaccess

mysql user db host mysqlaccess


mysql
mysqlaccess

E.6.1

E.6.2 mysqlaccess

--host --password --user --version

E.6.3 mysqlaccess

-b, --brief
--commit mysql mysqladmin flush-
privileges
--copy
-d db_name, --db=db_name
--debug=n n 0 3
--howto mysqlaccess
--old_server MySQL 3.21 mysqlaccess

--plan mysqlaccess
E MySQL 421
--preview
--relnotes mysqlaccess
-H host_name, --rhost=host_name
--rollback
-P password, --spassword=password MySQL

-U user_name, --superuser=user_name MySQL


-t, --table

E.7 mysqladmin

mysqladmin MySQL
mysqladmin

E.7.1

E.7.2 mysqladmin

mysqladmin --silent mysqladmin

E.7.3 mysqladmin

-f, --force mysqladmin db_name


mysqladmin
mysqladmin
--relative --sleep
extended-status
-i n, --sleep=n n
-t n, --timeout= n n MySQL
3.22.1
-w [ n], --wait[=n] n
1

E.7.4 mysqladmin

processlist process proc p


SQL SQL
D
422
create db_name
SQL CREATE DATABASE db_name
drop db_name
--force mysqlamin

SQL DROP DATABASE db_name


extended-status
SQL SHOW STATUS
extended-status MySQL 3.22.10
flush-hosts
SQL FLUSH HOSTS
flush-logs
SQL FLUSH LOGS
flush-privileges
SQL FLUSH PRIVILEGES
flush-status
SQL FLUSH STATUS
flush-tables
SQL FLUSH TABLES
kill id,id, ... ID
kill
mysqladmin processlist
ID SQL KILL
password new_password mysqladmin MySQL
n e w _ p a s s w o rd MySQL

SQL SET PASSWORD


password MySQL 3.22
ping MySQL
processlist
SQL SHOW PROCESSLIST
refresh
reload
SQL FLUSH PRIVILEGES
shutdown
status
variables
SQL SHOW VARIABLES
version
E MySQL 423
E.8 mysqlbug

MySQL 2

mysqlbug MySQL MySQL


mysqlbug MySQL

mysqlbug

mysqlbug

DELETE FROM tbl_name

MySQL
http://www.mysql.com/doc.html

mysqlbug [address]
MySQL
mysqlbug

E.9 mysqld

mysqld MySQL
mysqld
mysqld

E.9.1

E.9.2 mysqld

--socket -S -Sg

--user
424
ID ID
root --user
root ID MySQL 3.22

E.9.3 mysqld

-b path_name, --basedir=path_name MySQL

--big-tables
table full
MySQL 3.23
--bind-address=ip_addr IP mysql
IP
--bootstrap MySQL
--chroot=path_name MySQL
chroot()-ed chroot() UNIX
MySQL 3.22.2
-h path_name, --datadir=path_name MySQL
- - d e f a u l t - t a b l e - t y p e =t y p e type isam myisam
heap MyISAM
MySQL 3.23
--enable-locking Linux
--skip-locking MySQL 3.22.4
-T [n], --exit-info[=n] MySQL 3.22
--init-file=file_name SQL
-L, --language=lang_name lang_name
english german
-l [path_name], --log[=path_name]
path_name host_name.log
host_name path_name

--log-isam[=file_name] ISAM/MyISAM
--log-long-format MySQL 3.22.7
--log-update[=path_name]
path_name host_name.nnn
host_name nnn 1
path_name nnn

path_name
E MySQL 425
--low-priority-updates MySQL 3.23
MySQL 3.22.5 MySQL 3.23 --low-priority-inserts
-n, --new MySQL

-o, --old-protocol MySQL 3.21 /

--one-thread Linux
MySQL 3.22.2
--pid-file=path_name mysql ID PID
PID
mysql.server
--safe-mode --skip-new MySQL

mysqlbug
-Sg, --skip-grant-tables
mysqladmin flush-privileges

--skip-host-cache
--skip-locking
isamchk myisamchk
--skip-name-resolve IP
localhost
--skip-networking TCP/IP localhost
--skip-new --new
--skip-show-database SHOW DATABASES
SHOW TABLES MySQL 3.23
--skip-thread-priority

- t p a t h _ n a m e, --tmpdir= p a t h _ n a m e
MySQL 3.22.4
Windows
--console MySQL 3.22.4
--flush
MySQL 3.22.9
--install mysqld-nt Windows NT
--remove mysqld-nt Windows NT
--standalone mysqld-nt Windows NT

E.9.4 mysqld

mysql
426
mysqld

SHOW VARIABLES --set-variable


mysqld
back_log
connect_timeout mysql
delayed_insert_timeout INSERT DELAYED
I N S E RT DELAYED

delayed_insert_limit INSERT DELAYED


SELECT

delayed_queue_size INSERT DELAYED


INSERT DELAYED
flush_time flush_time
Windows 30 --flush
join_buffer_size
MySQL 3.23 join_buffer
key_buffer_size
MySQL 3.23 key_buffer
long_query_time
Slow_queries
max_allowed_packet
n e t _ b u ffer_length
max_allowed_packet
max_connections
max_connect_errors
FLUSH HOST mysqladmin
flush-host
max_delayed_insert_threads INSERT DELAYED

DELAYED
max_join_size MySQL max_
join_size SELECT

max_sort_length max_sort_length BLOB TEXT

n e t _ b u ffer_length
E MySQL 427
max_allowed_packet
record_buffer
sort_buffer GROUP BY ORDER BY

1MB
table_cache
tmp_table_size mysqld

thread_stack
wait_timeout

E.10 mysqldump

mysqldump

C R E ATE TABLE
INSERT --tab
SQL

E.10.1

mysqldump [options] db_name [tbl_name] ...

db_name

mysqldump
% mysqldump --opt db_name > backup_file

E.10.2 mysqldump

E.10.3 mysqldump

mysqldump --tab

--add-drop-table CREATE TABLE DROP TABLE IF EXISTS


--add-locks INSERT LOCK TABLE UNLOCK
TABLE
--allow-keywords
-c, --complete-insert INSERT
--delayed-insert INSERT DELAYED
-e, --extended-insert INSERT
428
-F, --flush-logs
-f, --force
--full mysqldump CREATE TABLE
AUTO_ INCREMENT CREATE TABLE table_options
D
-l, --lock-tables
-t, --no-create-info CREATE TABLE
-d, --no-data
--opt
-add-drop-table --add-locks --all --extended-insert --quick --lock-tables
-q, --quick mysqldump

mysqldump
-T dump_dir, --tab= dump_dir mysqldump
dump_dir tbl_name dump_dir/table_
name.txt dump_dir/table_name.sql CREATE
TABLE FILE
mysqldump
*.sql dump_dir
*.txt dump_dir *.sql
*.txt
newline-terminated

-w where_clause, --where=where_clause where_clause WHERE

MySQL 3.22.7

E.10.4

--tab -T
LOAD DATA
D LOAD DATA
--fields-enclosed-by=char

--field-escaped-by=char
- - f i e l d s - o p t i o n a l l y - e n c l o s e d - b y =c h a r

--fields-terminated-by=char

--lines-terminated-by=str
E MySQL 429
E.10.5 mysqldump

mysqldump --set-variables
max_allowed_packet
n e t _ b u ffer_length
max_allowed_packet

E.11 mysqlimport

mysqlimport
LOAD DATA SQL

E.11.1

db_name

mysqlimport president.txt president

E.11.2 mysqlimport

E.11.3 mysqlimport

mysqlimport

-d, --delete
-f, --force
-i, --ignore

-L, --local mysqlimport


FILE --local mysqlimport
FILE mysqlimport

--local MySQL3.22.15
-l, --lock-tables
-r, --replace

E.11.4

mysqlimport
430
LOAD DATA D LOAD DATA
--fields-enclosed-by=char

--fields-escaped-by=char
--fields-optionally-enclosed-by=char
--fields-terminated-by=char
--lines-terminated-by=str

E.12 mysqlshow

mysqlshow SHOW
SQL

E.12.1

mysqlshow

mysqlshow
*
* LINK % _ SQL

E.12.2 mysqlshow

E.12.3 musqlshow

-i, --status SHOW TABLE STATUS


--status MySQL 3.23
-k, --keys

E.13 safe_mysqld

safe_mysqld mysql safe_mysqld

safe_mysqld mysql
F C API
MySQL C API
MySQL

F.1

mysql.h
#include <mysql.h>

-I/path/to/include/dir
MySQL /usr/include/mysql /usr/local/mysql/include

MySQL mysql.h
mysql_com.h mysql_com.h mysql.h
mysql.h
errmsg.h mysqld_error.h
mysqlclient
-lmysqlclient -L/path/to/lib/die

F.2 C API

MySQL

F.2.1

MySQL
my_ulonglong m y s q l _ a ff e c t e d _ r o w s ( )
mysql_num_rows() mysql_insert_id()
my_ulonglong unsigned long
%lu
my_bool mysql_change_user() mysql_eof()
432
MYSQL_FIELD_OFFSET mysql_field_tell() mysql_field_seek()
MYSQL_FIELD

F.2.2

MySQL MYSQL MYSQL_RES


MYSQL_
ROW MYSQL_FIELD

MYSQL MYSQL
MYSQL

MYSQL_RES SELECT SHOW


MYSQL_RES
API

MYSQL_ROW MYSQL_ROW
counted byte
NULL CNULL MYSQL_ROW
mysql_num_fields() i-th row[i] i
0 mysql_num_fields(res_set)-1(res_set MYSQL_RES )
MYSQL_ROW
MYSQL_ROW row; /* */

MYSQL_ROW *row; /* */

MYSQL_ROW terminating null

mysql_fetch_lengths()

NULL mysql_fetch_lengths()
MYSQL_FIELD MYSQL_FIELD
MYSQL_FIELD mysql_num_fields()
mysql_ num_field_() mysql_field_tell() mysql_field_
seek()
MYSQL_FIELD
F C API 433

MYSQL_FIELD
name name
name
my_col 4*(my_col+1) mc name

table table
(my_col) my_tbl
(my_col+0)

def MYSQL_FIELD mysql_list_


fields() NULL DESCRIBE tbl_name
SHOW FIELDS FROM tbl_name
type
my_col VARCHAR(20) type FIELD_TYPE_VAR_STRING
LENGTH(my_col) type FIELD_TYPE_LONGLONG
type mysql_com.h F-1

F-1 MYSQL_FIELD type

type

FIELD_TYPE_BLOB BLOB TEXT


FIELD_TYPE_DATE DATE
FIELD_TYPE_DATETIME DATETIME
FIELD_TYPE_DECIMAL DECIMAL NUMERIC
FIELD_TYPE_DOUBLE DOUBLE REAL
FIELD_TYPE_ENUM ENUM
FIELD_TYPE_FLOAT FOLAT
FIELD_TYPE_INT24 MEDIUMINT
FIELD_TYPE_LONG INT
FIELD_TYPE_LONGLONG BIGINT
FIELD_TYPE_NULL NULL
FIELD_TYPE_SET SET
FIELD_TYPE_SHORT SMALLINT
FIELD_TYPE_STRING CHAR
FIELD_TYPE_TIME TIME
FIELD_TYPE_TIMESTAMP TIMESTAMP
FIELD_TYPE_TINY TINYINT
FIELD_TYPE_VAR_STRING VARCHAR
FIELD_TYPE_YEAR YEAR
434
FIELD_TYPE_CHAR
FIELD_TYPE_TINY
length CREATE TABLE

max_length
Bill Jack Belviders max_length 9
max_length mysql_store_result()
mysql_use_result() max_length 0
flags flags flags
F-2 UNSIGNED
flags
if (field -> flags & UNSIGNED_FLAG)
printf ( %s values are UNSIGNED \n , field -> name);

F-2 MYSQL_FIELD flags

flag

AUTO_INCREMENT_FLAG AUTO_INCREMENT
BINARY_FLAG BINARY
MULTIPLE_KEY_FLAG NON-UNIQUE
NOT_NULL_FLAG NULL
PRI_KEY_FLAG PRIMARY KEY
UNIQUE_KEY_FLAG UNIQUE
UNSIGNED_FLAG UNSIGNED
ZEROFILL_FLAG ZEROFILL

flags field-
>type F-3

F-3 MYSQL_FIELD flags

flags

BLOB_FLAG BLOB
ENUM_FLAG ENUM
SET_FLAG SET
TIMESTAMP_FLAG TIMESTAMP

decimals decimals DECIMAL 8,3


decimals 3 BLOB 0

F.2.3

mysql.h MYSQL_FIELD IS_NUM()


type flags
IS_NUM()
F C API 435

IS_PRI_KEY()

NULL IS_NOT_NULL()

BLOB TEXT IS_BLOB() flags


BLOB_FLAG IS_BLOB()

F.3 C API

conn MYSQL
res_set MYSQL_RES
field MYSQL_FIELD
row MYSQL_ROW

MySQL 3.21.10

F.3.1

my_bool

conn
436
db_name NULL
mysql_change_user()

mysql_change_user() MySQL .23.3


void

conn
mysql_init() mysql_close()
mysql_close()
MYSQL *

conn MYSQL
mysql_init()

conn NULL mysql_init()

mysql_init() NULL mysql_init()

mysql_init() mysql_close()
mysql_init() MySQL 3.22.1
int

mysql_real_connect()
mysql_init() mysql_real_connect()
mysql_options
option arg
arg arg NULL

MYSQL_INIT_COMMAND arg
mysql_ping()

MYSQL_OPT_COMPRESS /
arg NULL
mysql_real_connect()
MYSQL_OPT_CONNECT_TIMEOUT arg
F C API 437
unsigned int
MYSQL_OPT_NAMED_PIPE arg NULL
Windows 95/98/NT Windows NT
MYSQL_READ_DEFAULT_FILE
[client]
MYSQL_READ_DEFAULT_GROUP MYSQL_
READ_DEFAULT_FILE [client]

mysql_options() mysql_real_connect()

mysql_options() option
[client] MYSQL_READ_DEFAULT_GROUP

mysql_options() 10
mysql_real_connect() c:\my.cnf.special [client] [mygroup]
SET SQL_BIG_TABLES

mysql_options() MySQL 3.22.1


MYSQL_INIT_COMMAND M Y S Q L _ R E A D _ D E FA U LT_FILE MYSQL_READ_
DEFAULT_GROUP MySQL 3.22.10
int
438
conn mysql_ping()
mysql_real_connect()
mysql_ping()
mysql_ping() MySQL3.22.1
MYSQL *

conn
mysql_init()
NULL
conn mysql_errno() mysql_error()
conn

host_name F-4 UNIX Windows


host_name UNIX
socket_name

F-4

UNIX Windows

TCP/IP TCP/IP
IP TCP/IP TCP/IP
localhost UNIX TCP/IP

NULL UNIX Windows NT TCP/IP


TCP/IP

user_name MySQL NULL


UNIX Winodws USER
ODBC
password NULL user

db_name NULL
port_num TCP/IP 0
socket_name NULL

host_name
mysql_real_connect() UNIX UNIX Wi n d o w s
F C API 439
TCP/IP
flags 0 F-5

F-5 mysql_real_connect() flags

flag

CLIENT_FOUND_ROWS UPDATE
CLIENT_NO_SCHEMA db_name.tbl_name.col_name
CLIENT_COMPRESS
CLIENT_ODBC ODBC

CLIENT_NO_SCHEMA tbl_name.col_name
tbl_name col_name
flag | + CLIENT_COMPRESS|
CLIENT_ODBC CLIENT_COMPRESS+CLIENT_ODBC
mysql_real_connect() MySQL 3.21.10 db_name 3.22.0
MYSQL mysql_init() 3.22.1

F.3.2

unsigned int

0 MySQL errmsg.h mysqld_error.h

mysql_errno() MySQL 3.21.7


char

NULL
mysql_error()

mysql_error() MySQL 3.21.7

F.3.3

mysql_escape_string()
440
unsigned int

SQL F-6

F-6 mysql_escape_string()

NUL ASCII 0 \0
\\
\
\
\n
\r
Ctrl-Z \Z

from_str from_len
mysql_escape_string() to_str
to_str from_len*2 +1
from_str
mysql_escape_string()
strlen() strcat()

C
mysql_escape_string()

to_str mysql_escape_string()

int
mysql_query (MYSQL *conn, char *query_string);

mysql_query()
mysql_query()
mysql_real_query mysql_query()
SQL \g \g
mysql
mysql_query()
F C API 441
int

mysql_real_query()
query_string length
SQL \g \g
mysql
mysql_real_query()

int

dn_name
mysql_select_db()
mysql_select_db()

F.3.4

mysql_store_
result() mysql_use_result()
F-7

F-7 mysql_store_result() mysql_use_result()


mysql_store_result() mysql_use_result()
mysql_store_result() mysql_use_result()
mysql_fetch_row()

mysql_fetch_row() NULL mysql_fetch_row() NULL

mysql_num_rows() mysql_store_result() mysql_num_rows()

mysql_affected_rows() mysql_num_ rows() mysql_affected_rows()

mysql_data_ seek()
mysql_row_seek() mysql_ row_tell() mysql_data_seek() mysql_
row_seek() mysql_row_tell()
mysql_fetch_row(), mysql_fetch_row()

MYSQL_FIELD max_length max_length


442
my_ulonglong

DELETE INSERT REPLACE UPDATE


mysql_affected_row() mysql_query()
mysql_num_rows()
mysql_use_result()
mysql_affected_rows()
m y s q l _ a ffected_rows() DELETE I N S E RT
REPLACE UPDATE -1
mysql_affected_ rows()
mysql_affected_rows()

U P D AT E m y s q l _ a ff e c t e d _
rows() MySQL
return-found-rows flags
CLIENT_FOUND_ROWS mysql_real_connect()
my_ulonglong
void

offset 0 mysql_num_rows(res_set)-1 offset

mysql_data_seek() mysql_store_
result() mysql_use_result()
MYSQL_FIELD*

mysql_fetch_field()
NULL
mysql_field_tell() mysql_field_seek()
mysql_fetch_field()
MYSQL_FIELD
F C API 443
MYSQL_FIELD *

mysql_fetch_field()

MYSQL_FIELD *

field_num 0
mysql_num_fields() - 1 field_num
MYSQL_FIELD

mysql_fetch_field_direct() MySQL 3.23


unsigned long *

unsigned long
mysql_fetch_row() mysql_fetch_lengths()
NULL 0 NULL

NULL NULL

mysql_fetch_lengths() MySQL 3.20.5 MySQL 3.22.7


444
mysql_fetch_lengths() unsigned int
MYSQL_ROW

NULL NULL
i-th i-th

atoi() atof()
mysql_fetch_row() NULL mysql_use_result()
mysql_fetch_row() NULL

mysql_fetch_lengths()
NULL

MYSQL_FIELD
mysql_fetch_field() mysql_fields() mysql_fetch_field_direct()
unsigned int

mysql_store_result()
mysql_use_result() NULL mysql_field_count()
0

mysql_field_count()
F C API 445

mysql_field_count() MySQL 3.22.24 mysql_numfields()


MySQL mysql_field_count()

MySQL mysql_field_count()
mysql_num_fields()
MYSQL_FIELD_OFFSET

offset mysql_fetch_field()
o ff s e t MYSQL_FIELD_OFFSET mysql_field_tell()
mysql_field_seek()
0 offset
MYSQL_FIELD_OFFSET

mysql_field_seek()
void

mysql_free_result()
mysql_store_result() mysql_use_result()
mysql_list_dbs() mysql_list_
fields() mysql_list_processes() mysql_list_tables()
char*
446

mysql_info() NULL I N S E RT INTO ...


VALUES mysql_info() NULL
mysql_info()

my_ulonglong

AUTO_INCREMENT
AUTO_INCREMENT
mysql_insert_id()
mysql_insert_id()
AUTO_INCREMENT 1
AUTO_INCREMENT
0
mysql_insert_id()
mysql_insert_id() SQL L A S T _ I N S E RT_ID() mysql_
insert_id() LAST_INSERT_ID()

mysql_insert_id() AUOT_INVREMENT

F.2.1 my_ulonglong
unsigned int

mysql_num_rows()
F C API 447
MySQL 3.22.24 mysql_num_fields() mysql_field_count()
mysql_store_result() mysql_use_result() NULL
mysql_num_fields()
mysql_num_fileds()
mysql_num_fields()
mysql_field_count()
MySQL
my_ulonglong

mysql_store_result()
mysql_num_rows()

mysql_use_result() mysql_num_rows()

my_ulonglong
MYSQL_ROW_OFFSET

mysql_row_seek() mysql_data_seek() o ffset


offset mysql_row_tell() mysql_row_seek()
mysql_row_seek()
mysql_row_seek()
mysql_store_result() mysql_use_result()
MYSQL_ROW_OFFSET

mysql_row_
seek() mysql_data_seek()
mysql_row_tell() mysql_store_result
() mysql_use_result()
MYSQL_RES *
448
NULL mysql_store_result() NULL mysql_field_coun()

mysql_free_result()
F-7 mysql_store_result() mysql_use_result()
MYSQL_RES*

mysql_fetch_row()
NULL mysql_use_result() NULL mysql_field_count()

mysql_free_result()
F-7 mysql_store_result() mysql_use_result()
mysql_store_result() mysql_use_result()

F.3.5

char *

3.22.25
char *

Loaclhost via UNIX socket your.host.


com via TCP/IP
unsigned int

/
char *

3.22.25-log
-log -debug -demo

char *

NULL
F C API 449
Uptime
Threads
questions
Slow queries long_query_time
Opens
Flush tables FLUSH REFRESH RELOAD
Open tables
mysql_stat() mysqladmin status
mysqladmin
unsigned long
mysql_thread_id (MRSQL*Conn);

mysql_kill()
mysql_thread_id()

mysql_ping()

F.3.6

int

thread_id
PROCESS
mysql_kill()
int

SQL FLUSH
oprions F 8
F-8 mysql_refresh()

REFRESH_GRANT
REFRESH_LOG
REFRESH_TABLES
REFRESH_HOSTS
REFRESH_STATUS

F-8 | + REFRESH_
LOG| REFRESH_TABLES REFRESH_LOG+REFRESH_TABLES
D FLUSH
mysql_refresh()
int
450
SHUTDOWN
mysql_shutdown()

F.3.7

MySQL
MySQL --with-debug
void

debug_string DBUG_PUSH MySQL


mysql_debug()
int

PROCESS
mysql_dump_debug_info()

F.3.8

MySQL
mysql_query()
mysql_create_db( db_name )
mysql_query (conn, CREATE DATABASE db_name )

mysql_connect() mysql_eof()

MySQL SQL
SQL FLUSH PRIVILEGES mysql_reload()
MySQL
MySQL

MySQL 4.0
MYSQL *

mysql_real_connect() mysql_real_connect()

MySQL 3.22.0
int

db_name mysql_query()
F C API 451
CREATE DATABASE
mysql_create_db()
MySQL 3.21.15
int

db_name mysql_query() DROP


DATABASE
mysql_drop_db()
MySQL 3.21.15
my_bool

musql_use_result() mysql_fetch_row() mysql_eof()


mysql_use_result() mysql_fetch_row() NULL
mysql_eof()
mysql_errno() mysql_error()

MySQL 3.21.7
MYSQL_RES *

NULL wild
SQL % _ wild NULL
mysql_free()
mysql_list_dbs() mysql_query() SHOW DATABASE

MySQL 3.22.0
MYSQL_RES *

NULL wild
SQL % _ wild NULL
mysql_free()
mysql_list_field() mysql_query() SHOW COLUMNS

MySQL 3.22.0
MYSQL_RES *

NULL
PROCESS
mysql_free()
452
mysql_list_processes() mysql_query() SHOW PROCESSLIST

MySQL 3.22.0
MYSQL_RES *

NULL wild
SQL % _ wild NULL
mysql_free()
mysql_list_table() mysql_query() SHOW TABLES

MySQL 3.22.0
int

mysql_query() FLUSH
PRIVILEGES RELOAD mysql_reload().
mysql_reload()
MySQL 3.21.9
G Perl DBI API
Perl DBI API Perl
DBD::mysql MySQL
DBI MySQL
DBI MySQL
MySQL
DBD
DBI MySQL DBD

Perl DBI API


7

G.1

DBI Perl
use DBI;
DBD use DBI

DBI connect( ) disconnect( )


SELECT do( )
SELECT prepare( ) execute( )
fetchrow_array( ) fetchrow_hashref( ) ,

G.2 DBI

F C H PHP

Perl
$ @
\
_ref
G-1
attr
454
%attr

G-1 Perl DBI

$drh
$dbh
$sth
$fh
$h
$rc
$rv
$rows
@ary

[] DBI->
DBI DBI:: DBI $DBI:: DBI
$dbh-> $sth->
$h->

selectrow_array( ) $dbh->
$statement attr
\ @bind_values

RaiseError
RaiseError
SELECT SELECT
DESCRIBE EXPLAIN SHOW

G.2.1 DBI

attr MySQL
PrintError RaiseError DBI
RaiseError

PrintError RaiseError
@ary = DBI->available_drivers ([$quiet]);
DBI
$quiet 1
G Perl DBI API 455
$dbh = DBI->connect ($data_source, $user_name, $password, [, \ attr]);
connect()
undef conncet() disconnect()
connect() @attr DBI
DBI:mysql
DBI mysql
DBD::mysql

db_name database=db_name host_name host=host_name

attribute=value
MySQL
host=host_name host_name:port_num
port=port_num
mysql_compression=1 MySQL
mysql_compression MySQL 3.22.3 DBD::mysql
1.19.20
m y s q l _ r e a d _ d e f a u l t _ f i l e =f i l e _ n a m e DBI
MySQL

.my.cnf
$ E N V { H O M E } / . m y. c n f

mysql_read_default_file MySQL 3.22.10 DBD::mysql


1.21.06
m y s q l _ r e a d _ d e f a u l t _ g r o u p =g ro u p _ n a m e
[client] [client] mysql_read_default_group
mysql_read_default_group=dbi [dbi] [client]
E
mysql_read_default_group MySQL 3.22.10
DBD::mysql 1.21.06
mysql_socket=socket_name
localhost UNIX
mysql_socket MySQL 3.21.15 DBI

DBI_DSN
456
DBI_DRIVER
connect() user_name password DBI_USER
DBI_PASS
D B I _ PASS
ps
DBI
localhost UNIX
Windows ODBC
$drh = DBI->install_driver ($driver_name);
DBD MySQL
mysql ( ) connect()
DBI func()
install_driver() MySQL

G.2.2

connect()

attr MySQL
PrintError RaiseError DBI
RaiseError

PrintError RaiseError
$rc = $dbh->disconnect( );

$rows = $dbh->do ($statement [, \ attr [, @bind_values]]);


$statement
-1 undef 0 0E0
0
DELETE INSERT REPLACE UPDATE do()
SELECT
? @bind_values
@bind_values
undef \ attr
$rc = $dbh->ping();

$sth = $dbh->prepare ($statement [, \ attr]);


$statement
execute( )
G Perl DBI API 457
$str = $dbh->quote ($value [, $data_type]);
SQL
I\ m happy I m happy
$value undef NULL
$data_type MySQL
$data_type DBI::SQL_
INTEGER $value
quote() DBI
$ary_ref = $dbh->selectall_arrayref ($statement [, \ attr [,

$statement prepare() execute() fetchall_arrayref()


undef
$statement prepare()
@bind_values do()
@ary_ref = $dbh->selectcol_arrayref ($statement [, \ attr [,

$statement prepare() execute()


undef
$statement prepare()
@bind_values do()
@row_ary = $dbh->selectrow_array ($statement [, \ attr [,

$statement prepare() execute() fetchall_arrayref()

$statement prepare()
selectrow_array()
selectrow_array()
undef
@bind_values do()

G.2.3

prepare()
$rc = $sth->bind_col ($col_num, \$var_to_bind);
SELECT Perl $col_num 1

bind_col() execute() prepare()


1 bind_col()
$rc = $sth->bind_columns (\$var_to_bind1, \$var_to_bind2, ...);
SELECT bind_col()
458
bind_columns()
$rv = $sth->bind_param ($n, $value [, \ attr]);
$rv = $sth->bind_ param ($n, $value [, $bind_type]);
? execute() prepare()

$n $value 1
NULL undef
\%attr $bind_type
bind_param()

VARCHAR MySQL

$rows = $sth->dump_results ([$maxlen [, $line_sep [, $field_sep [, $fh]]]]);


$sth DBI::neat_list()

$maxlen $line_sep $field_sep $fh 35 \n , STDOUT


$rv = $sth->execute ([@bind_values]);
undef
@bind_values do()
ary_ref = $sth->fetch();
fetch() fetchrow_arrayref()
$tbl_ary_ref = $sth->fetchall_arrayref ([$slice_array_ref]);
$tbl_ary_ref = $sth->fetchall_arrayref ([$slice_hash_ref]);

$sth

$tbl_ary_ref
$tbl_ary_ref
@ary_ref = $sth->fetchrow_array()
fetchrow_array()
fetchrow_array()
fetchrow_array()
fetchrow_array() undef
$sth->err()

@ary_ref = $sth->fetchrow_arrayref()

undef
$sth->err()
G Perl DBI API 459
$hash_ref = $sth->fetchrow_hashref ([$name]);
undef

$name NAME

NAME_lc NAME_uc $name


$sth->err()

$rc = $sth->finish();

finish() DBI finish()


execute()
$rv = $sth->rows();
$sth -1
SELECT rows( )

G.2.4

$h->err()
0
$h->errstr()

DBI->trace ($trace_level [, $trace_filename]);


$h->trace ($trace_level [, $trace_filename]);

DBI 0 9
DBI DBI

DBI->trace (2);
$sth->trace (2);

DBI_TRACE DBI
STDERR. $filename

STDERR
DBI->trace_msg ($str [, $min_level])
$h->trace_msg ($str [, $min_level])
DBI
DBI trace_msg() DBI->trace_msg()
460
$min_level

G.2.5 MySQL

DBI func()

func()
func()
func()

$drh = DBI->install_driver( mysql ); #( mysql must be lowercase)


createdb $db_name C R E AT

dropdb $db_name DROP

shutdown SHUTDOWN
reload DELETE INSERT UPDATE
GRANT REVOKE
reload RELOAD

G.3 DBI

DBI::func_name() DBI->func_name()
@bool = DBI::looks_like_number (@array);

undef
$str = DBI::neat ($value [, $maxlen]);
$value
undef .

$maxlen $maxlen $maxlen


G Perl DBI API 461
4 $maxlen 0 undef $DBI::neat_maxlen
(400)
neat( ) quote( )
$str = DBI::neat_list (\@listref [, $maxlen [, $field_sep]]);
neat( ) $field_sep

$maxlen neat( )
$field_sep

G.4 DBI

DBI
PrintError RaiseError

err errstr

G.4.1

attr
connect( ) DBI
$h->{ ChopBlanks }; CHAR
ChopBlanks MySQL
CHAR
$h->{ PrintError }; DBI
PrintError
$h->{ RaiseError }; DBI
RaiseError

G.4.2

$h
$DBI::err $h->err( )
$$DBI::errstr $h->errstr( )
$DBI::rows $h->rows( )

G.4.3 MySQL

DBI MySQL DBD::mysql


$str = $dbh->{ info }; C API mysql_info( )
F
$rv = $dbh->{ mysql_insertid }; AUTO_INCREMENT $dbh

$rv = $dbh->{ thread_id }; $dbh


462
G.4.4

SELECT prepare()
execute() finish()

$sth->{ NUM_OF_FIELDS } s t m t _ a t tr @{$sth-


>{stmt_attr}}

$sth->{ NAME };
SELECT
$sth->{ NAME_lc };

$sth->{ NAME_uc };

$sth->{ NULLABLE }; NULL


0 1 2 DBI NULL

$sth->{ NUM_OF_FIELDS }; SELECT


0
$sth->{ NUM_OF_PARAMS};
$sth->{ PRECISION }; DBI ODBC
MySQL

$sth->{ SCALE }; DBI ODBC


MySQL 0
$sth->{ Statement }; $sth
prepare()
$sth->{ TYPE };

G.4.5 MySQL

execute()
mysql_store_result mysql_use_result DBD::mysql
mysql_store_result mysql_use_result C API
mysql_store_result() mysql_use_result()
F
DBI mysql_store_result() mysql_use_result
G Perl DBI API 463
DBI mysql_use_result( ) prepare( ) execute( )

DBD::mysql MySQL
G-2 DBD::mysql

insertid mysql_insertid
G-2 MySQL

insertid mysql_insertid
is_blob mysql_is_blob
is_key mysql_ is_key
is_not_null mysql_ is_not_null
is_num mysql_ is_num
is_pri_ key mysql_ is_pri_ key
length PRECISION
max_length mysql_ max_length
table mysql_ table

$sth->{ mysql_is_blob }; BLOB


$sth->{ mysql_is_key };
$sth->{ mysql_is_not_null }; NULL
NULL NULLABLE

$sth->{ mysql_is_ num };


$sth->{ mysql_is_pri_key }; PRIMARY KEY

$sth->{ mysql_ max_length };

$sth->{ m y s q l _ s t o re _ re s u l t }; mysql_store_result 1
mysql_store_result C API mysql_store_result MySQL
F
mysql_store_result prepare( ) execute( )

$sth->{ mysql_table };

$sth->{ mysql_type }; MySQL


$sth->{ mysql_type_name }; MySQL

$sth->{ m y s q l _ u s e _ re s u l t }; mysql_use_result 1
464
mysql_use_result C API mysql_use_result MySQL
F
mysql_max_length
rows( )
mysql_use_result prepare( ) execute( )

G.5 DBI

DBI G-3 DBI_TRACE


connect( ) DBI_TRACE trace( )

G-3 DBI

DBI_DRIVER DBI MySQL mysql


DBI_DSN
DBI_PASS
DBI_TRACE /
DBI_USER
H PHP API
MySQL PHP API API MySQL

PHP API
8 MySQL
PHP 800 600
PHP PHP PHP Web

H.1 PHP

PHP HTML PHP


Web HTML PHP

PHP HTML PHP


PHP PHP
PHP
php3.ini /usr/local/lib
PHP
<?php ?>

<? ?>

PHP

< >

ASP PHP

ASP PHP 3.0.4


HTML <SCRIPT> </SCRIPT>

H.2

MySQL PHP []
466
link_id MySQL

result_id mysql_db_query( ) mysql_query( )

Web
@
mysql_pconnect()

error_reporting()

MySQL Connected
successfully
PHP
SELECT SELECT
DESCRIBE EXPLAIN SHOW

H.2.1

MySQL
int

link_id MySQL mysql_close()


mysql_close()
mysql_pconnect() mysql_close()
mysql_connect() mysql_pconnect()

int
H PHP API 467
host_name user_name MySQL

PHP 3.0B4 host_name: port_num


PHP 3.0.10 localhost
l o c a l h o s t :s o c k e t _ n a m e UNIX

localhost
PHP Web PHP Apache
PHP PHP

mysql_connect()
mysql_connect()
mysql_close()

int

mysql_pconnect() mysql_connect()

mysql_pconnect(),

PHP Web
PHP PHP
mysql_close() mysql_close() ,

H.2.2

mysql_errno() mysql_error() MySQL PHP

mysql_errno() mysql_error()
468
MySQL PHP
track_errors

PHP Apache Web


$php_errormsg

int

MySQL

string

MySQL

H.2.3

MySQL
int

mysql_db_query( )
mysql_query( ) mysql_query( )
H PHP API 469

int

mysql_tablename( )

int

db_name tbl_name
mysql_field_flags( ) mysql_field_len( ) mysql_field_name( ) mysql_
field_type()

int
470

mysql_tablename( )

int

MySQL DELETE I N S E RT
REPLACE UDATE mysql_query( )
mysql_affected_rows( )
SELECT mysql_query( )
result_id
mysql_free_result( )

mysql_query( ) mysql_connect( )
mysql_query( )

H.2.4
H PHP API 471
int

DELETE INSERT REPLACE UPDATE


mysql_affected_rows() 0 -1
SELECT mysql_affected_rows() SELECT
mysql_num_rows()

int

SELECT
mysql_fetch_array( ) mysql_fetch_object( ) mysql_fetch_row( )
mysql_data_seek( ) 0
mysql_num_rows( ) - 1 mysql_data_seek( )

array
472

$row
$row[0] last_name
$row[1] first_name
$row[ last_name ] last_name
$row[ first_name ] first_name

result_type MYSQL_ASSOC MYSQL_NUM


MYSQL_BOTH result_type
MYSQL_BOTH

object

col_num mysql_fetch_field( )
col_num 0 mysql_num_fields( ) - 1
mysql_num_fields( ) col_num
H-1
H PHP API 473

H-1 mysql_fetch_field( )

blob BLOB 1 0
max_length
multiple_key 1 0
name
not_null NULL 1 0
numeric 1 0
primary_key PRIMARY KEY 1 0
table
type
unique_key UNIQUE 1 0
unsigned UNSIGNED 1 0
zerofill ZEROFILL 1 0

array

mysql_fetch_array() mysql_fetch_object()
mysql_fetch_row( )
474

object

result_type MYSQL_ASSOC MYSQL_NUM


MYSQL_BOTH result_type
MYSQL_BOTH MYSQL_NUM

array

0 mysql_num_fields( ) - 1
H PHP API 475

string

int

mysql_fetch_field ( ) mysql_fetch_field( )
col_num
col_num 0 mysql_num_fields( ) - 1
476

string

col_num 0 mysql_num_fields( ) - 1

string

B
col_num 0 mysql_num_fields( ) - 1
H PHP API 477

string

H-2
col_num 0 mysql_num_fields( ) - 1

H-2 mysql_field_flags( )

auto_increment AUTO_INCREMENT
binary BINARY
blob BLOB
enum ENUM
multiple_key
not_null NULL
primary_key PRIMARY_KEY
timestamp TIMESTAMP
unique_key UNIQUE
unsigned UNSIGNED
zerofill ZEROFILL

int
478
col_num 0 mysql_num_fields( )-1
0

int

mysql_query( ) mysql_free_result( )

int

A U TO_INCREMENT
mysql_
insert_id () mysql_
insert_id () 0
mysql_insert_id () SQL L A S T _ I N S E RT_ID()
mysql_insert_id () L A S T _ I N S E RT_ID()
H PHP API 479
mysql_insert_id () A U TO_INCREMENT

int

int

int

field

mysql_fetch_array( ) mysql_fetch_object( ) mysql_fetch_


row( )
480

string

mysql_list_dbs( ) mysql_list_tables( )
row_num
0 mysql_num_rows( )-1

H.2.5

int
link_id MySQL
CREATE
mysql_query( ) mysql_create_db( ) CREATE DATABASE

int
H PHP API 481
link_id MySQL
DROP

mysql_query( ) mysql_drop_db( ) DROP DATABASE

int

mysql_select_db( )
mysql_connect( )
mysql_select_db( )

You might also like