MySQL 保留字关键字 列表
如何使用MySQL进行全文搜索和关键词过滤

如何使用MySQL进行全文搜索和关键词过滤在当前信息爆炸的时代,全文搜索和关键词过滤成为了数据处理领域中不可或缺的一部分。
而MySQL作为一款广泛使用的关系型数据库管理系统,它的全文搜索和关键词过滤功能也备受人们的关注。
本文将为你介绍如何使用MySQL进行全文搜索和关键词过滤。
一、全文搜索的概念和应用场景全文搜索是指根据关键词在文本中的出现频率和位置等特征,对文本内容进行相关性排序的一种技术。
全文搜索广泛应用于网站搜索、电商平台商品搜索、社交媒体数据分析等场景。
在MySQL中,全文搜索功能是通过MySQL的全文索引技术来实现的。
全文索引是指将待搜索的文本内容转换成一种结构,以提高搜索的效率和准确性。
二、MySQL的全文索引功能介绍MySQL的全文索引功能可以在InnoDB和MyISAM存储引擎中使用。
通过建立全文索引,可以在一张数据库表中的一个或多个文本字段上进行全文搜索。
在MySQL中,使用ALTER TABLE语句来创建全文索引。
下面是一个示例,展示如何在MySQL中创建全文索引:```ALTER TABLE `tablename` ADD FULLTEXT(`columnname`);```在实际应用中,可以根据需要创建多个全文索引,以便在不同的字段上进行全文搜索。
三、MySQL全文搜索的基本用法MySQL全文搜索的基本用法可以通过使用MATCH() AGAINST()函数来实现。
MATCH()函数用于指定需要搜索的字段,AGAINST()函数用于指定搜索的关键词。
下面是一个示例,展示如何在MySQL中进行全文搜索:```SELECT * FROM `tablename` WHERE MATCH(`columnname`)AGAINST('keyword');```在实际应用中,可以通过组合使用AND和OR操作符,进一步扩展和细化搜索范围。
例如:```SELECT * FROM `tablename` WHERE MATCH(`columnname1`)AGAINST('keyword1')AND MATCH(`columnname2`) AGAINST('keyword2');```通过使用全文搜索功能,可以快速、高效地检索到相关的文本内容,提高数据处理的效率。
MySQL中REGEXP正则表达式使用大全

MySQL中REGEXP正则表达式使⽤⼤全像php中的preg之类的函数了,regexp正则函数如果只是简单的查询使⽤like即可,但复杂的还是需要使⽤regexp了,下⾯我们来看看。
MySql⽤户⼿册建议,在构造简单查询时,仍使⽤通配符。
如:Select [*|fieldname list] From [tablename] where [fieldname] like ["%someletter"|"%someletter%","_","?someletter"];但在⼀些特殊查询中,不⽤是不⾏的。
MYSQL提供的WHERE谓词有三个,分别是:REGEXP, RLIKE, NOT RLIKE⽤这三个替换原有的LIKE谓词,后⾯即可以跟。
例如要查询字段中含有“_”的数据,则要⽤以下查询语句:SELECT * FROM TABLENAME WHERE FIELDNAME RLIKE '.[_].';扩展正则表达式的⼀些字符是:· ‘.’匹配任何单个的字符。
· 字符类“[...]”匹配在⽅括号内的任何字符。
例如,“[abc]”匹配“a”、“b”或“c”。
为了命名字符的范围,使⽤⼀个“-”。
“[a-z]”匹配任何字母,⽽“[0-9]”匹配任何数字。
· “ * ”匹配零个或多个在它前⾯的字符。
例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,⽽“.*”匹配任何数量的任何字符。
如果REGEXP模式与被测试值的任何地⽅匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
为了定位⼀个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使⽤“^”或在模式的结尾⽤“$”。
为了找出以“b”开头的名字,使⽤“^”匹配名字的开始:使⽤正则SELECT * FROM pet WHERE name REGEXP BINARY ‘^b’;SELECT * FROM pet WHERE name REGEXP ‘fy$’;SELECT * FROM pet WHERE name REGEXP ‘w’;SELECT * FROM pet WHERE name REGEXP ‘^…..$’;SELECT * FROM pet WHERE name REGEXP ‘^.{5}$’;今天在应⽤中遇到了这样的⼀个问题,有⼀个字段 t1,其中的值类似于:1,1,1,2,3,3,4,4,5,5,2,4,3,2,1,2需要从⾥⾯搜索出⽐如说:第⼀个逗号前的数字范围为3-5之间,第三个逗号前的数字的范围为3-5之间,第10个逗号前的数字范围为3-5之间,其余的都为1-5之间。
使用MySQL进行全文搜索和关键字匹配

