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 | 李四 |
+-----------+-------------+