Mysql常见问题及操作(持续更新...)

本文详细介绍如何使用SQL语句进行表的创建、修改、删除等操作,包括列的增删改,表名更改,以及解决MySQL中特定问题如锁表、事务线程和日期格式错误。同时,提供判断表存在性的查询语句,并分享了MySQL中日期函数的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

>>>>>>>>>>>>>>>>>ALTER TABLE:添加,修改,删除表的列,约束等表的定义。

查看列:desc 表名;
修改表名:alter table old_table rename to new_table;
添加列:alter table 表名 add column 列名 varchar(30);
删除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table 表名 change oldname newname int;
修改列名SQLServer:exec sp_rename’t_student.name’,‘nn’,‘column’;
修改列名Oracle:alter table 表名 rename column nnnnn to hh int;
修改列属性:alter table 表名 modify name varchar(22);
 

>>>>>>>>>>>>>>>>>mysql锁表及锁事务线程问题:
--查找当前锁表状态
show OPEN TABLES where In_use > 0;
SHOW PROCESSLIST;

-- 查找当前活跃事务
SELECT * from information_schema.INNODB_TRX;

--杀进程或事务锁线程
KILL id值
----------------------------------------------------------------------


>>>>>>>>>>mysql文件无法插入' 0000-00-00'问题:
解决方案:
使用root登陆数据库
1、查看sql_mode:
select @@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
2、NO_ZERO_IN_DATE,NO_ZERO_DATE是无法默认为‘0000-00-00 00:00:00’的根源,去掉之后再次新建表就可以了

3.执行语句
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
注: 
NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零 
NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。
测试新建表,ok。可以了。
---------------------------------------------------------------------

 

>>>>>>>>>>判断表是否存在
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'tableName' ;
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbName' AND TABLE_NAME='tablename' ;

dbName——指定数据库名(同数据源可不加此条件) 
tableName——表名

---------------------------------------------------------------------

 

>>>>>>MySql常用函数

-- 查询前一天数据函数1
select * from 表 where date(字段) = date_sub(CURDATE(),interval 1 day); 
-- 或者
SELECT * FROM 表 WHERE DATEDIFF(字段,NOW())=-1

--统计从昨天开始统计前7天的日志包括昨天

select * from user where date(log_time) >= date_sub(curdate(),interval 7 day) and date(log_time) <= date_sub(curdate(),interval 1 day)

date_sub('2017-08-01',interval 1 day) 表示 2017-07-31
date_sub('2017-08-01',interval 0 day) 表示 2017-08-01
date_sub('2017-08-01',interval -1 day) 表示 2017-08-02
date_sub('2017-07-31',interval -1 day) 表示 2017-08-01
date_sub(curdate(),interval 1 day) 表示 2017-07-31
date_sub(curdate(),interval -1 day) 表示 2017-08-02
date_sub(curdate(),interval 1 month) 表示 2017-07-01
date_sub(curdate(),interval -1 month) 表示 2017-09-01
date_sub(curdate(),interval 1 year) 表示 2016-08-01
date_sub(curdate(),interval -1 year) 表示 2018-08-01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值