您的位置:首页 > 数据库 > MySQL

MySQL语法语句大全

2010-02-11 22:50 405 查看

MySQL语法语句大全

一、SQL速成

; B/ X* Q; t/ W) v" ]结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如表、索引、字段等)的建立和操纵。 5 O+ D# e7 n9 B2 z2 \. t' w

以下是一些重要的SQL快速参考,有关SQL的语法和在标准SQL上增加的特性,请查询MySQL手册。

- e, B* @$ V9 x- @ L1.创建表 6 [, S) p* \; Q8 z, \

表是数据库的最基本元素之一,表与表之间可以相互独立,也可以相互关联。创建表的基本语法如下: 知识管理频道! U3 v7 G6 g9 T3 Q2 a5 A0 f

create table table_name 知识管理频道$ \* G8 a! X1 s5 f6 \9 D: c, |

(column_name data无效 {identity |null|not null}, oa.headware.cn- D: `4 h8 `" h8 L* T5 _4 Y2 w

…)

3 J9 w' k, ]. w- r& S其中参数table_name和column_name必须满足用户数据库中的识别器(identifier)的要求,参数data无效是一个标准的SQL类型或由用户数据库提供的类型。用户要使用non-null从句为各字段输入数据。

. ]; J$ a4 N% j' _% Ecreate table还有一些其他选项,如创建临时表和使用select子句从其他的表中读取某些字段组成新表等。还有,在创建表是可用PRIMARY KEY、KEY、INDEX等标识符设定某些字段为主键或索引等。

/ E! @2 S7 s2 I# w- a书写上要注意: + ]$ K% d, m& R4 y, w! P7 O

在一对圆括号里的列出完整的字段清单。 $ q: Z0 o4 V- T

字段名间用逗号隔开。

