Mysql中的保留字desc

表中有个字段名为desc,结果死活插不进数据,今天早上才猛然醒悟,ft~~~~~

 

下面的词在 MySQL 中是被明确保留的。它们大多数被 ANSI SQL92 禁止作为列或表名(例如, GROUP)。一些被保留是因为 MySQL 需要它们并且它使用的是一个 yacc 语法分析器:

单词 单词 单词
ADD ALL ALTER
ANALYZE AND AS
ASC AUTO_INCREMENT BDB
BEFORE BERKELEYDB BETWEEN
BIGINT BINARY BLOB
BOTH BTREE BY
CASCADE CASE CHANGE
CHAR CHARACTER CHECK
COLLATE COLUMN COLUMNS
CONSTRAINT CREATE CROSS
CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
DATABASE DATABASES DAY_HOUR
DAY_MINUTE DAY_SECOND DEC
DECIMAL DEFAULT DELAYED
DELETE DESC DESCRIBE
DISTINCT DISTINCTROW DIV
DOUBLE DROP ELSE
ENCLOSED ERRORS ESCAPED
EXISTS EXPLAIN FALSE
FIELDS FLOAT FOR
FORCE FOREIGN FROM
FULLTEXT FUNCTION GRANT
GROUP HASH HAVING
HIGH_PRIORITY HOUR_MINUTE HOUR_SECOND
IF IGNORE IN
INDEX INFILE INNER
INNODB INSERT INT
INTEGER INTERVAL INTO
IS JOIN KEY
KEYS KILL LEADING
LEFT LIKE LIMIT
LINES LOAD LOCALTIME
LOCALTIMESTAMP LOCK LONG
LONGBLOB LONGTEXT LOW_PRIORITY
MASTER_SERVER_ID MATCH MEDIUMBLOB
MEDIUMINT MEDIUMTEXT MIDDLEINT
MINUTE_SECOND MOD MRG_MYISAM
NATURAL NOT NULL
NUMERIC ON OPTIMIZE
OPTION OPTIONALLY OR
ORDER OUTER OUTFILE
PRECISION PRIMARY PRIVILEGES
PROCEDURE PURGE READ
REAL REFERENCES REGEXP
RENAME REPLACE REQUIRE
RESTRICT RETURNS REVOKE
RIGHT RLIKE RTREE
SELECT SET SHOW
SMALLINT SOME SONAME
SPATIAL SQL_BIG_RESULT SQL_CALC_FOUND_ROWS
SQL_SMALL_RESULT SSL STARTING
STRAIGHT_JOIN STRIPED TABLE
TABLES TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRUE
TYPES UNION UNIQUE
UNLOCK UNSIGNED UPDATE
USAGE USE USER_RESOURCES
USING VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WARNINGS WHEN WHERE
WITH WRITE XOR
YEAR_MONTH ZEROFILL

