常见的 MySQL 错误(持续更新)

ERROR 1060

1. 错误描述:
Duplicate column name ‘xxx’;
重复的字段 xxx,当添加数据库字段时,添加了数据库中已存在的字段会报此错误
2. 实例演示:

# 表结构如下所示
select * from dept;
+--------+----------+
| deptId | deptName |
+--------+----------+
|      1 | 开发部    |
|      2 | 测试部    |
|      3 | UI部     |
|      4 | 游戏部    |
+--------+----------+

#在原来表结构上添加名为 deptId 的字段
alter table dept add deptId bigint(20);
#报错,提示deptId字段重复
ERROR 1060 (42S21): Duplicate column name 'deptId'

dos客户端乱码问题

1. 问题描述:
在 Windows上使用 cmd 打开 MySQL 出现乱码,查看数据库编码后发现编码都是 utf8;出现这种错误的原因是因为操作系统为中文操作系统,默认字符集是 GB2312,但是MySQL客户端输出窗口显示中文时使用的字符编码为utf8
这里写图片描述
这里写图片描述

查看输出窗口使用的字符编码

 show variables like 'char%';

这里写图片描述

2.解决方法
将输出控制台的编码改成 gb2312

set character_set_results=gb2312;

这里写图片描述

改变编码后显示
这里写图片描述

注意:如果使用 mysql 客户端工具,不会出现这种错误

ERROR 1395 :Can not delete from join view

1. 错误描述
多表使用内连接生成视图,尝试从此视图中删除某一条记录,出现此错误

#建立视图
create view view_emp_all 
as 
select d.deptId,d.deptName,e.empName,e.salary,e.phone 
from 
dept d inner join emp e on d.deptId=e.deptId;

#查看视图
select * from view_emp_all;
+--------+----------+---------+--------+-------+
| deptId | deptName | empName | salary | phone |
+--------+----------+---------+--------+-------+
|      1 | 开发部    | 张三     |  10000 | 111   |
|      1 | 开发部    | 李四     |   9999 | 112   |
|      2 | 测试部    | 王五     |   8888 | 113   |
|      3 | UI部     | 赵六     |   7777 | 114   |
+--------+----------+---------+--------+-------+

删除视图 view_emp_all 中 deptId=1 的记录

delete from view_emp_all where deptId=1;
ERROR 1395 (HY000): Can not delete from join view 'test55.view_emp_all'

2. 解决方法
第一种情况:查看视图是否可修改,只有视图可修改才能进行删除操作

#查看视图是否可更新
SELECT IS_UPDATABLE FROM information_schema.views WHERE TABLE_NAME = 'view_emp_all';
#查看 test55 数据库中所有视图是否可更新
SELECT table_name,is_updatable FROM information_schema.views WHERE table_schema = 'test55';

+--------------+
| IS_UPDATABLE |
+--------------+
| YES          |
+--------------+ 

第二种情况:通过连接查询创建的视图,删除的操作可能不止改变一个表里的记录,数据库为了保证数据的完整性,不会允许这么做,所以只能从这个构建这个视图的表里逐步删除记录,才能把要删除的视图记录删除

column ‘**’ in field list is ambiguous

1、说明:
当联表查询时未指定字段属于哪一个表,产生歧义
2、实例

第一张表含有studentId字段

select studentId,studentName from student;
+-----------+-------------+
| studentId | studentName |
+-----------+-------------+
| 16046122  | 张三        |
| 16046124  | 李四        |
| 16045122  | 王五        |
| 16045123  | 赵六        |
+-----------+-------------+

第二张表也含有studentId字段

select studentId from truant;
+-----------+
| studentId |
+-----------+
| 16046122  |
| 16046124  |
+-----------+

这里写图片描述
可以看到当查询时未指定student属于哪一张表,这时发生歧义
解决方法,声明字段属于哪一张表

select student.studentId,studentName from student inner join truant where student.studentId=truant.studentId;
+-----------+-------------+
| studentId | studentName |
+-----------+-------------+
| 16046122  | 张三          |
| 16046124  | 李四        |
+-----------+-------------+

猜你喜欢

转载自blog.csdn.net/tuckEnough/article/details/81215835