mysql不能写入数据之关键字冲突

问题描述:今天使用mysql新建了一个表。在插入数据时,报了语法错误。由于使用的是 mabits 代码自动生成工具,并且自己没有改写其中的sql语句。所以确信,sql语句部分应该没有可能写错。因此马上意识到可能表里面的字段出了问题。于是查看表里面的字段,发现有一个desc 字段和mysql中降序的关键字冲突了。然后顺手把这个字段改写成了describe。到这里,以为问题就应该解决了。谁料想,又冲突了。describe也是mysql的关键字。于是上网搜了一下mysql 关键字表。

如下是mysql关键字表

  

MySQL 5.5 保留关键字

ACCESSIBLE ADD ALL
ALTER ANALYZE AND
AS ASC ASENSITIVE
BEFORE BETWEEN BIGINT
BINARY BLOB BOTH
BY CALL CASCADE
CASE CHANGE CHAR
CHARACTER CHECK COLLATE
COLUMN CONDITION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GRANT GROUP HAVING
HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
HOUR_SECOND IF IGNORE
IN INDEX INFILE
INNER INOUT INSENSITIVE
INSERT INT INT1
INT2 INT3 INT4
INT8 INTEGER INTERVAL
INTO IS ITERATE
JOIN KEY KEYS
KILL LEADING LEAVE
LEFT LIKE LIMIT
LINEAR LINES LOAD
LOCALTIME LOCALTIMESTAMP LOCK
LONG LONGBLOB LONGTEXT
LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
MATCH MAXVALUE MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_MICROSECOND MINUTE_SECOND MOD
MODIFIES NATURAL NOT
NO_WRITE_TO_BINLOG NULL NUMERIC
ON OPTIMIZE OPTION
OPTIONALLY OR ORDER
OUT OUTER OUTFILE
PRECISION PRIMARY PROCEDURE
PURGE RANGE READ
READS READ_WRITE REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESIGNAL RESTRICT
RETURN REVOKE RIGHT
RLIKE SCHEMA SCHEMAS
SECOND_MICROSECOND SELECT SENSITIVE
SEPARATOR SET SHOW
SIGNAL SMALLINT SPATIAL
SPECIFIC SQL SQLEXCEPTION
SQLSTATE SQLWARNING SQL_BIG_RESULT
SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT SSL
STARTING STRAIGHT_JOIN TABLE
TERMINATED THEN TINYBLOB
TINYINT TINYTEXT TO
TRAILING TRIGGER TRUE
UNDO UNION UNIQUE
UNLOCK UNSIGNED UPDATE
USAGE USE USING
UTC_DATE UTC_TIME UTC_TIMESTAMP
VALUES VARBINARY VARCHAR
VARCHARACTER VARYING WHEN
WHERE WHILE WITH
WRITE XOR YEAR_MONTH
ZEROFILL    

MySQL 5.5新增的保留关键字

GENERAL IGNORE_SERVER_IDS MASTER_HEARTBEAT_PERIOD
MAXVALUE RESIGNAL SIGNAL
SLOW    

MySQL 允许一些大家常用到的关键字使用英文 ` 号引起来使用,如:

  • ACTION
  • BIT
  • DATE
  • ENUM
  • NO
  • TEXT
  • TIME
  • TIMESTAMP

上述表中的关键字,在设计数据库时,应当尽量避免这些不必要的冲突。

问题解决:把关键字替换成了非关键字。

经验总结:通过程序操作数据库时,mysql会解析你代码里的sql语句,如果操作的字段中含有关键字,你写的sql语句就可能被错误解释了,sql语句也就出错了。数据库种类还是比较多的。多多少少都有点关键字,每个版本还略有不同。在设计数据库表的时候,应当设计的字段名特殊一点,尽量长一点,避免和关键字冲突。

时间: 2024-10-11 11:40:59

mysql不能写入数据之关键字冲突的相关文章

mysql数据库字段命名与关键字冲突之坑

mysql> SELECT desc,status,play_time,push_type, 'interval' FROM cms_push; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 700 Current database: xxx_cms ERROR 1064 (42000): You have an error in your S

MySQL 删除字段数据某关键字后的所有数据

UPDATE `bj_agent_new` SET Compay= CONCAT(substring_index(`Compay`,'开发商',1),'开发商') WHERE Compay LIKE '%开发商%'; sql附上

mysql批量写入数据时,注意事项

SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders.

MySQL之按月拆分主表并按月分表写入数据提高数据查询速度

使用场景: 主表数据量特别大,为了提高查询的速度,可以考虑按月进行分表,要求就是当月的数据到当月表查询,上月的数据到上月表查询,当天的数据到主表来查询.这样在一定程度上也是提高了数据的查询速度 过程演示: 1.创建总表: CREATE TABLE `zong_biao` ( `id` int(8) NOT NULL AUTO_INCREMENT, `username` varchar(20) COLLATE utf8_unicode_ci NOT NULL, `password` varchar

mysql修改数据 -- 主键冲突

mysql 插入数据唯一键冲突 前提: 修改数据三种可用的方法解决主键冲突的问题 1. insert into ... on duplicate key update set ... 2. update ... set = case key when ... then ... when ... then ... else end where ...; 3. replace into ... (与1相似,但若主键冲突会先删除原数据,后再插入新数据 ,所以运用时最好带上主键) 例: table :

php 写入数据到MySQL以及从MySQL获取数据,页面出现乱码的解决方法

现象如标题. 解决思路: 1,在php中添加 header('charset=utf-8'); 2,在连接到数据库后,添加如下代码,写入数据和获取数据的地方均要添加 mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_serve

ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 [html] view plaincopyprint? <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hiber

转Oracle、MySql、SQLServer 数据分页查询

最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表的查询语句,也可以是多表的联合查询语句 * firstIndex:其实的索引 * pageSize:每页显示的记录数 */ select o.* from (sql) o limit firstIndex,pageSize

c# mysql 字段写入文件路径异常问题

c# mysql 写入文件路径信息 ,mysql中"\"是转义字符,所以写入数据中 文件路径 d:\123\123.txt  就会变成d:123123.txt 在c#"\"也是转义字符 所以我们定义一个路径 string str = "d:\\123\\123.txt";  要保证写入mysql正常就需要将str变成 str="d:\\\\123\\\\123.txt"; 我们可以采用 str = str.replace(&q