使用MySQL进行全文搜索和关键字匹配在当今信息爆炸的时代,人们对于快速准确地搜索和匹配关键字的需求越来越高。
而对于开发者来说,如何在数据库中进行全文搜索和关键字匹配也成为了一个必备的技能。
在本文中,我们将探讨如何使用MySQL进行全文搜索和关键字匹配,并介绍一些相关的技术和方法。
一、MySQL全文搜索MySQL是一个广泛使用的关系型数据库管理系统,它提供了全文搜索的功能,可以帮助我们在大量的文本数据中快速进行关键字匹配。
MySQL的全文搜索功能基于一种叫做“倒排索引”的技术,这种技术可以帮助我们快速定位文本中某个关键词的位置,从而实现高效的搜索。
在MySQL中,要使用全文搜索功能,首先需要创建一个全文索引。
全文索引是根据文本中的关键词创建的一种特殊索引,它记录了每个关键词在文本中的位置信息。
在创建全文索引时,可以指定需要索引的列,并设置相应的参数。
在创建了全文索引之后,我们可以使用MySQL提供的全文搜索函数来进行关键字匹配。
MySQL提供了两种全文搜索函数:MATCH()和AGAINST()。
MATCH()函数用于指定需要搜索的列,而AGAINST()函数用于指定需要匹配的关键词。
通过将这两个函数结合起来使用,我们可以实现在数据库中进行全文搜索和关键字匹配的功能。
二、关键字匹配除了全文搜索外,MySQL还提供了其他一些用于关键字匹配的功能。
比如,我们可以使用LIKE运算符来匹配包含某个特定关键字的记录。
这种方法虽然可以实现简单的关键字匹配,但是效率较低,特别是在处理大量数据时。
因此,对于大规模的关键字匹配,推荐使用全文搜索功能。
另外,MySQL还提供了一种叫做“正则表达式”的功能,可以帮助我们更灵活地进行关键字匹配。
正则表达式是一种用于描述字符串模式的表达式,它可以在文本中匹配符合某个特定模式的字符串。
通过在查询中使用正则表达式,我们可以实现更复杂的关键字匹配功能。
三、使用MySQL进行全文搜索和关键字匹配的实例接下来,我们将通过一个实际的例子来展示如何使用MySQL进行全文搜索和关键字匹配。
mysql关键字语句用法

mysql关键字语句用法MySQL是一个流行的关系型数据库管理系统,它提供了许多关键字语句用于执行各种操作和查询。
本篇文章将介绍MySQL中常用的一些关键字语句及其用法。
一、SELECT语句SELECT语句用于从数据库中检索数据。
它是最常用的MySQL关键字之一。
SELECT语句的基本语法如下:```scssSELECT列名1,列名2,...FROM表名WHERE条件;```*列名:要检索的列的名称。
*表名:要查询的表的名称。
*条件:可选的筛选条件,用于限制返回的结果。
例如,要从名为"users"的表中检索所有用户的姓名和年龄,可以使用以下语句:```sqlSELECTname,ageFROMusers;```二、INSERT语句INSERT语句用于向数据库表中插入新数据。
它的基本语法如下:```scssINSERTINTO表名(列1,列2,...)VALUES(值1,值2,...);```*表名:要插入数据的表的名称。
*列名:要插入数据的列的名称,用括号中的逗号分隔。
*值:要插入的实际值,与列名相对应。
例如,要在"users"表中插入一条新记录,包含姓名"John"和年龄30,可以使用以下语句:```sqlINSERTINTOusers(name,age)VALUES('John',30);```三、UPDATE语句UPDATE语句用于更新数据库表中的数据。
它的基本语法如下:```scssUPDATE表名SET列名1=值1,列名2=值2,...WHERE条件;```*表名:要更新数据的表的名称。
*SET:指定要更新的列及其新值。
可以使用逗号分隔多个列和值。
*WHERE:可选的条件,用于限制更新的行。
如果不指定WHERE子句,将会更新表中的所有行。
例如,要将"users"表中姓名为"John"的年龄增加5岁,可以使用以下语句:```sqlUPDATEusersSETage=age+5WHEREname='John';```四、DELETE语句DELETE语句用于从数据库表中删除数据。
MySql多个字段关键字分词模糊查询,按照最佳匹配度排序,使用LOCATE函数

