mysql修改字段类型

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

天涯浪子 提交于 2019-12-08 18:18:57
此文是根据杨尚刚在【QCON高可用架构群】中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处。 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计。前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计。 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视。 MySQL历史 1979年,Monty Widenius写了最初的版本,96年发布1.0 1995-2000年,MySQL AB成立,引入BDB 2000年4月,集成MyISAM和replication 2001年,Heikki Tuuri向MySQL建议集成InnoDB 2003发布5.0,提供了视图、存储过程等功能 2008年,MySQL AB被Sun收购,09年推出5.1 2009年4月,Oracle收购Sun,2010年12月推出5.5 2013年2月推出5.6 GA,5.7开发中 MySQL的优点 使用简单 开源免费 扩展性“好”,在一定阶段扩展性好 社区活跃 性能可以满足互联网存储和性能需求,离不开硬件支持 上面这几个因素也是大多数公司选择考虑MySQL的原因。不过MySQL本身存在的问题和限制也很多,有些问题点也经常被其他数据库吐槽或鄙视

MySQL大表优化方案

坚强是说给别人听的谎言 提交于 2019-12-08 18:12:14
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

MySQL数据库 (下)

不羁岁月 提交于 2019-12-08 05:18:29
MySQL数据库 (下) MySQL高级应用 一、 MySQL联结表 : 预备知识: 1、关系表:把信息分解成多个表, 一类数据 一个表, 各表 通过某些 共同的值相互关联 (所以才称为 关系数据库 )。 2、联结:联结是一种机制,用来在一条SELECT语句中关联表,因此称为联结。通过联结,一条SELECT语句可以联结多个表返回一组输出。 3、完全限定列名: 表名+ . +列名 。 4、笛卡儿积(叉联积):由没有联结条件表关系返回的结果为笛卡儿积,结果的行数是第一个表的行数乘以第二个表的行数。 5、表别名和列别名(SQL 一个别名只存在于查询期间。表别名只会在查询执行中使用。与列别名不同,表别名不返回MySQL客户端):SELECT 列名 AS 列别名 FROM 表名 AS 表别名 (Oracle中没有AS,别名设置不用AS,直接指定别名即可)   一、 INNER JOIN(内连接/等值连接)--获取两个表中字段匹配关系的记录; mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author; mysql> SELECT a.runoob_id, a.runoob

MYSQL面试必读

孤人 提交于 2019-12-07 16:03:36
Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用。表锁,不会出现死锁,适合小数据,小并发。 2.innodb是支持事务的存储引擎,合于插入和更新操作比较多的应用,设计合理的话是行锁(最大区别就在锁的级别上),适合大数据,大并发。 数据表类型有哪些 答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。 MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。 InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。 c. mysql库主从读写分离。 d. 找规律分表,减少单表中的数据量提高查询速度。 e。添加缓存机制,比如memcached,apc等。 f. 不经常改动的页面,生成静态页面。 g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?

MySQL_约束条件

