小兔网

1.先我们先来说一下单引号和反引号,如图,这里的   '图书ID'   就使用到了单引号,而 CREATE TABLE `book`  这里的  book  就使用到了反引号,那么他们具体的有什么区别呢?

 

MySQL语法中的引号(反引号``,单引号'',双引号

 

2.单引号:我们在例子中的条件值周围使用的是单引号。SQL 使用单引号来环绕文本值。如果是数值,请不要使用引号。按照别的说法来说就是Varchar类型(也可以说是String、字符串类型)这一些在数据库语句中使用的时候应该使用单引号,而不是直接使用。而对于数值类型的,反而是不能使用单引号。如图所示有正确的和错误的使用方法:

 

MySQL语法中的引号(反引号``,单引号'',双引号

MySQL语法中的引号(反引号``,单引号'',双引号

 

3.反引号:它是为了区分MYSQL的保留字与普通字符而引入的符号。注意划重点:有MYSQL保留字作为字段的,必须加上反引号来区分!!!所谓的保留字就是select database insert 这一类数据库的sql指令,当我们不得已要拿他们来做表名和字段名的时候 我们必须要加反引号来避免编译器把这部分认为是保留字而产生错误。当然,在上面的例子中,book并不是保留字,这么加反引号只是作一个保险,这也是一个良好的sql建表习惯。务必要记住:保留字既不能作为表名,也不能作为字段名,如果非要这么操作,请记住要增加反引号!

MySQL语法中的引号(反引号``,单引号'',双引号

4.双引号的用法和单引号有所类似,大多数数据库都支持单引号和双引号的互换,即varchar类型的变量既可以用单引号来囊括,也可以用双引号。当然了,一边单引号,一边双引号是不被允许的。


在MySQL语句中我们有时候经常会看到反引号(``),刚开始的时候不知道什么意思,我们写sql语句的时候,不加反引号也可以执行成功啊,那么,反引号到底起什么作用?

例:

Select * from `member` order by posts desc limit 0,10;

它是为了区分MYSQL的保留字与普通字符而引入的符号。

举个例子:

SELECT `select` from `test` WHERE `select`='字段值';

在test表中,有个select字段,如果不用反引号,MYSQL将把select视为保留字而导致出错,所以,有MYSQL保留字作为字段的,必须加上反引号来区分。

引号一般用在字段的值,如果字段值是字符或字符串,则要加引号,如:select='字段值'

不加反引号建的表不能包含MYSQL保留字,否则出错

反引号`,数字1左边的符号。

保留字不能用于表名,比如desc,此时需要加入反引号来区别,但使用表名时可忽略反引号。

create table desc;//报错create table `desc`;//成功create table `test`;//成功drop table `test`;//成功

保留字不能用于字段名,比如desc,此时也需要加入反引号,并且insert等使用时也要加上反引号。

create table `test`(`desc` varchar(255));//成功 insert into test(desc) values('fxf');//失败insert into test(`desc`) values('fxf');//成功

mysql常见的保留字 使用mysql时一定要注意,不要使用它的保留字作为表名或者列名,否则会出现莫名其妙的错误。 昨天建了一个表,其中一列名为interval(时间间隔),结果数据死都插不进去,最后才发现原来interval是mysql的保留字。 以后出现类似的错误要先想想是不是因为表名或列名冲突造成的啊。 从网上找了一个mysql的保留字列表,仅供参考。

第一列第二列第三列
ADDALLALTER
ANALYZEANDAS
ASCASENSITIVEBEFORE
BETWEENBIGINTBINARY
BLOBBOTHBY
CALLCASCADECASE
CHANGECHARCHARACTER
CHECKCOLLATECOLUMN
CONDITIONCONNECTIONCONSTRAINT
CONTINUECONVERTCREATE
CROSSCURRENT_DATECURRENT_TIME
CURRENT_TIMESTAMPCURRENT_USERCURSOR
DATABASEDATABASESDAY_HOUR
DAY_MICROSECONDDAY_MINUTEDAY_SECOND
DECDECIMALDECLARE
DEFAULTDELAYEDDELETE
DESCDESCRIBEDETERMINISTIC
DISTINCTDISTINCTROWDIV
DOUBLEDROPDUAL
EACHELSEELSEIF
ENCLOSEDESCAPEDEXISTS
EXITEXPLAINFALSE
FETCHFLOATFLOAT4
FLOAT8FORFORCE
FOREIGNFROMFULLTEXT
GOTOGRANTGROUP
HAVINGHIGH_PRIORITYHOUR_MICROSECOND
HOUR_MINUTEHOUR_SECONDIF
IGNOREININDEX
INFILEINNERINOUT
INSENSITIVEINSERTINT
INT1INT2INT3
INT4INT8INTEGER
INTERVALINTOIS
ITERATEJOINKEY
KEYSKILLLABEL
LEADINGLEAVELEFT
LIKELIMITLINEAR
LINESLOADLOCALTIME
LOCALTIMESTAMPLOCKLONG
LONGBLOBLONGTEXTLOOP
LOW_PRIORITYMATCHMEDIUMBLOB
MEDIUMINTMEDIUMTEXTMIDDLEINT
MINUTE_MICROSECONDMINUTE_SECONDMOD
MODIFIESNATURALNOT
NO_WRITE_TO_BINLOGNULLNUMERIC
ONOPTIMIZEOPTION
OPTIONALLYORORDER
OUTOUTEROUTFILE
PRECISIONPRIMARYPROCEDURE
PURGERAID0RANGE
READREADSREAL
REFERENCESREGEXPRELEASE
RENAMEREPEATREPLACE
REQUIRERESTRICTRETURN
REVOKERIGHTRLIKE
SCHEMASCHEMASSECOND_MICROSECOND
SELECTSENSITIVESEPARATOR
SETSHOWSMALLINT
SPATIALSPECIFICSQL
SQLEXCEPTIONSQLSTATESQLWARNING
SQL_BIG_RESULTSQL_CALC_FOUND_ROWSSQL_SMALL_RESULT
SSLSTARTINGSTRAIGHT_JOIN
TABLETERMINATEDTHEN
TINYBLOBTINYINTTINYTEXT
TOTRAILINGTRIGGER
TRUEUNDOUNION
UNIQUEUNLOCKUNSIGNED
UPDATEUSAGEUSE
USINGUTC_DATEUTC_TIME
UTC_TIMESTAMPVALUESVARBINARY
VARCHARVARCHARACTERVARYING
WHENWHEREWHILE
WITHWRITEX509
XORYEAR_MONTHZEROFILL

注:MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。如:ACTION、BIT、DATE、ENUM、NO、TEXT、TIME、TIMESTAMP 所以为了安全起见可以在表名和字段名上都加上``。