mysql创建表

MySQL 大表数据定期归档

拜拜、爱过 提交于 2020-04-02 19:40:56
数据库有一张表数据量很大,真正WEB项目只用到一个月内的数据,因此把一个月前的旧数据定期归档。 1 - 创建一个新表,表结构和索引与旧表一模一样 create table table_news like table_name; 2 - 新建存储过程,查询30天的数据并归档进新数据库,然后把30天前的旧数据从旧表里删除 delimiter $ create procedure sp() begin insert into tb_new select * from table_namewhere create_time < NOW() - INTERVAL 30 DAY; delete from db_smc.table_namewhere create_time < NOW() - INTERVAL 30 DAY; end 3 - 创建EVENT,每天晚上凌晨00:00定时执行上面的存储过程 create event if not exists event_temp on schedule every 1 day on completion preserve do call sp(); 备注: 第一次执行存储过程的时候因为历史数据过大, 可能发生意外让该次执行没有成功。重新执行时会遇到报错ERROR 1205 (HY000): Lock wait timeout exceeded;

mysql 分表场景与开发

拥有回忆 提交于 2020-03-28 16:49:01
第一种, 开发之前估计该表的数据量以后会比较大,比如商城的订单表order,那么在开发之前,创建10个一模一样的order表,然后userid尾号为1的,其订单都放进order1,userid尾号为2的,放进order2,以此类推,这样可以减少表的数据量,加快访问速度 第二种,随着项目的平稳运营,唯一的订单表数据量变得非常大,查询速度很慢,可以做分表 新创建几个一摸一样的订单表,order1,order2,order3(这些表的id不能设为自增).... 再创建一个合并表allorder(存储引擎得是merge存储引擎,也就是mrg_myisam) CREATE TABLE allorder ( id BIGINT ( 20 ) NOT NULL , subject VARCHAR ( 200 ) NOT NULL , content TEXT NOT NULL , PRIMARY KEY ( id ) ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO union =( order1 , order2 , order3 ,...); 这里INSERT_METHOD=0在某些版本可能不工作,需要改成INSERT_METHOD=NO 注意,合并表也必须和前面的表有相同的结构,类型,长度,包括字段的顺序都必须一致

mysql整理

时光怂恿深爱的人放手 提交于 2020-03-27 15:25:23
1.在 mysql 数据库内如何让自动增加字段从0开始 truncate table 表名 2.表中有A B C三列时,用SQL语句实现:当A列大于B列时选择A列,否则选择B列,当B列大于C列时选择B,否则选择C列 select case when A > B then A else B end, case when B > C then B else C end; 3. Redis Redis 是一个 key-value 存储系统。支持五种数据类型: (1) string (字符串) (2) list (列表) (3) hash ( hash 表) (4) set (集合) (5) zset (有序集合) 4. MyISAM 和 InnoDB 的区别 MyISAM 特点 (1)不支持事务、外键 (2)支持表级锁,不支持行级锁 (3)拥有较高的查询效率 InnoDB 特点 (1)支持事务、外键 (2)支持行级锁,并发性更高,需要的花销也更高 如果执行大量的 select , MyISAM 速度更快,如果执行大量的 insert 或 update , InnoDB 速度更快。执行 select count(*) from table 时, MyISAM 只是简单的读出保存好的行数,而 InnoDB 要扫描整个表来计算有多少行,如果执行 select count(*) from

Mysql修改表的编码格式

蹲街弑〆低调 提交于 2020-03-26 09:18:12
3 月,跳不动了?>>> 在工作中发现的问题,在mysql库中,如果两个表的编码格式不同,会导致索引失效,比如:表A的编码格式是utf8,但是表B的编码格式是utf8mb4,就会导致两张表联表查询时非常缓慢。所以需要修改已经创建好的表的编码格式。 先说结论 修改"TABLE_NAME"表的编码格式 ALERT TABLE TABLE_NAME DEFAULT CHARACTER SET utf8; 修改"TABLE_NAME"表的所有字段的编码格式 ALERT TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8; 来源: oschina 链接: https://my.oschina.net/u/3158188/blog/3211646

Mysql数据库分区和分表

安稳与你 提交于 2020-03-19 17:37:39
3 月,跳不动了?>>> 一: 分区简介 分区是根据一定的规则,数据库把一个表分解成多个更小的、更容易管理的部分。就访问数据库应用而言,逻辑上就只有一个表或者一个索引,但实际上这个表可能有N个物理分区对象组成,每个分区都是一个独立的对象,可以独立处理,可以作为表的一部分进行处理。分区对应用来说是完全透明的,不影响应用的业务逻辑。 分区有利于管理非常大的表,它采用分而治之的逻辑,分区引入了分区键的概念,分区键用于根据某个区间值(或者范围值)、特定值列表或者hash函数值执行数据的聚集,让数据根据规则分布在不同的分区中,让一个大对象碧昂城一些小对象。 MySQL分区即可以对数据进行分区也可以对索引进行分区。 分区类型 range分区:基于一个给定的连续区间范围(区间要求连续并且不能重叠),把数据分配到不同的分区 list分区:类似于range分区,区别在于list分区是居于枚举出的值列表分区,range是基于给定的连续区间范围分区 hash分区:基于给定的分区个数,把数据分配到不同的分区 key分区:类似于hash分区 注意:无论哪种分区,要么你分区表上没有主键/唯一键,要么分区表的主键/唯一键都必须包含分区键,也就是说不能使用主键/唯一键字段之外的其它字段分区。 ####MySQL分区的有限主要包括以下4个方面: 和单个磁盘或者文件系统分区相比,可以存储更多数据 优化查询

Mysql中数据表的完整复制

守給你的承諾、 提交于 2020-03-18 20:24:55
将 production 数据库中的 mytbl 表快速复制为 mytbl_new,2个命令如下: 12 CREATE TABLE mytbl_new LIKE production.mytbl;INSERT mytbl_new SELECT * FROM production.mytbl; 第一个命令是创建新的数据表 mytbl_new ,并复制 mytbl 的数据表结构。 第二个命令是讲数据表 mytbl 中的数据复制到新表 mytbl_new 。 注:production.mytbl是指定要复制表的数据库名称为 production 。它是可选的。 假如没有production. ,MySQL数据库将会假设mytbl在当前操作的数据库。 来源: https://www.cnblogs.com/amboyna/archive/2009/07/10/1520402.html

MySQL(多表的表记录的查询)

爷,独闯天下 提交于 2020-03-18 12:57:45
一、外键约束 1、创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY KEY auto_increment, name VARCHAR (20), age INT , is_marriged boolean -- show create table ClassCharger: tinyint(1) ); INSERT INTO ClassCharger (name,age,is_marriged) VALUES ("冰冰",12,0), ("丹丹",14,0), ("歪歪",22,0), ("姗姗",20,0), ("小雨",21,0); ----子表 CREATE TABLE Student( id INT PRIMARY KEY auto_increment, name VARCHAR (20), charger_id TINYINT, --切记:作为外键一定要和关联主键的数据类型保持一致 -- [ADD CONSTRAINT charger_fk_stu]FOREIGN KEY (charger_id) REFERENCES ClassCharger(id) ) ENGINE=INNODB; INSERT INTO Student(name

MySQL 常用命令速查表:日常开发、求职面试必备良方!

旧巷老猫 提交于 2020-03-17 18:47:46
备注 :PDF 版本无法上传;如有需要,欢迎留下邮箱,我发给你。 文章目录 连接服务器 查看帮助 查看连接 退出连接 账户和权限 创建用户 查看用户 修改密码 锁定/解锁用户 用户授权 查看权限 撤销权限 管理角色 删除用户 管理数据库 查看数据库 创建数据库 切换数据库 删除数据库 管理表 创建表 查看所有表 查看表结构 增加字段 修改字段 删除字段 删除表 索引与约束 创建索引 查看索引 修改索引 删除索引 增加约束 删除约束 查询语句 单表查询 查询条件 排序操作 限定数量 分组操作 多表连接 子查询 集合运算 通用表表达式 DML 语句 插入数据 更新数据 删除数据 合并数据 事务控制 开始事务 提交事务 回滚事务 事务保存点 视图 创建视图 查看所有视图 查看视图定义 重命名视图 删除视图 存储过程/函数 创建存储过程/函数 调用存储过程/函数 删除存储过程/函数 触发器 创建触发器 查看触发器 删除触发器 备份与恢复 使用 mysqldump 备份数据库 使用 mysql 还原数据库 速查表(Cheat Sheet),顾名思义就是为了在需要的时候方便快速查询相关知识点。本文精心为大家整理了 MySQL 中最常使用的语句和命令,绝对是日常开发、求职面试的必备良方!😎 连接服务器 使用 mysql 客户端工具连接 MySQL 服务器的命令行如下: mysql [ -h

MySQL查看表中的约束

☆樱花仙子☆ 提交于 2020-03-17 06:34:27
MySQL 中可以使用 SHOW CREATE TABLE 语句来查看表中的约束。 查看数据表中的约束语法格式如下: SHOW CREATE TABLE < 数据表名 > ; 创建数据表 tb_emp8 并指定 id 为主键约束,name 为唯一约束,deptId 为非空约束和外键约束,然后查看表中的约束,输入SQL语句运行结果如下。 mysql > CREATE TABLE tb_emp8 - > ( - > id INT ( 11 ) PRIMARY KEY , - > name VARCHAR ( 22 ) UNIQUE , - > deptId INT ( 11 ) NOT NULL , - > salary FLOAT DEFAULT 0 , - > CHECK ( salary > 0 ) , - > FOREIGN KEY ( deptId ) REFERENCES tb_dept1 ( id ) - > ) ; Query OK , 0 rows affected ( 0.37 sec ) mysql > SHOW CREATE TABLE tb_emp8 \G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1. row * * * * * * * * * * * * * * * * * * * * *

MySQL内存表-临时表

◇◆丶佛笑我妖孽 提交于 2020-03-13 20:22:12
HEAP表是访问数据速度最快的MySQL表,他使用保存在内存中的散列索引。但如果MySQL或者服务器重新启动,表中数据将会丢失. 用法:如论坛的在线人数统计,这种表的数据应该是无关紧要的,就几个简单的字段,数据也不多,记录数怎么也不会超过1000吧,但是操作是最频繁的(基本用户的每次动作都要更新这个表). 如何创建内存表? 创建内存表非常的简单,只需注明 ENGINE= MEMORY 即可: 1 CREATE TABLE `tablename` ( `columnName` varchar(256) NOT NUL) ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=100000000; 注意: 当内存表中的数据大于max_heap_table_size设定的容量大小时,mysql会转换超出的数据存储到磁盘上,因此这是性能就大打折扣了,所 以我们还需要根据我们的实际情况调整max_heap_table_size,例如在.cnf文件中[mysqld]的下面加入: max_heap_table_size = 2048M 另外在建表语句中还可以通过MAX_ROWS来控制表的记录数。 内存表使用哈希散列索引把数据保存在内存中,因此具有极快的速度,适合缓存中小型数据库,但是使用上受到一些限制。 1、heap对所有用户的连接是可见的