烈酒焚心 提交于 2019-12-07 16:02:37
目录 八个约束条件 1.非空约束 NOT NULL 2.主键约束 PRIMARY KEY 3.多字段联合主键(复合主键) 4.唯一约束 UNIQUE 5.默认约束 DEFAULT 6.外键约束 FOREIGN KEY 7.自增约束 auto_increment 八个约束条件 只有唯一约束才有约束名 非空约束: NOT NULL 主键约束: PRIMARY KEY 3.多字段联合主键(复合主键) 唯一约束: UNIQUE 默认约束: DEFAULT 外键约束: FOREIGN KEY 自增约束: auto_increment 检查约束: auto_increment 1.非空约束 NOT NULL 非空约束___创建表时添加约束 create table 表名 ( a int not null, b int not null, ); 非空约束___修改表时添加约束 alter table 表名 modify 字段名 类型 not null; 非空约束___删除约束 alter table 表名 modify 字段名 类型; 2.主键约束 PRIMARY KEY 主键约束___创建表时添加约束. create table 表名 ( a int, b int, c int, primary key(字段1,字段2) ); create table 表名 ( a int, b int, c

MySQL_数据表命令

落爺英雄遲暮 提交于 2019-12-07 15:56:32
目录 数据表操作 1.创建数据表: 2. 修改表结构: 数据表查看 1.查看数据库中所有表的信息 2.查看表结构 3.查看创建表时所输入的命令 4.删除数据表 数据表操作 关于Mysql的数据类型, 点击一下 1.创建数据表: create [temporapy] table [if not exists] <表名> [(<字段名> <数据类型> [完整性约束条件] [,...])] [表的选项]; temporapy表示新创建的表为临时表 表的选项用于描述如何春促引擎、字符集等选项 engine=存储引擎类型 default charset=字符集类型 2. 修改表结构: 1. 增加一个字段 : //first 代表第一个位置 //after 代表在字段名2之后插入字段名1 alter table 数据表名 add (<新字段><数据类型>[<完整约束条件>][first|after已存在的字段名][,...]) 2. 修改字段数据类型 alter table 数据表名 modify column(<字段名><新数据类型>[<完整性约束条件>]) 3. 修改字段名 alter table<表名> change <旧列名><新列名><新数据类型> 4. 修改字段位置 alter table 数据表名 modify 字段名1 数据类型 first; ·················

MySQL大表优化方案

☆樱花仙子☆ 提交于 2019-12-07 15:07:34
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

MySQL修改表列名

亡梦爱人 提交于 2019-12-06 22:31:04
京东2016实习生招聘 Java开发工程师 在MySql中,如果要修改表的列名,下列语句的语法正确的是 A ALTER TABLE 表名字 CHANGE 列名称 新列名称 B ALTER TABLE 表名字 ALTER 列名称 新列名称 C ALTER TABLE 表名字 MODIFY列名称 新列名称 D ALTER TABLE 表名字 列名称 新列名称 正确答案 : A 知识点 修改某个表的字段类型及指定为空或非空 alter table 表名称 change 字段名称 新字段名称 字段类型 [是否允许非空]; alter table 表名称 modify 字段名称 字段类型 [是否允许非空]; 扩展 创建数据库 > CREATE DATABASE database-name 删除数据库 >drop database dbname 查询所有数据表 >show tables; 查询表的字段信息 > desc 表名称; 添加表字段 >alter table table1 add transactor varchar( 10 ) not Null; >alter table table1 add id int unsigned not Null auto_increment primary key 如果要删除某一字段,可用命令: >ALTER TABLE 表名称 DROP 字段名;

数据库----mysql表的约束和查询

江枫思渺然 提交于 2019-12-06 16:16:30
一,mysql中表的约束   为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以 确保数据库中存储的数据正确、有效、相容。 约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: NOT NULL :非空约束,指定某列不能为空; 是否可空,null表示空,非字符串 not null - 不可空 null - 可空 mysql> create table t12 (id int not null); Query OK, 0 rows affected (0.02 sec) mysql> select * from t12; Empty set (0.00 sec) mysql> desc t12; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row

1000行MySQL学习笔记,不怕你不会,就怕你不学!

旧时模样 提交于 2019-12-06 12:47:49
🔸Windows服务 -- 启动MySQL net start mysql-- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格) 🔸连接与断开服务器 mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息 🔸数据库操作 -- 查看当前数据库 SELECT DATABASE();-- 显示当前时间、用户名、数据库版本 SELECT now(), user(), version()-- 创建库 CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name-- 查看已有库 SHOW DATABASES[ LIKE PATTERN ]-- 查看当前库信息 SHOW CREATE DATABASE 数据库名-- 修改库的选项信息 ALTER DATABASE 库名 选项信息-- 删除库 DROP DATABASE[ IF EXISTS] 数据库名 同时删除该数据库相关的目录及其目录内容 🔸表的操作 *请左右滑动阅览 -- 创建表 CREATE [