在执行这条命令时,mysql报错:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences ->SQL Editor and reconnect.
这是因为在mysql在safe-updates模式中,如果where后跟的条件不是主键id就会报这种错误。出现1175错误时,只要更改一下mysql的安全模式就行,以下两种方式都行:
mysql> set sql_safe_updates=0
mysql>set sql_safe_updates=off
SQL_SAFE_UPDATES有两个取值0和1, 或ON和OFF,默认值是1:
SQL_SAFE_UPDATES = 1/ON时,不带where和limit条件的update和delete *** 作语句是无法执行的,即使是有where和limit条件但不带主键id的update和delete也不能执行。
SQL_SAFE_UPDATES =0/OFF时,update和delete *** 作将会顺利执行。
所以,出现1175错误的时候,可以先设置SQL_SAFE_UPDATES的值为0/OFF,然后再执行更新即可。
1.1 load data local infile 'C:/Users/Lan/Desktop/user_info_utf.csv' into table userinfo fields terminated by ','
注意: 要有 fields terminated by ', ',' 是因为csv 文件是以逗号为分割符的
出现的错误:
ERROR 1148 (42000): The used command is not allowed with this MySQL version
网上查了下,是因为local_infile这个功能默认是禁止(local_infile=0,启动的话要改为1)的,需要把这个功能打开,网上有很多方法,这边说一下我能成功导入的方法:
第一步在my.ini文件中添加语句loose-local-infile=1;
第二步运行的时候设置全局变量 set global local_infile=1。
参考:https://www.jianshu.com/p/413719cfdeb1
1.2 把时间格式标准化变成 2019-02-27
错误:update orderinfo set paidtime=replace(paidtime,'/','-') where paidtime is not null Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences ->SQL Editor and reconnect. 0.000 sec
在增删改之前加上 set sql_safe_updates=0
# 清除表全部数据命令
truncate userinfo;(速度更快,删除后重建)
#删除数据
delete from table where…
#更新数据
update table orderinfo set…where…
–绝对不要轻易忽略where字句,否则会更新或删除全部的行
–在使用where条件前先使用select进行测试,保证正确无误,因为Mysql是没有撤销功能的
#新建表
create table t1
(id int not null
………………
)engine=innodb
# 删除表命令
drop table user info
# 修改表字段类型命令
alter table orderinfo modify column paidtime
varchar(45)
3.1 case when…then…when…then…end
case when 用在select 语句中,新的字段new_column_name可以用来排序,end 后面加as new_colume_name
按各科成绩进行排序,并显示排名, Score 重复时合并名次
select sc.CId , case when @fontscore=score then @curRank when @fontscore:=score then @curRank:=@curRank+1 end as rank,sc.score
from (select @curRank:=0 ,@fontage:=null) as t ,sc----当做初始化
ORDER BY sc.score desc
当满足某一条件时,执行某一result
当colume 与condition 条件相等时结果为result
例如男女交换性别
3.2 if进行分组计数
@rank:=if(@gen=gender,@rank+1,1) rank
@gen:=gender
(select @rank:=0,@gen:=null) temp
如果相等则rank+1,接着@gen会被赋值该行的值,直到遇到不等的rank重新变为1
关于group by 和max函数一起使用的坑
如果输出的除了分组列和max列还有其他列,其他列会是group by分组后的第一条记录。
DATE_SUB()、DATE_ADD()可通用,对指定的时间进行增加或减少一个指定的时间间隔,语法如下:
DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)
date是指定的日期,INTERVAL为关键词,expr是具体的时间间隔,type是时间单位。expr可以为一个负数
DATEDIFF()日期差
DATEDIFF(date1,date2),可以是负数
你写了一条正常的update 或者 delete 语句时,语句本身是没问题的,但是却执行不了。原因是是MySQL Workbench的安全设置。当要执行的SQL语句是进行批量更新或者删除的时候就会提示这个错误。打开Workbench的菜单Edit->Preferences xxx->切换到SQL Editor
把Forbid UPDATE and DELETE statements without a WHERE clause (safe updates)的勾去掉击[OK]按钮重新启动就OK了。
或者在每句语句前,加上‘SET SQL_SAFE_UPDATES=0’
问题就解决了。
(ps:以后我会分享我所遇到的问题,这里持续更新!)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)