MySql多个字段关键字分词模糊查询,按照最佳匹配度排序,使用LOCATE函数 SELECT DISTINCT t.* FROM pub_course t LEFT JOIN course_tag t1 ON ( t1.entitytype = t.type AND t1.entityid = t.id ) WHERE t.ishide != 1 AND t.pubstatus = 1 AND ( t. NAME LIKE '%盛放的彩铅%' OR t. NAME = '盛放的彩铅' OR t. NAME LIKE '%彩铅%' OR t. NAME = '彩铅' OR t. NAME LIKE '%盛放%' OR t. AME = '盛放' OR t.createname LIKE '%盛放的彩铅%' OR t.createname = '盛放的彩铅' OR t1.tlname LIKE '%盛放的彩铅%' OR t1.tlname = '盛放的彩铅' OR t.createname LIKE '%彩铅%' OR t.createname = '彩铅' OR t1.tlname LIKE '%彩铅%' OR t1.tlname = '彩铅' OR t.createname LIKE '%盛放%' OR t.createname = '盛放' OR t1.tlname LIKE '%盛放%' OR t1.tlname = '盛放' ) ORDER BY LOCATE('盛放的彩铅',) DESC, t.hotlevel DESC, t.score DESC, t.buynum DESC, t.pubtime DESC
使用MySQL进行全文搜索和关键字查询

