数据库函数max函数,mysql数据批量插入重文件中导入;mysql查看数据库的编码集;批量删除外键语句 mysql;mysql统计所有表的数据数据数 union all 用于表之间的连接

	1.max函数:
		max函数对不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符后在每个字段中加MAX();
	DATALENGTH ( expression )
	返回类型  int
	注释 DATALENGTH 对 varchar、varbinary、text、image、nvarchar 和 ntext 数据类型特别有用,因为这些数据类型可以存储可变长度数据。
	NULL 的 DATALENGTH 的结果是 NULL。
	2.使用max函数加DaTaLength(field) from table
	如:select max(DATALENGTH(field)) from table
mysql查询库中所有表进行truncate;
	select CONCAT('truncate TABLE ',table_schema,'.',TABLE_NAME, ';') from INFORMATION_SCHEMA.TABLES where  table_schema in('LearningGenieDb')
mysql有外键时不可以进行truncate;
	mysql使用 外键置为1是是检查外键 。0时是不检查外键
		SET foreign_key_checks=1;
	3.mysql中大数据量产生的错误:
		Packet for query is too large (2048 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; 
		解决方式:
			查询最大允许的数据量大的插入和更新会被max_allowed_packet 参数:
							show VARIABLES like '%max_allowed_packet%';
			MySQL的一个系统参数:max_allowed_packet,其默认值为1048576(1M),
			通过命令行进行:两种方式,当1.无效时使用2.
				1.set global max_allowed_packet = 2*1024*1024*10
				2.set @@max_allowed_packet=5*1024*1024
			然后重启mysql服务。
	如果是采用的Rds的化必须使用参数配置。
	4.mysql数据批量插入重文件中导入。
	往数据库里面插入数据最快的方式是采用Load的方式。如果你是从其他的数据源大批量的插入MySQL的数据库,可以采用,在数据库里面建一个与目标数据库一样的临时数据表,该临时表没有主键,没有索引等限制,
	然后将需要插入的数据利用Kettle导出成文本,然后使用MySQL的Load命令,将文本数据插入到临时表,然后采用SELECT INTO的方式插入到目标数据表中。采用这种方式,百万级的数据量十几分钟,甚至几分钟就能插入完成。		
		LOAD DATA LOCAL INFILE 'C:/peg.txt' INTO TABLE myTable(myField1, myField2, myField3)
		注:每一行对应数据库表的一行记录,字段顺序要一致,各字段间用\t隔开
		load data local infile 待导入数据文件路径
		into table 表名
		CHARACTER SET 字符集
		fields
		terminated by 字段之间分隔符
		lines terminated by 不同行之间分隔符
		说明:
		1、行分隔符选择“\r\n”、“\n”
		2、待导入文件格式建议选择gbk,原因是utf8文件头常容易导致一些小bug
		3、与2对应,导入语句中用CHARACTER SET gbk
	5.mysql查看数据库的编码集: 
		show variables like'character%';6.
	删除外键语句 mysql:
		alter table 表名 drop foreignkey 外键约束名。
		alter table 表名 drop constraint 外键约束名。
		查询库所有的外键并拼接处sql语句:
		select
		TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
		,concat('alter table ',table_name,' drop foreign key ',constraint_name,';')
		from INFORMATION_SCHEMA.KEY_COLUMN_USAGE
		where CONSTRAINT_SCHEMA ='库名称'
		and constraint_name like 'FK%'
		查出后进行复制出执行即可。
	7.查询库中所有的字段的长度和类型 mysql。
		查询库中的所有的:
		select table_name,column_name,column_type,column_key,column_comment from information_schema.Columns 
		where  table_schema='库名称'
		查询某个表中字段及其类型:
		select table_name,column_name,column_comment,column_type,column_key from information_schema.Columns
		where table_name='表名' and table_schema='数据库'
		
		查所有:
			select * from information_schema.Columns
					where  table_schema='LearningGenieDb'
	8.mysql统计所有表的数据数据数 union all 用于表之间的连接:
		select concat('select ''',table_name,''' tb,count(1) ct from ',table_name,' union all') from information_schema.`TABLES`
		where TABLE_SCHEMA='LearningGenieDb'
	9.mysql修改某个表中的某个字段的类型。
		alter table notes_batchAdd modify childid longtext;
	10.增加表中的字段及表中的字段类型。
		alter table authentication_user add registSwitchChoose varchar(10);
		alter table domains_domain add topid varchar(100);
	11:MySql 中文写入数据库乱码及Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
		原因是MySQL里
					utf8 编码最多只能支持3个字节,而Emoji表情字符使用的 utf8 编码,很多都是4个字节,有些甚至是6个字节。
					因为mysql的utf8 有缺陷是 残疾的 不兼容部分表情,他的utf8mb4才是正经的utf8
		在mysql文档中查看:
		utf8 3字节,utf8mb4 4字节
		Utfmb4字符集具有以下特征:
			Supports BMP and supplementary characters.支持 BMP 和补充字符。
			Requires a maximum of four bytes per multibyte character.每个多字节字符最多需要四个字节。
			utf8mb4 contrasts with the utf8mb3 character set, which supports only BMP characters and uses a maximum of three bytes per character:
			Utf8mb4与 utf8mb3字符集对比,后者只支持 BMP 字符,每个字符最多使用三个字节:
			对于补充字符,utf8mb4需要4个字节来存储它,而 utf8mb3根本不能存储字符。 当将 utf8mb3列转换为 utf8mb4时,您不必担心转换补充字符,因为将没有补充字符。
		解决的方案有两种:
			使用 utf8mb4 的 mysql 编码来容纳这些字符;
			过滤掉这些特殊的表情字符。
	12 mysql 与sqlserver中的函数对应修改。
		sqlServer:DATEADD() 函数在日期中添加或减去指定的时间间隔。
			DATEADD(datepart,number,date) 
				date 参数是合法的日期表达式。
				number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数
			 SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate  FROM Orders
			 DATEADD(MINUTE, -5, GETUTCDATE())
		Mysql:DATE_ADD() 函数向日期添加指定的时间间隔。
				DATE_ADD(date,INTERVAL expr type)
				date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
			 SELECT OrderId,DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders
			 DATE_ADD(NOW(),INTERVAL -5 MINUTE);
	13:Mysql和sqlserver中的boolean类型。sqlserver会自动转为true和flase,mysql不会。
		SLQserver 采用bit进行存储boolean ,mysql采用tinyint
		MySQL中设置tinyint的字段类型,在后天获取字段信息却获得true或者false。通过网上查找发现,MySQL中不支持Boolean类型,通过tinyhint来表示Boolean类型。当tinyint为0时代表false,其它数值为true。可以在查询字段后面添加*1来获取真实结果
			 一、解决读取数据为true/false的问题
			 场景:
			   字段:status (值为1,2,3)
			   类型:tinyint  长度:1(有符号的)
			   结果:查询出来的数据列表,状态值不管是1还是2还是3,都是"boolean true"
			 分析并解决:·
			   分析:由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]
			   解决:tinyint类型长度的问题,当我把长度改成4时,查询结果就正常了
	14.mysql修改所有的类型的长度和字段类型
		select table_name,column_name,column_type,column_key,column_comment from information_schema.Columns 
					where  table_schema='LearningGenieDb'
					
		// 
		select CONCAT('alter table ',table_name,' ','modify `',column_name,'` TINYINT(1);' ) from information_schema.Columns 
					where  table_schema='LearningGenieDb' and column_type='tinyint(4)'
	15.Mysql查询锁表和当前事务
		select * from information_schema.INNODB_TRX  #查看当前运行的所有事务
		select * from information_schema.INNODB_LOCKS # 当前出现的锁
		SELECT * from information_schema.INNODB_LOCK_WAITS # 锁等待的对应的关系
		查询阻塞事务列表:
			select * from innodb_locks where LOCK_TRX_ID_IN (SELECT BLOCKING_TRX_ID From INNDB_LOCK_WAITS)
		查询特定表上的锁的列表:
			SELECT * from INNODB_LOCKS WHERE LOCK_TABLE='db_name.table_name'
		当遇到怀疑并发引起的问题时首选的是: 主要的特征:线程长时间为“sleep”状太
		select * from information_schema.processlist 
		show PROCESSLIST
		
		show ENGINE INNODB STATUS	
	16 .MySQL 时间类型datetime字段 精确到毫秒问题
		sqlserver 中使用的datetime类型可以精确到毫秒级,所以在mysql中要精确到毫秒级的。
		建表时指定datetime类型的字段长度,DATETIME(3)是保留3位毫秒数,修改后解决该问题
	17.查询表中的字段以逗号分隔
		SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",") FROM information_schema.COLUMNS
		WHERE TABLE_SCHEMA = 'LearningGenieDb' AND TABLE_NAME = 'table_name'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值