<think>好的,用户想了解MySQL中右值赋值给左值的语法和用法。首先,我需要明确“右值”和“左值”在编程中的概念。左值通常指可以出现在赋值语句左边的表达式,即有明确存储位置的对象,而右值是只能出现在右边的表达式,如常量或计算结果。 不过,在MySQL中,直接的赋值操作通常发生在SET语句或UPDATE语句中。例如,用户变量赋值使用@var := 或者 =。例如,SET @a = 1; 或者 SELECT @a := 1;。这时候右边的值赋给左边的变量。 另外,在UPDATE语句中,比如UPDATE table SET column = expression,这里的expression就是右值,赋给左值的列。需要区分用户变量和列名的赋值,避免混淆。 还要注意MySQL中的运算符,比如逻辑运算符AND和OR,以及字符串连接需要用CONCAT()而不是||,因为||在MySQL中是逻辑OR的同义词,这可能和用户的问题相关吗?比如用户提到的引用[1]提到MySQL不支持||作为字符串连接符,所以如果有涉及字符串操作的赋值,需要注意使用CONCAT()。 用户可能混淆了编程语言中的左值右值概念和SQL中的变量赋值。需要明确在MySQL中,赋值主要发生在用户变量或者列更新时,语法结构是怎样的。例如,用户变量赋值可以在SELECT子句中使用:=,或者在SET语句中使用=。 另外,用户提供的引用[3]提到Leave是保留字,如果在赋值时使用保留字作为列名或变量名,需要用反引号包裹,这也可能影响赋值语句的正确性。 可能还需要考虑子查询中的赋值问题,比如引用[4]提到的标量子查询优化,是否涉及右值赋给左值的情况?比如在SELECT子句中使用子查询结果赋值给变量或列。 总结用户的问题,需要分情况讨论MySQL中的赋值操作: 1. 用户变量赋值:使用SET或SELECT语句,注意=和:=的区别。 2. UPDATE语句中的列赋值:右值可以是表达式、子查询结果等。 3. 避免使用保留字作为标识符,必要时用反引号。 4. 注意运算符的优先级和逻辑,特别是逻辑运算符和字符串连接的区别。 可能需要提供具体语法示例,说明在不同情况下如何正确赋值,并指出常见的错误,比如误用||进行字符串连接,或者保留字未转义导致的问题。同时,要提醒用户MySQL和编程语言如JavaScript在赋值和比较运算符上的差异,如引用[5]提到的严格相等和类型检查。 最后,生成相关问题,帮助用户进一步理解相关概念和可能遇到的陷阱。</think>### MySQL右值赋值给左值的语法及用法 在MySQL中,**右值赋值给左值**的操作主要涉及用户变量定义、列更新和条件判断。以下是具体语法及注意事项: --- #### 1. **用户变量赋值** 用户变量以`@`开头,赋值可通过`SET`或`SELECT`语句实现: - **使用`SET`语句** ```sql SET @变量名 = 右值表达式; -- 示例:将计算结果赋给变量 SET @total = (SELECT COUNT(*) FROM employees); ``` - **使用`SELECT`语句** ```sql SELECT 右值表达式 INTO @变量名; -- 示例:将查询结果赋给变量 SELECT salary INTO @max_salary FROM employees ORDER BY salary DESC LIMIT 1; ``` **注意**: - `SET`语句中`=`和`:=`等效,但在`SELECT`中必须用`:=`直接赋值[^1]。 - 用户变量的作用域为当前会话,重启后失效。 --- #### 2. **UPDATE语句中的列赋值** 在更新数据时,右值可以是常量、表达式或子查询结果: ```sql UPDATE 表名 SET 列名 = 右值表达式 WHERE 条件; -- 示例:将工资增加10% UPDATE employees SET salary = salary * 1.1 WHERE department = 'IT'; ``` **注意**: - 右值若包含子查询,需确保返回单值,否则会报错。 - 避免使用保留字作为列名(如`Leave`),否则需用反引号转义:`` `Leave` ``[^3]。 --- #### 3. **条件表达式中的赋值** 在`WHERE`或`HAVING`子句中,右值可用于逻辑判断: ```sql SELECT * FROM employees WHERE salary > @average_salary; ``` **注意**: - MySQL中`||`表示逻辑OR,而非字符串连接符,字符串连接需用`CONCAT()`。 - 标量子查询优化需符合特定条件(如无聚合函数、非关联子查询)[^4]。 --- #### 常见错误示例 - **误用运算符** ```sql -- 错误:尝试用||连接字符串 SET @fullname = 'John' || 'Doe'; -- 实际会被解析为逻辑OR -- 正确: SET @fullname = CONCAT('John', 'Doe'); ``` - **保留字未转义** ```sql -- 错误:直接使用保留字Leave UPDATE leaves SET status = 'approved' WHERE id = 1; -- 正确: UPDATE `leave` SET status = 'approved' WHERE id = 1; ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值