使用MySQL进行全文搜索和关键字查询引言在互联网时代,数据的存储和管理变得越来越重要。
无论是网站还是应用程序,都需要对大量的数据进行搜索和查询。
MySQL作为一种常见的关系型数据库管理系统,提供了丰富的功能来支持全文搜索和关键字查询。
本文将介绍如何使用MySQL进行全文搜索和关键字查询,并讨论其应用场景和常见的问题与挑战。
一、MySQL全文搜索功能的基本原理MySQL的全文搜索功能是通过全文索引来实现的。
全文索引是一种特殊的数据结构,用于加速文本搜索的速度和效率。
在MySQL中,全文索引可以用于对文本列进行搜索,比如文章的标题、内容或者用户的评论等。
全文索引的基本原理是将文本数据切分为多个词项(Term)并建立索引。
词项可以是一个单词、一个短语或者一个单词的一部分。
索引记录了每个词项在原始文本中的位置,以及相关的一些元数据。
当进行查询时,MySQL会利用这些索引来快速定位匹配的文档。
二、MySQL全文搜索功能的使用方法1. 创建全文索引在MySQL中,要使用全文搜索功能,首先需要在相应的表中创建全文索引。
可以使用ALTER TABLE语句来添加全文索引,比如:```sqlALTER TABLE `articles` ADD FULLTEXT(`title`, `content`);```上述语句在`articles`表的`title`和`content`列上添加了全文索引。
需要注意的是,只有InnoDB和MyISAM存储引擎支持全文索引。
2. 执行全文搜索查询创建了全文索引之后,就可以通过MATCH AGAINST语句进行全文搜索查询。
比如:```sqlSELECT * FROM `articles` WHERE MATCH(`title`, `content`)AGAINST('MySQL全文搜索');```上述语句将返回`articles`表中标题或内容包含"MySQL全文搜索"的相关记录。
MySQL关键字
MySQL关键字EXPLAINexplain模拟优化器执⾏SQL语句,在5.6以及以后的版本中,除过select,其他⽐如insert,update和delete均可以使⽤explain查看执⾏计划,从⽽知道mysql是如何处理sql语句,分析查询语句或者表结构的性能瓶颈。
作⽤1. 表的读取顺序2. 数据读取操作的操作类型3. 哪些索引可以使⽤4. 哪些索引被实际使⽤5. 表之间的引⽤6. 每张表有多少⾏被优化器查询执⾏计划包含的信息如下信息描述id查询的序号,包含⼀组数字,表⽰查询中执⾏select⼦句或操作表的顺序。
ID相同:执⾏顺序从上往下。
ID不同:id值越⼤,优先级越⾼,越先执⾏select_type 查询类型,主要⽤于区别普通查询,联合查询,⼦查询等的复杂查询simple ——简单的select查询,查询中不包含⼦查询或者UNIONprimary ——查询中若包含任何复杂的⼦部分,最外层查询被标记subquery——在select或where列表中包含了⼦查询derived——在from列表中包含的⼦查询被标记为derived(衍⽣),MySQL会递归执⾏这些⼦查询,把结果放到临时表中union——如果第⼆个select出现在UNION之后,则被标记为UNION,如果union包含在from⼦句的⼦查询中,外层select被标记为derivedunion result——UNION 的结果table输出的⾏所引⽤的表type 显⽰联结类型,显⽰查询使⽤了何种类型,按照从最佳到最坏类型排序system——表中仅有⼀⾏(=系统表)这是const联结类型的⼀个特例。
const——表⽰通过索引⼀次就找到,const⽤于⽐较primary key或者unique索引。
因为只匹配⼀⾏数据,所以如果将主键置于where列表中,mysql能将该查询转换为⼀个常量eq_ref——唯⼀性索引扫描,对于每个索引键,表中只有⼀条记录与之匹配。
MySQL关键字及保留字
MySQL关键字及保留字在SQL语句中出现的关键字和保留字如果要使⽤⼈他们的字符意思⽽不是作为关键字、保留字使⽤,关键字可以正常使⽤,但是保留字必须使⽤`(键盘tab键上⾯,数字1左边的那个按键)来分割。
这个在SQLServer⾥⾯是使⽤[]中括号实现的。
所以我们要尽量避免使⽤关键字和保留字来作为表明和字段名。
下⾯是mysql 5.7的关键字和保留字:官⽅⽂档地址Table 1 Keywords and Reserved Words in MySQL 5.7ACCESSIBLE (R)ACCOUNT ACTIONADD (R)AFTER AGAINSTAGGREGATE ALGORITHM ALL (R)ALTER (R)ALWAYS ANALYSEANALYZE (R)AND (R)ANYAS (R)ASC (R)ASCIIASENSITIVE (R)AT AUTOEXTEND_SIZEAUTO_INCREMENT AVG AVG_ROW_LENGTHBACKUP BEFORE (R)BEGINBETWEEN (R)BIGINT (R)BINARY (R)BINLOG BIT BLOB (R)BLOCK BOOL BOOLEANBOTH (R)BTREE BY (R)BYTE CACHE CALL (R)CASCADE (R)CASCADED CASE (R)CATALOG_NAME CHAIN CHANGE (R)CHANGED CHANNEL CHAR (R)CHARACTER (R)CHARSET CHECK (R)CHECKSUM CIPHER CLASS_ORIGINCLIENT CLOSE COALESCECODE COLLATE (R)COLLATIONCOLUMN (R)COLUMNS COLUMN_FORMATCOLUMN_NAME COMMENT COMMITCOMMITTED COMPACT COMPLETIONCOMPRESSED COMPRESSION CONCURRENTCONDITION (R)CONNECTION CONSISTENTCONSTRAINT (R)CONSTRAINT_CATALOG CONSTRAINT_NAMECONSTRAINT_SCHEMA CONTAINS CONTEXTCONTINUE (R)CONVERT (R)CPUCREATE (R)CROSS (R)CUBECURRENT CURRENT_DATE (R)CURRENT_TIME (R)CURRENT_TIMESTAMP (R)CURRENT_USER (R)CURSOR (R)CURSOR_NAME DATA DATABASE (R)DATABASES (R)DATAFILE DATEDATETIME DAY DAY_HOUR (R)DAY_MICROSECOND (R)DAY_MINUTE (R)DAY_SECOND (R)DEALLOCATE DEC (R)DECIMAL (R)DECLARE (R)DEFAULT (R)DEFAULT_AUTHDEFINER DELAYED (R)DELAY_KEY_WRITEDELETE (R)DESC (R)DESCRIBE (R)DES_KEY_FILE DETERMINISTIC (R)DIAGNOSTICS DIRECTORY DISABLE DISCARDDISK DISTINCT (R)DISTINCTROW (R)DIV (R)DO DOUBLE (R)DROP (R)DUAL (R)DUMPFILE DUPLICATE DYNAMIC EACH (R)ELSE (R)ELSEIF (R)ENABLE ENCLOSED (R)ENCRYPTION ENDENDS ENGINE ENGINESENUM ERROR ERRORSESCAPE ESCAPED (R)EVENTEVENTS EVERY EXCHANGE EXECUTE EXISTS (R)EXIT (R) EXPANSION EXPIRE EXPLAIN (R)EXPORT EXTENDED EXTENT_SIZEFALSE (R)FAST FAULTSFETCH (R)FIELDS FILEFILE_BLOCK_SIZE FILTER FIRSTFIXED FLOAT (R)FLOAT4 (R)FLOAT8 (R)FLUSH FOLLOWSFOR (R)FORCE (R)FOREIGN (R) FORMAT FOUND FROM (R)FULL FULLTEXT (R)FUNCTION GENERAL GENERATED (R)GEOMETRY GEOMETRYCOLLECTION GET (R)GET_FORMAT GLOBAL GRANT (R)GRANTSGROUP (R)GROUP_REPLICATION HANDLERHASH HAVING (R)HELPHIGH_PRIORITY (R)HOST HOSTSHOUR HOUR_MICROSECOND (R)HOUR_MINUTE (R) HOUR_SECOND (R)IDENTIFIED IF (R)IGNORE (R)IGNORE_SERVER_IDS IMPORTIN (R)INDEX (R)INDEXESINFILE (R)INITIAL_SIZE INNER (R)INOUT (R)INSENSITIVE (R)INSERT (R)INSERT_METHOD INSTALL INSTANCEINT (R)INT1 (R)INT2 (R)INT3 (R)INT4 (R)INT8 (R)INTEGER (R)INTERVAL (R)INTO (R)INVOKER IO IO_AFTER_GTIDS (R)IO_BEFORE_GTIDS (R)IO_THREAD IPCIS (R)ISOLATION ISSUERITERATE (R)JOIN (R)JSONKEY (R)KEYS (R)KEY_BLOCK_SIZEKILL (R)LANGUAGE LASTLEADING (R)LEAVE (R)LEAVESLEFT (R)LESS LEVELLIKE (R)LIMIT (R)LINEAR (R)LINES (R)LINESTRING LISTLOAD (R)LOCAL LOCALTIME (R) LOCALTIMESTAMP (R)LOCK (R)LOCKSLOGFILE LOGS LONG (R) LONGBLOB (R)LONGTEXT (R)LOOP (R)LOW_PRIORITY (R)MASTER MASTER_AUTO_POSITION MASTER_BIND (R)MASTER_CONNECT_RETRY MASTER_DELAY MASTER_HEARTBEAT_PERIOD MASTER_HOST MASTER_LOG_FILE MASTER_LOG_POS MASTER_PASSWORD MASTER_PORT MASTER_RETRY_COUNT MASTER_SERVER_ID MASTER_SSLMASTER_RETRY_COUNT MASTER_SERVER_ID MASTER_SSLMASTER_SSL_CA MASTER_SSL_CAPATH MASTER_SSL_CERTMASTER_SSL_CIPHER MASTER_SSL_CRL MASTER_SSL_CRLPATH MASTER_SSL_KEY MASTER_SSL_VERIFY_SERVER_CERT (R)MASTER_TLS_VERSION MASTER_USER MATCH (R)MAXVALUE (R)MAX_CONNECTIONS_PER_HOUR MAX_QUERIES_PER_HOUR MAX_ROWSMAX_SIZE MAX_STATEMENT_TIME MAX_UPDATES_PER_HOUR MAX_USER_CONNECTIONS MEDIUM MEDIUMBLOB (R) MEDIUMINT (R)MEDIUMTEXT (R)MEMORYMERGE MESSAGE_TEXT MICROSECONDMIDDLEINT (R)MIGRATE MINUTEMINUTE_MICROSECOND (R)MINUTE_SECOND (R)MIN_ROWSMOD (R)MODE MODIFIES (R)MODIFY MONTH MULTILINESTRING MULTIPOINT MULTIPOLYGON MUTEXMYSQL_ERRNO NAME NAMESNATIONAL NATURAL (R)NCHARNDB NDBCLUSTER NEVERNEW NEXT NONODEGROUP NONBLOCKING NONENOT (R)NO_WAIT NO_WRITE_TO_BINLOG (R) NULL (R)NUMBER NUMERIC (R)NVARCHAR OFFSET OLD_PASSWORDON (R)ONE ONLYOPEN OPTIMIZE (R)OPTIMIZER_COSTS (R) OPTION (R)OPTIONALLY (R)OPTIONSOR (R)ORDER (R)OUT (R)OUTER (R)OUTFILE (R)OWNERPACK_KEYS PAGE PARSERPARSE_GCOL_EXPR PARTIAL PARTITION (R) PARTITIONING PARTITIONS PASSWORDPHASE PLUGIN PLUGINSPLUGIN_DIR POINT POLYGONPORT PRECEDES PRECISION (R)PREPARE PRESERVE PREVPRIMARY (R)PRIVILEGES PROCEDURE (R) PROCESSLIST PROFILE PROFILESPROXY PURGE (R)QUARTERQUERY QUICK RANGE (R)READ (R)READS (R)READ_ONLYREAD_WRITE (R)REAL (R)REBUILDRECOVER REDOFILE REDO_BUFFER_SIZE REDUNDANT REFERENCES (R)REGEXP (R)RELAY RELAYLOG RELAY_LOG_FILERELAY_LOG_POS RELAY_THREAD RELEASE (R)RELOAD REMOVE RENAME (R) REORGANIZE REPAIR REPEAT (R) REPEATABLE REPLACE (R)REPLICATE_DO_DB REPLICATE_DO_TABLE REPLICATE_IGNORE_DB REPLICATE_IGNORE_TABLE REPLICATE_REWRITE_DB REPLICATE_WILD_DO_TABLE REPLICATE_WILD_IGNORE_TABLE REPLICATION REQUIRE (R)RESETRESIGNAL (R)RESTORE RESTRICT (R)RESUME RETURN (R)RETURNED_SQLSTATE RETURNS REVERSE REVOKE (R)RIGHT (R)RLIKE (R)ROLLBACKROLLUP ROTATE ROUTINEROW ROWS ROW_COUNTROW_FORMAT RTREE SAVEPOINTSCHEDULE SCHEMA (R)SCHEMAS (R)SCHEMA_NAME SECOND SECOND_MICROSECOND (R) SECURITY SELECT (R)SENSITIVE (R) SEPARATOR (R)SERIAL SERIALIZABLESERVER SESSION SET (R)SHARE SHOW (R)SHUTDOWNSIGNAL (R)SIGNED SIMPLESLAVE SLOW SMALLINT (R) SNAPSHOT SOCKET SOMESONAME SOUNDS SOURCESPATIAL (R)SPECIFIC (R)SQL (R) SQLEXCEPTION (R)SQLSTATE (R)SQLWARNING (R)SQL_AFTER_GTIDS SQL_AFTER_MTS_GAPS SQL_BEFORE_GTIDS SQL_BIG_RESULT (R)SQL_BUFFER_RESULT SQL_CACHESQL_CALC_FOUND_ROWS (R)SQL_NO_CACHE SQL_SMALL_RESULT (R) SQL_THREAD SQL_TSI_DAY SQL_TSI_HOURSQL_TSI_MINUTE SQL_TSI_MONTH SQL_TSI_QUARTER SQL_TSI_SECOND SQL_TSI_WEEK SQL_TSI_YEARSSL (R)STACKED STARTSTARTING (R)STARTS STATS_AUTO_RECALC STATS_PERSISTENT STATS_SAMPLE_PAGES STATUSSTOP STORAGE STORED (R) STRAIGHT_JOIN (R)STRING SUBCLASS_ORIGIN SUBJECT SUBPARTITION SUBPARTITIONS SUPER SUSPEND SWAPSSWITCHES TABLE (R)TABLES TABLESPACE TABLE_CHECKSUM TABLE_NAMETEMPORARY TEMPTABLE TERMINATED (R) TEXT THAN THEN (R)TIME TIMESTAMP TIMESTAMPADDTIMESTAMPDIFF TINYBLOB (R)TINYINT (R) TINYTEXT (R)TO (R)TRAILING (R) TRANSACTION TRIGGER (R)TRIGGERSTRUE (R)TRUNCATE TYPETYPES UNCOMMITTED UNDEFINEDUNDO (R)UNDOFILE UNDO_BUFFER_SIZE UNICODE UNINSTALL UNION (R)UNIQUE (R)UNKNOWN UNLOCK (R) UNSIGNED (R)UNTIL UPDATE (R) UPGRADE USAGE (R)USE (R)USER USER_RESOURCES USE_FRMUSING (R)UTC_DATE (R)UTC_TIME (R)UTC_TIMESTAMP (R)VALIDATION VALUEVALUES (R)VARBINARY (R)VARCHAR (R) VARCHARACTER (R)VARIABLES VARYING (R)VIEW VIRTUAL (R)WAITWARNINGS WEEK WEIGHT_STRING WHEN (R)WHERE (R)WHILE (R)WITH (R)WITHOUT WORKWRAPPER WRITE (R)X509XA XID XMLXOR (R)YEAR YEAR_MONTH (R) ZEROFILL (R)ACCOUNT: added in 5.7.6 (nonreserved)ALWAYS: added in 5.7.6 (nonreserved)CHANNEL: added in 5.7.6 (nonreserved)COMPRESSION: added in 5.7.8 (nonreserved)ENCRYPTION: added in 5.7.11 (nonreserved)FILE_BLOCK_SIZE: added in 5.7.6 (nonreserved)FILTER: added in 5.7.3 (nonreserved)FOLLOWS: added in 5.7.2 (nonreserved)FOLLOWS: added in 5.7.2 (nonreserved)GENERATED: added in 5.7.6 (reserved)GROUP_REPLICATION: added in 5.7.6 (nonreserved)INSTANCE: added in 5.7.11 (nonreserved)JSON: added in 5.7.8 (nonreserved)MASTER_TLS_VERSION: added in 5.7.10 (nonreserved)MAX_STATEMENT_TIME: added in 5.7.4 (nonreserved); removed in 5.7.8NEVER: added in 5.7.4 (nonreserved)NONBLOCKING: removed in 5.7.6OLD_PASSWORD: removed in 5.7.5OPTIMIZER_COSTS: added in 5.7.5 (reserved)PARSE_GCOL_EXPR: added in 5.7.6 (reserved); became nonreserved in 5.7.8 PRECEDES: added in 5.7.2 (nonreserved)REPLICATE_DO_DB: added in 5.7.3 (nonreserved)REPLICATE_DO_TABLE: added in 5.7.3 (nonreserved)REPLICATE_IGNORE_DB: added in 5.7.3 (nonreserved)REPLICATE_IGNORE_TABLE: added in 5.7.3 (nonreserved)REPLICATE_REWRITE_DB: added in 5.7.3 (nonreserved)REPLICATE_WILD_DO_TABLE: added in 5.7.3 (nonreserved)REPLICATE_WILD_IGNORE_TABLE: added in 5.7.3 (nonreserved)ROTATE: added in 5.7.11 (nonreserved)STORED: added in 5.7.6 (reserved)VALIDATION: added in 5.7.5 (nonreserved)VIRTUAL: added in 5.7.6 (reserved)WITHOUT: added in 5.7.5 (nonreserved)XID: added in 5.7.5 (nonreserved)Table 2 New Keywords and Reserved Words in MySQL 5.7 compared to MySQL 5.6ACCOUNT ALWAYS CHANNELCOMPRESSION ENCRYPTION FILE_BLOCK_SIZEFILTER FOLLOWS GENERATED (R)GROUP_REPLICATION INSTANCE JSONMASTER_TLS_VERSION NEVER OPTIMIZER_COSTS (R)PARSE_GCOL_EXPR PRECEDES REPLICATE_DO_DBREPLICATE_DO_TABLE REPLICATE_IGNORE_DB REPLICATE_IGNORE_TABLE REPLICATE_REWRITE_DB REPLICATE_WILD_DO_TABLE REPLICATE_WILD_IGNORE_TABLE ROTATE STACKED STORED (R)VALIDATION VIRTUAL (R)WITHOUTXID。
MySQL5.7中的关键字与保留字详解
MySQL5.7中的关键字与保留字详解什么是关键字和保留字关键字是指在SQL中有意义的字。
某些关键字(例如SELECT,DELETE或BIGINT)是保留的,需要特殊处理才能⽤作表和列名称等标识符。
这⼀点对于内置函数的名称也适⽤。
如何使⽤关键字和保留字⾮保留关键字允许作为标识符,不需要加引号。
如果您要适⽤保留字作为标识符,就必须适⽤引号。
举个例⼦,BEGIN和END是关键字,但不是保留字,因此它们⽤作标识符不需要引号。
INTERVAL是保留关键字,必须加上引号才能⽤作标识符。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23mysql>mysql> use hoegh;Database changedmysql>mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000):mysql>mysql> CREATE TABLE`interval` (begin INT, end INT); Query OK, 0 rows affected (0.42 sec)mysql>mysql> show create table`interval`;+----------+---------------------------------------------------------| Table| Create Table+----------+---------------------------------------------------------| interval | CREATE TABLE`interval` (`begin` int(11) DEFAULT NULL,`end` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 |+----------+---------------------------------------------------------1 row in set(0.00 sec)mysql>我们看到,第⼀条语句中表名使⽤了保留字interval,执⾏失败;第⼆条语句对interval加了引号,执⾏成功。
如何在sql语句中使用保留字
如何在sql语句中使⽤保留字在sql语句中,有些特殊字符,是sql保留的。
⽐如 ' [ ] 等。
我们可以先看看它们的⽤法。
当需要查询某数据时,加⼊条件语句,或着当你需要insert记录时,我们⽤ ' 来将字符类型的数据引起来。
⽐如:Select*from Customers where City ='London'当表的名字或列的名字中,含有空格等⼀些特殊字符时,我们需要⽤[] 将表名引起来,告诉语法分析器,[]号内的才是⼀个完整的名称。
⽐如Select*from[Order Details]如果,字符数据中,含有 ' 改怎么办呢?其实,好多⼈在这⾥并没有处理字符川中 ' 符号,才造成sql 注射危险。
就那上⾯的那个例⼦。
在Sql语句拼接的时代,⽐如string sql = "select*from Customers where CustomerID ='" + temp + "'";如果,我给temp赋值为 Tom' or 1=1 ---那么你拼接起来的语句为 select * from Customers where CustomerID = 'Tom' or 1=1 --- '哈哈,1=1 衡为真,---会把后⾯的sql语句注释掉。
⽽前⾯因为有输⼊的 ' ⽽使的语句是合法的。
那or的条件,会把所有的记录都选出来。
这就是sql注⼊。
在做⽤户登陆时,如果没有处理该问题,那你的系统受危害的可能性会很⾼的。
如何处理字符数据中的 ' 符号呢?⽅法很简单,⽤两个 ' 符号代替⼀个。
⽐如,其实际传⼊的值为Lon'don,处理后为Select*from Customers where City ='Lon''don'如果表或列的名称中含有 [ 或 ] 字符呢?⽐如Select * from [Order] Details],那中间 ] 符号岂不是先和第⼀个[ 配了。