MySQL5.7 datetime无法设置默认值为0

在mysql5.7以上版本中,如果datetime默认值为0,则会出现下面的错误:

ERROR 1067 (42000) at line xxx: Invalid default value for 'xxx'

这是因为mysql5.7调整了校验规则,修改一下/etc/mysql/my.cnf配置文件就可以了

[mysqld]
#默认规则
#sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启mysql就可以啦。

MySQL忘记管理员密码

方法一:
1、关闭mysql授权

#关闭mysql
/etc/init.d/mysql stop

#以不需要授权的模式启动mysql
#修改/etc/mysql/my.cnf添加下面的内容
[mysqld]
skip-grant-tables

#开启mysql
/etc/init.d/mysql start

2、修改密码

#登录mysql
mysql
mysql> use mysql;
#旧版本
mysql> UPDATE user SET password=password("xxx") WHERE user='root';
#新版本
mysql> update user set authentication_string=PASSWORD('xxx') where User='root';
mysql> flush privileges;
mysql> exit; 

3、开启mysql授权

#关闭mysql
/etc/init.d/mysql stop

#以不需要授权的模式启动mysql
#修改/etc/mysql/my.cnf禁用skip-grant-tables
[mysqld]
#skip-grant-tables

#开启mysql
/etc/init.d/mysql start

4、搞定

方法二
1、关闭mysql授权

#关闭mysql
service mysql stop

#以不需要授权的模式启动mysql
mysqld_safe --skip-grant-tables

2、修改密码

#登录mysql
mysql
mysql> use mysql;
#旧版本
mysql> UPDATE user SET password=password("xxx") WHERE user='root';
#新版本
mysql> update user set authentication_string=PASSWORD('xxx') where User='root';
mysql> flush privileges;
mysql> exit; 

3、开启mysql授权

#关闭mysql
service mysql stop

#开启mysql
service mysql start

4、搞定

SQL查询100到200行

--SQL Server
--top
select top 100 * from table
where id is not in(select top 100 id from table)
--row_number()
select r.*, row_number() over(order by id desc) as r from table where r>100 and r<=200


--MySQL
--limit
select * from  table limit 100,200;


--Oracle
--rownum
select * from (select rownum r,t.* from table t) where r>100 and r<=200;

SQL获取自增字段的值

数据插入后,如何获取自增字段的数值呢?可以用下面的方法
(建议进行事务控制)

--SQL Server
--当前会话,当前作用域
select SCOPE_IDENTITY() as id
--当前会话,不限定作用域
select @@identity as id
--指定表,不限定会话和作用域
select IDENT_CURRENT ('table_name')


--MySQL
--当前会话
SELECT LAST_INSERT_ID();
select @@IDENTITY as id


--Oracle
--当前会话
select seq_name.currval from dual