/ f9 {7 h+ C! a7 [* |: G7 T3 Z字段名间的逗号后要加一个空格。 : ^; j9 n4 D7 Z3 ?! _8 j

最后一个字段名后不用逗号。 4 {' Y9 t- G& z. |* O* j' v* f

所有的SQL陈述都以分号";"结束。 / E* h( K( r5 W" R/ w* i1 u) M

例:

% h( r) H v$ X9 Tmysql> Create TABLE test (blob_col BLOB, index(blob_col(10))); oa.headware.cn4 G& \3 o5 U; H

oa.headware.cn0 X3 p/ O y: |& f# t

2.创建索引 ) B/ D% z' c0 r1 h( k5 }1 B% X* K

索引用于对数据库的查询。一般数据库建有多种索引方案,每种方案都精于某一特定的查询类。索引可以加速对数据库的查询过程。创建索引的基本语法如下: oa.headware.cn0 a1 K$ ^7 }. y. p" F7 E7 p

create index index_name

6 [$ F# d$ S: E9 Xon table_name (col_name[(length)],... )

. r% S V) @2 I7 u4 C* ~知识管理频道例:

. H7 ^4 `5 a Vmysql> Create INDEX part_of_name ON customer (name(10)); 8 S. I5 b0 f& p* Q

, F- G% z" Q; Goa.headware.cn3.改变表结构

# x$ D3 i7 h+ P4 p( d/ G, Y' z在数据库的使用过程中,有时需要改变它的表结构,包括改变字段名,甚至改变不同数据库字段间的关系。可以实现上述改变的命令是alter,其基本语法如下: % \. ?! V! ^) I# w! e# k. S

alter table table_name alter_spec [, alter_spec ...]

, J- d1 H' i# ^) @ j例:

: @1 n' J& j% A" v9 F6 ~0 o1 Eoa.headware.cnmysql> Alter TABLE t1 CHANGE a b INTEGER;

" G% N" q% S$ B% f, u' x) Y知识管理频道

! W L$ _% i9 s; ^4.删除数据对象

6 x3 B0 W* ]3 O8 _知识管理频道很多数据库是动态使用的,有时可能需要删除某个表或索引。大多数数据库对象可以下面的命令删除: * i3 G; W8 T8 u5 F6 g) b0 m/ f) V

drop object_name

) e0 S7 x0 m2 ~: p' dmysql> Drop TABLE tb1; 知识管理频道; v0 v6 S; }* |

& Q' i9 W- n2 p" }8 Y L% B知识管理频道5.执行查询

6 A4 b6 \- m* soa.headware.cn查询是使用最多的SQL命令。查询数据库需要凭借结构、索引和字段类型等因素。大多数数据库含有一个优化器(optimizer),把用户的查询语句转换成可选的形式,以提高查询效率。

3 u* c. ]- |8 j. A值得注意的是MySQL不支持SQL92标准的嵌套的where子句,即它只支持一个where子句。其基本语法如下: * t# ~, ?& m' q' X

Select [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] ) B) Y9 J( m( Z9 e. t X) m% o5 P1 g

[DISTINCT | DISTINCTROW | ALL]

& [7 C9 p7 {! O7 a- bselect_e xpression,...

% e9 O/ b: K, y" Koa.headware.cn[INTO {OUTFILE | DUMPFILE} ’file_name’ export_options]

5 X: a+ O8 D+ j7 i- @oa.headware.cn[FROM table_references

% ~0 S& u1 H. t3 |$ z, m8 y][Where where_definition] 8 ]4 f8 c3 U/ W' a' f) f

[GROUP BY col_name,...] oa.headware.cn7 D V r6 C$ \2 G* G Y; E- C

[HAVING where_definition]

a* b" e& \" f# H0 `/ {7 X4 Y% B知识管理频道[ORDER BY {unsigned_integer | col_name | formula} ][ASC | DESC] ,...]

u9 Q5 l. E3 u/ k& k[LIMIT ][offset,] rows]

( t } ?1 I( u[PROCEDURE procedure_name] ]

1 K9 u$ }* J5 B( }3 L+ Y( Q其中where从句是定义选择标准的地方,where_definition可以有不同的格式,但都遵循下面的形式: oa.headware.cn5 L+ S5 X5 c. A1 W2 u( F* U8 b

字段名操作表达式 2 w' W5 Y; F% g' y

字段名操作字段名

5 [. V, U: ^8 d在第一种形式下,标准把字段的值与表达式进行比较;在第二种形式下,把两个字段的值进行比较。根据所比较的数据类型,search_condition中的操作可能选以下几种:

7 }+ Q' C/ {( S, Y4 n6 x7 }= 检查是否相等 # O$ _* K- m$ S4 h

!= 检查是否不等 3 g9 ^; n- {1 ^2 }2 y

知识管理频道- {/ \; Y8 G# ?

> (或>=) 检查左边值是否大于(或大于等于)右边值 . I3 d, L1 r Y% e+ [( T

< (或<=) 检查左边值是否小于(或小于等于)右边值

: N2 U! _ K; w! l[not] between 检查左边值是否在某个范围内 oa.headware.cn% {! I6 M' o- c9 v6 j. Q3 p

[not] in 检查左边是否某个特定集的成员 4 l' g& ?. f: q3 h( {' L- K- t& a

[not] like 检查左边是否为右边的子串 - r+ P$ ^! ~; K$ p. J

is [not] null 检查左边是否为空值 - R- N( x# \1 ^8 {2 @

在这里,可以用通配符_代表任何一个字符,%代表任何字符串。使用关键字<AND>、<OR>和<NOT>可以生成复杂的词,它们运行检查时使用布尔表达式的多重标准集。 6 O, R- i+ G$ ^% q8 [9 g

例: . f+ x3 G8 U7 I( v

mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name;

* b. }* Z0 k' Y7 H0 amysql> select college, region, seed from tournament ! K3 Y0 u9 o, V. g# t5 \

orDER BY region, seed; 知识管理频道1 }! A) a) a5 |% T; n

mysql> select col_name from tbl_name Where col_name > 0; " a, f( ~# D( H3 q, n

0 N0 Z8 g. C# C$ I0 B

6.修改表中数据 3 G- K |7 I( r7 Q4 a$ |/ x* ?

在使用数据库过程中,往往要修改其表中的数据,比如往表中添加新数据,删除表中原有数据,或对表中原有数据进行更改。它们的基本语法如下: % X+ e N( h; f- G2 z

数据添加: " M9 k$ H8 l, F' y% [: D

insert [into] table_name [(column(s))]

& k; u( h3 _1 B, C# P2 vvalues (e xpression(s)) 8 S2 ^6 ?5 _8 K9 H5 o

例:

" Z! U9 X" k: w# W' Y8 p知识管理频道mysql> Insert INTO tbl_name (col1,col2) VALUES(15,col1*2);

. V N" @1 D6 n4 D0 y/ l9 Z- o+ b/ l3 Voa.headware.cn数据删除: % u2 F, z$ N( F3 i8 s( g8 `

删除 from table_name where search_condition

: o6 ` p" O; V$ b) D( M! R数据更改: 6 t$ d4 t' q4 d/ C; Q% Z

更新 table_name 2 y" _: B9 v1 s( o0 k9 u {/ S

set column1=e xpression1, oa.headware.cn/ h: D8 v/ X% e+ B( L

column2=e xpression2,…

+ d! c! N% M7 X0 ] r. f p" }where search_condition 7 ^( B1 V# v& R# _

知识管理频道& D; \' [6 }$ a, N- D

7.数据库切换 知识管理频道+ K f4 u0 [# \" a& o% k

当存在多个数据库时,可以用下面的命令定义用户想使用的数据库:

! B" f6 E) ~% C9 Z% tuse database_name ) x, S6 `6 _- s6 `0 G9 m/ \

知识管理频道4 n |. \/ @+ H& p+ d" |$ c. r

8.统计函数 4 m5 X8 m. D9 Y3 {: J9 L% S, `+ }

SQL有一些统计函数,它们对于生成数据表格很有帮助。下面介绍几个常用的统计函数: & D- A0 B9 m& Q- L" [3 f" x: `

sum (exepression) 计算表达式的和

F1 j: O6 h4 c7 cavg (exepression) 计算表达式的平均值

) ?2 U! x/ z b# ^6 |& tcount (exepression) 对表达式进行简单的计数 # G5 Y9 n. E( V# R; d

count (*) 统计记录数 & y. S% g7 X( \

max (exepression) 求最大值 oa.headware.cn6 c+ E7 f6 V$ L* ]* q( W8 i$ U- I

min (exepression) 求最小值

; v+ V% k! ]( N知识管理频道其中exepression为任何有效的SQL表达式,它可以是一个或多个记录,也可以是别的SQL函数的组合。 / ]9 G' Y4 v O# W

oa.headware.cn0 y# j- j8 U" ~8 J% z

二、MySQL使用导引 2 {8 K3 b. ]' h0 U& ~9 X

1.运用MySQL建立新数据库 ; f5 r* f0 v: ]/ \

在shell下运行:

8 A( @3 s' g V3 x% M8 ~3 x, t$>mysqladmin create database01 + \8 e- y; G1 R

Database "database01" created. $ {2 o* ?5 ^( j) R0 J5 e

2 T* z. L$ ?% `# K G2.启动MySQL 0 T* E/ L$ @9 z* S" N. B

在shell下运行: - G) a. Y; E5 @2 z; w1 c, W- `3 D

$>mysql

( A8 y4 U+ |* U* eWelcome to the MySQL monitor. Commands end with ; or g. oa.headware.cn- I, z. } s- h

Your MySQL connection id is 22 to server version: 3.21. 29a-gamma-debug $ j; x$ v y3 F9 B& o" s

无效 ’help’ for help. : Y/ S) T, u( l: ?

3 h8 E/ o1 M+ D5 i3.更换数据库

$ Z$ W! O4 P4 e& N, l2 ymysql>use database01 oa.headware.cn4 X- q; v9 e z) V2 [2 Q! n

database changed. oa.headware.cn n) B! ^# J+ Z" f

% C- {: J4 i4 Z4 Q" W知识管理频道4.创建表 8 B, ? j* s/ Z1 l6 |; v

mysql>create table table01 (field01 integer, field02 char(10)); oa.headware.cn. |; c/ r5 y: c. O: k! @/ q

Query OK, 0 rows affected (0.00 sec) i, C2 Q b |) G

' V* N2 T$ U: T( o8 {5 m/ w1 U4 V

5.列出表清单 1 J o9 ?+ T6 k" _( R

mysql>show tables; & }' Y: {# F- m: r# |

Tables in database01

K: X; G4 g7 E* K/ s6 s2 ETable01 ) A- `' y0 `5 P4 G/ l% Q4 s

table02 oa.headware.cn7 L4 F( }3 ^; A

: Y2 B, Q0 g+ _2 t' Voa.headware.cn6.列出表中的字段清单 知识管理频道4 E4 s& G7 B' [5 m

mysql>show columns from table01; * E0 {9 V5 S3 G; {& X# y

Field 无效 Null Key Default Extra

( [% S# G9 H, u. b- v9 ? r/ xfield01 int(11) YES

: `7 v* v x, K$ `8 Q知识管理频道field02 char(10) YES 2 @2 j1 J- M+ \

# x' `# U. ]: D& O7.表的数据填写

( r3 h( ^: f2 L- y: P! a3 b. roa.headware.cn插入数据

- n0 |+ Z9 n& O# `7 I) }# a知识管理频道mysql>insert into table01 (field01, field02) values (1, ’first’);

; K& e( A) ?- } o+ Y6 U知识管理频道Query OK, 1 row affected (0.00 sec)

( v# c( p* U( d% k2 P: i9 h" W2 a

8 w4 }1 ?0 S; K6 b* B8 x% roa.headware.cn8.字段的增加

( _" y" L) o$ \+ m知识管理频道...一次一个字段 , h2 n- ^+ _! e8 O

mysql>alter table table01 add column field03 char(20);

! O4 Z1 C9 {. E* [* T) FQuery OK, l row affected (0.04 sec)

9 O5 }5 S9 Z$ M知识管理频道Records: 1 Duplicates: 0 Warnings: 0

- d: ~; S% b( }& \5 x...一次多个字段

' w! p0 a- q( l- q知识管理频道mysql>alter table table01 add column field04 date, add column field05 time; ; G/ ?8 L+ g- l1 P* p+ }! o1 h

Query OK, l row affected (0.04 sec)

* {7 b7 p0 C9 N; p% y& tRecords: 1 Duplicates: 0 Warnings: 0

2 @, r" k6 B' D% k7 S) \oa.headware.cn注意:每一列都必须以"add column"重新开始。 5 ^8 F! }' C% M- Y2 l! n4 x8 |

它运行了吗?让我们看看。

* w0 l- K O% J( O" Z/ Cmysql>select * from table01;

1 { @; ?& }0 r; P0 Afield01 field02 field03 field04 field05 oa.headware.cn5 i3 [6 R; ~5 Y( c! G

1 first NULL NULL NULL

$ P4 X J: o- B9 R知识管理频道1 a$ ^+ E! P' s0 S# t

9.多行命令输入 oa.headware.cn9 u9 q! T+ \: k3 P* P( Y: z

MySQL命令行界面允许把陈述作为一行输入,也可以把它展开为多行输入。这两者之间并没有语法上的区别。使用多行输入,你可以将SQL陈述一步步分解,从而使你更容易理解。

4 X2 I. j! ]. b( U: r- q/ k1 ]6 Q知识管理频道在多行方式下,注释器把每一行都添加到前面的行后,直到你用分号";"来结束这个SQL陈述。一旦键入分号并按回车键,这个陈述即被执行。

* D3 {1 A) q$ O. h' ^! E! Z. O下面的例子是同一个严格的SQL陈述的两种输入方法: 知识管理频道5 M5 G, z$ s" V8 Z9 ?1 U2 {' x

单行输入

# b8 U$ s3 i% B' a4 X) ~: y知识管理频道Mysql>create table table33 (field01 integer, field02 char(30));

' q4 w' @/ @3 E$ woa.headware.cn多行输入 " c% \7 d+ f+ l8 M* g

Mysql>create table table33

4 T, O0 C) b. g1 r- Z1 Y1 L( p->(field01 ( k) |7 Z# h* `% K' z, _" G6 P2 g

->integer,

5 I9 Q- b9 x _) @) v+ M6 g6 Zoa.headware.cn->field02 oa.headware.cn3 b, O) w( N2 Z2 [

->char(30)); 8 F$ r2 K1 a5 F. x2 g, A! N

注意不能将单词断开,如: - I0 ^% _: J* A* |: W

正确 oa.headware.cn2 |$ z- E# z1 I+ D2 e) w# p. F. O& N! ^

mysql>create table table33

* M( J) U- `8 h% D->( field01 知识管理频道; b3 @5 l8 r7 ^ h

->integer, oa.headware.cn* r- k: U4 G1 c) _$ \# c0 C

->field02

1 h1 G; V) J- p c->char(30));

3 @* [2 |+ ?# k5 ?* H+ t$ b8 G1 q错误

! i/ c# { I# @/ roa.headware.cnmysql>create table table33 3 ?: L/ T/ ~# t- v0 `. L4 w5 T1 k

->( field01 inte

Q3 n; {6 X$ d+ R7 {知识管理频道->ger, 9 o$ R3 ?2 I# n1 e9 Q! e1 r" u% m$ ~

->field02 6 u, Q- R! d7 P) N

->char(30)); oa.headware.cn2 q, j0 X! q. I0 P: _1 i

当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中:

( N8 e0 r1 N1 a3 I( [标准操作

M" ~! O( g* W, h% hmysql>insert into table33 (field02) oa.headware.cn3 Z" Z4 f/ p a9 j( S

->values

* p4 u G& q2 r1 n5 r->(’who thought of foo?’);

, w, I1 _, k! R$ l2 N) `8 @硬回车储存到数据中

/ B ^& u( H) W7 e" P6 o4 o. Wmysql>insert into table33 (field02) 知识管理频道 |! _( ?7 I% f8 x8 |5 ^# f, T: U

->values oa.headware.cn3 m; N; h4 X, k7 f1 y% k7 t

->(’who thought oa.headware.cn+ Z& b- i) s$ s" e4 |

->of foo?’); 0 p, ?$ V2 D5 h/ ?" x

结果如下: * ~2 \6 S$ p* X& Q, y

mysql>select * from table33;

" i! I9 g5 w5 W知识管理频道field01 field02

5 _/ ?& J. }" y0 C; H6 I( H+ Goa.headware.cnNULL who thought of foo? % [9 R2 b" d0 y( J2 u

NULL who thought 知识管理频道9 z- q8 m. e6 \% L' S: J# \7 v

Of foo?

' `+ Z2 ^8 R _ u/ z$ V% Ioa.headware.cn

* I- P1 Q k, c% c& `10.表的数据嵌入 知识管理频道 n- r! n6 _! C ~! A

mysql>insert into table01 (field01, field02, field03, field04, field05) values

6 h# ^$ V" V* S7 C+ }->(2, ’second’, ’another’, ’1999-10-23’, ’10:30:00’);

9 f1 w/ a/ o) qQuery OK, 1 row affected (0.00 sec) 0 y5 N: Z! [6 t3 w$ w

标准日期格式是"yyyy-mm-dd"。

! T" {2 q# g# V! K7 r2 a N2 s知识管理频道标准时间格式是"hh:mm:ss"。 + w# b1 k( L1 ], c/ o% G3 ~: h

引号内要求所给的是上述的标准日期和时间格式。

+ R) g4 |. s" i) U& u9 Hoa.headware.cn日期也可以"yyyymmdd"形式,时间也可以"hhmmss"形式输入,但其值不需要再加引号。 9 K* X- |8 k8 T: P* F& w* b

数字值不需要加引号。这种保存与数据类型无关,这些数据类型都有格式化的专栏来包含(例如:文本,日期,时间,整数等)。

2 D# ?% A& R3 X' KMySQL有一个很有用的命令缓冲区。它保存着你目前已经键入的SQL语句利用它,对于相同的命令,你就不必一遍又一遍地重复输入。下一步我们就来看这样的一个例子。 e- ?9 w/ m# `& v

利用命令缓冲区(及任意的日期和时间格式)增加另一个数据

% e& V. A: A. ]$ s8 Y9 S. f按两次键盘上的向上箭头键。 / x! I; N+ [( I c8 ^, ^

回车。 7 x3 J( Y% f' n

在圆括号内输入新的值,并以分号结尾。 W9 ]% B. j2 Z5 V& F3 q

(3, ’a third’, ’more’, 19991024, 103004); / H2 |6 f# ?1 Y: j" q

回车。

' U, y, {: h$ Q3 x. T新值存在里面了吗? 7 u& D4 N9 T) a5 Y9 a

mysql>select * from table01;

, f, y* K8 d" X+ nfield01 field02 field03 field04 field05 ) ?- D0 u3 @. N3 I

1 first NULL NULL NULL 1 F- y4 k6 P/ f: k M4 U

2 second another 1999-10-23 10:30:00

" B; E4 @! M+ S0 y知识管理频道3 a third more 1999-10-24 10:30:04 % H6 |: s& c9 k. H0 r: R+ y

( D9 R a+ w% [6 K/ a7 ?oa.headware.cn11.表的数据更新

$ N0 u" l3 {) ]+ ?/ a' V& koa.headware.cn一次修改一个字段 oa.headware.cn( e( ?4 D+ S& u( _. J0 Z/ b; v

再次注意语法。文本需要加引号但数字不要。

: E: Y0 L: k" D# ~mysql>更新 table01 set field03=’new info’ where field01=1; oa.headware.cn- [: q( S% ]9 d

Query OK, 1 row affected (0.00 sec)

3 y n2 c: z( m( F$ J) ~, B& P知识管理频道一次改变多个字段 知识管理频道6 }2 w* k$ a6 B6 N7 M; D( M7 j

记住在每一个更新的字段间用逗号隔开。

% w# m# d- }/ W; S9 p# p% e知识管理频道mysql>更新 table01 set field04=19991022, field05=062218 where field01=1; 知识管理频道 N7 b- A: g3 P! Y' k

Query OK, 1 row affected (0.00 sec) ; E! w# ~; Q, x H7 w0 \. n

一次更新多个数据 4 P" n. J8 I% M4 t# c. \

mysql>更新 table01 set field05=152901 where field04>19990101; " b. f& p6 u1 {3 O# L4 x4 |

Query OK, 3 rows affected (0.00 sec) $ ?, I, i5 X% u6 }( F

oa.headware.cn' p9 m4 o( _3 }- N2 k8 L

12.删除数据 oa.headware.cn! S3 k' j. M! O( [: s* H* G! c

mysql>删除 from table01 where field01=3;

, i. s" J/ Q6 }& O; sQuery OK, 1 row affected (0.00 sec) $ b* |+ U# m3 [# l) _! Q" V

# s( f7 M4 q: f, o

13.退出 $ p1 K7 u) `( I' R

mysql>quit - K- d3 O: q; n: j- L4 g

Bye ( v3 @, q h/ `$ v1 D/ I/ L& D

现在你已经了解了一些运行MySQL中的数据库的根本命令。由于MySQL是通过执行SQL调用来操作的,在你的处理过程中需要一个强有力工具的充足的数组。例如,通过联接相关的字段,你可以同时显示几个表中的数据。同样,SQL允许综合显示、更新或者删除多个符合具体标准的数据。如果你还想精通掌握它,下一步就要学习所有SQL的知识

本文出自 “人间烟火” 博客,请务必保留此出处http://frankzhao.blog.51cto.com/273790/276124
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: