当前位置:   article > 正文

mysql语法元素_MySQL语法语句大全

.....:0 8 . .... ...x..@....duu.8 h . d 去d .

一、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 @

在这里,可以用通配符_代表任何一个字符,%代表任何字符串。使用关键字、和可以生成复杂的词,它们运行检查时使用布尔表达式的多重标准集。  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的知识

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号