sql增加字段

Sql索引

两盒软妹~` 提交于 2020-02-02 00:47:41
1.为什么要给表加上主键? 建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行。 一个没加主键的表,并不能被称之为「表」。一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐, 跟我认知中的「表」很接近。 如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是上面说的「平衡树」结构,换句话说,就是整个表就变成了一个索引。没错, 再说一遍, 整个表变成了一个索引,也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键, 一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。 假如我们执行一个SQL语句: select * from table where id = 1256; 首先根据索引定位到1256这个值所在的叶结点,然后再通过叶结点取到id等于1256的数据行。 2.为什么加索引后会使查询变快? 平衡树结构(一棵非常茂盛和节点非常多的树),假设这棵树有10层,那么只需要10次IO开销就能查找到所需要的数据, 速度以指数级别提升,用大O标记法就是O(log n),n是记录总树,底数是树的分叉数,结果就是树的层次数。 3.为什么加索引后会使写入、修改、删除变慢? 索引能让数据库查询数据的速度上升, 而使写入数据的速度下降

MySQL 索引总结

别等时光非礼了梦想. 提交于 2020-01-26 15:56:02
1、索引是做什么的? 想象一下,你面前有本词典,数据就是书的正文内容,你就是那个cpu,而索引,则是书的目录 索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。 表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。 大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B树中存储。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引。 2、索引越多越好? 大多数情况下索引能大幅度提高查询效率,但: 数据的变更(增删改)都需要维护索引,因此更多的索引意味着更多的维护成本 更多的索引意味着也需要更多的空间 (一本100页的书,却有50页目录?) 过小的表,建索引可能会更慢 (读个2页的宣传手册,你还先去找目录?) 3、索引的字段类型问题 text类型,也可建索引(需指定长度) myisam存储引擎索引键长度综合不能超过1000字节 用来筛选的值尽量保持和索引列同样的数据类型 尽量减少like,但不是绝对不可用,"xxxx%" 是可以用到索引的, 想象一下,你在看一本成语词典,目录是按成语拼音顺序建立,查询需求是,你想找以 "一"字开头的成语("一%"),和你想找包含一字的成语("%一%")

MySQL开发规范

只愿长相守 提交于 2020-01-24 15:25:01
MySQL开发规范 基于阿里数据库设计规范扩展而来 : https://yq.aliyun.com/articles/709387 参考,58到家MySQL军规升级版 : https://www.jianshu.com/p/c077581693fb 基础规范 表存储引擎必须使用InnoDB MySQL常见的三种存储引擎(storage_engine) : InnoDB、MyISAM、MEMORY 存储引擎就是指 表的类型以及表在计算机上的存储方式 通过“SHOW ENGINES”语句来查看 MySQL中的存储引擎 特性 innoDB MyISAM Memory 事务安全 支持 无 无 存储限制 64T 有 有 空间使用 高 低 低 内存使用 高 低 高 插入数据的速度 低 高 高 读取数据的速度 低 高 高 对外键的支持 支持 无 无 全文索引 不支持 支持 InnoDB存储引擎 InnoDB给MySQL的表提供了 事务处理 、 回滚 、 崩溃修复能力 和 多版本并发控制 的事务安全 InnoDB存储引擎总支持 AUTO_INCREMENT 。自动增长列的值不能为空,并且值必须唯一。MySQL中规定自增列必须为主键 InnoDB还支持 外键(FOREIGN KEY) 。外键所在的表叫做子表,外键所依赖(REFERENCES)的表叫做父表,父表中被子表外键关联的字段必须为主键。

MySQL基础笔记

做~自己de王妃 提交于 2020-01-24 14:23:44
本文摘自https://blog.csdn.net/u010947693/article/details/54863726,仅供学习参考使用 连接数据库: 一般都是一个API函数(不同语言不同,但参数相似)XXX_connect( server,user,passwd,newlink,clientflag); 创建与删除一个数据库 在PHP是使用mysql_query(sql:是SQL的查询命令,connection:可选为SQL标识符) 选择数据库:mysql_select_db(dbname:数据名,connection:可选规定MySQL连接) MYSQL的数据类型有 1,2,3,4,8,字节的整型,还有浮点,双精型。 创建数据表 CREAT TABLE tablename(colum_name :属性名 column_type:属性类型); 删除数据表 DROP TABLE tablename; 插入数据: INSERT INTO table_name(field1,field2,field2 ....)VALUES(value1 ,value2,value,“value3””)value就是数据的值。 查询数据: SELECT column_name,column_name FROM tablename [WHERE Clause][OFFSET M][LIMIT N]

mysql性能优化

旧街凉风 提交于 2020-01-24 13:46:15
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi /etc/my.cnf [mysqld]中添加: query_cache_size = 20M #缓存的大小

数据库建表原则大揭秘

£可爱£侵袭症+ 提交于 2020-01-23 03:05:30
数据库设计器 1. 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计录入界面大有好处。 〖例1〗:一份员工履历资料,在人力资源信息系统中,就对应三个基本表:员工基本情况表、社会关系表、工作简历表。这就是“一张原始单证对应多个实体”的典型例子。 2. 主键与外键 一般而言,一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实体, 可以定义主键,也可以不定义主键(因为它无子孙), 但必须要有外键(因为它有父亲)。 主键与外键的设计,在全局数据库的设计中,占有重要地位。当全局数据库的设计完成以后,有个美国数据库设计专家说:“键,到处都是键,除了键之外,什么也没有”,这就是他的数据库设计经验之谈,也反映了他对信息系统核心(数据模型)的高度抽象思想。因为:主键是实体的高度抽象,主键与外键的配对,表示实体之间的连接。 3. 基本表的性质 基本表与中间表、临时表不同,因为它具有如下四个特性: (1) 原子性。基本表中的字段是不可再分解的。 (2) 原始性。基本表中的记录是原始数据(基础数据)的记录。 (3) 演绎性。由基本表与代码表中的数据

MySql数据库优化

…衆ロ難τιáo~ 提交于 2020-01-21 14:05:44
数据库优化,是一种综合性的技术,不是通过某一种方式让数据库效率提高很多,而是通过各个方面的优化,来是数据库效率明显的稳步的提高。 主要包括以下: 1、库表的设计优化(三种范式) 2、 库表添加合适的索引(普通索引+主键索引+唯一索引+全文索引) 3、 分表技术-水平分割与垂直分割 4、 读写分离(add/delete/update与select分开) 5、 多用存储过程和触发器(模块化编程) 6、 优化MqSql配置(配置最大并发数,调整缓存大小,my.ini) 7、SQL优化与慢查询 8、 定时清楚垃圾数据,定时进行碎片整理( MyISAM ) 除此之外,还有 MqSql服务器硬件升级 以下进行详细描述 题外话: 存储引擎: MyISAM : 查询速度快,插入速度快,但不支持 事务 ,碎片多; InnoDB :5.5版本后Mysql的默认数据库,支持事务,支持ACID事务,支持行级锁定; Memory :所有数据置于内存中,拥有极高的插入,适合频繁的数据更新,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失,不需要保存滴; 数据库三种模式结构/三级模式 外模式(用户):用户所能看到的数据视图,可通过数据库操纵语言对数据进行操作; 模式(概念):用户视图的最小并集,所有数据的逻辑结构和概念的描述; 内模式(物理):实际存储组合,内部视图

MySql笔记(一)

假装没事ソ 提交于 2020-01-19 18:37:41
目录 MySql笔记(一) 每天给自己一个希望,努力做好自己,不为明天烦恼,不为昨天叹息。当梦想还在,告诉自己:努力,就总能遇见更好的自己! MySql笔记(一) 1、创建数据库以及删除 1.创建数据库语法:(命令行窗口操作) CREATE DATABASE DATABASENAME 示例:创建名为MySQLTest的数据库 CREATE DATABASE MySQLTest; 2.删除数据库语法:(命令行窗口操作) DROP DATABASE DATABASENAME 示例:删除名为MySQLTest的数据库 DROP DATABASE MySQLTest; 2、Sql常用数据类型 1.整数类型:tinyint(微小的整数),smallint(小的整数),int(普通的整数),bigint(大的整数) 存储的空间不同:tinyint只有一个字节,smallint有两个字节,int有四个字节,bigint有8个字节 2.小数点的数据类型:定点数(decimal(p,s))和浮点数float(p,s)四个字节,double(p,s)八个字节。 定点数的小数点是固定的,而浮点数的小数点是不固定的,区别:定点数的小数点是固定的所以他的小数精度准确, 而浮点数的小数点是不固定的,所以浮点数的小数点的精度没有定点数的精度准确度高。但是浮点数表示的范围更大 3.日期/时间类型:date

数据库优化方案整理

会有一股神秘感。 提交于 2020-01-13 19:20:09
数据库设计优化 使用varchar(变长)而非char 使用tinyint、smallint、mediumint而非int,非负加unsigned 尽量使用数字型字段,不要把数字型设计为字符型 合理使用索引:单列索引(普通索引index–>唯一索引unique index–>主键索引primary key)、组合索引(最左匹配)、全文索引(MyISAM引擎 char、varcahr、text)、空间索引(空间数据类型)。索引提高了select效率,降低了insert和update效率(<=6) 分表:(垂直)字段较多的表,有些字段使用频率较低,分离出新表;(水平)数据量大的按时间、区间分表 大量连接查询的表创建临时表,减少查询时的连接耗时 适当增加冗余字段,减少连接查询(单表>>多表) sql语句优化(括号中为替代方案或注释) 避免跳过索引而进行全表扫描 :避免where中null值判断(使用默认值0)、!=、<>、or(两边字段都为索引或使用union)、in(exists)、not in(between)、对字段进行表达式操作、对字段进行函数操作、like ‘%xxx’(like ‘xxx%‘)。 禁止使用 ‘*’ 使用join替代子查询,避免频繁创建和删除临时表 用where替代having order by只有在order

oracle操作表的sql复习

寵の児 提交于 2020-01-12 15:50:48
oracle中对于表的操作有如下四种: 一、创建表 格式语法:     create table table_name(      字段名1 字段类型 约束类型,      字段名2 字段类型 约束类型,      ...     ); 例如: create table jason1( userid number(10) primary key, username varchar2(10) not null ); 需要注意的是:char 和varchar2的区别,char为固定字符,字段大小没有用完则用空填充,varchar2为变长字符。 number(总长度,小数长度)小数长度不能大于总长度。例如code number(3,2); 二、修改表(添加新字段,删除字段,修改表名,修改字段类型,修改列名,给字段添加注释) 添加新字段 1.添加一个字段时:alter table jason1 add( jason char(10)); 2.添加多个字段时:alter table jason1 add( jason1 char(10),           hello char(10) not null,           birthday date); 3.给字段添加备注:comment on column 库名.表名.字段名 is '输入的备注'; 如:我要在ers