mysql创建表

MySQL优化:如何避免回表查询

Deadly 提交于 2019-11-30 14:50:03
参考: https://www.cnblogs.com/myseries/p/11265849.html InnoDB有两大类索引:聚集索引(clustered index)和普通索引(secondary index) nnoDB 聚集索引 的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引: (1)如果表定义了PK,则PK就是聚集索引; (2)如果表没有定义PK,则第一个not NULL unique列是聚集索引; (3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引; InnoDB 普通索引 的叶子节点存储主键值。 两个B+树索引分别如上图:   (1)id为PK,聚集索引,叶子节点存储行记录;   (2)name为KEY,普通索引,叶子节点存储PK值,即id; 既然从普通索引无法直接定位行记录,那 普通索引的查询过程是怎么样的呢? 通常情况下,需要扫码两遍索引树。 这就是所谓的 回表查询 ,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。 总结:回表查询就是查询时先定位主键值,再定位行记录,会查询2次索引树。   如何实现索引覆盖? 常见的方法是: 将被查询的字段,建立到联合索引里去 。 如将下面第二个查询中sex加入到联合索引中,就不需要回表了。 select id,name from user where name=

Django-模型层(单表操作)

落爺英雄遲暮 提交于 2019-11-30 14:49:34
目录 1.ORM简介 2.单表操作 2.1创建表 2.2添加表纪录  2.3查询表纪录 2.4删除表纪录 2.5修改表纪录 1.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 ORM是“对象-关系-映射”的简称。(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大,但是别人用不了) 类对象--->sql--->pymysql--->mysql服务端--->磁盘,orm其实就是将类对象的语法翻译成sql语句的一个引擎,明白orm是什么了,剩下的就是怎么使用orm,怎么来写类对象关系语句。 原生sql和python的orm代码对比 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (20), gender BIT default 1, birthday DATA , department VARCHAR (20),

mysql多表关系

让人想犯罪 __ 提交于 2019-11-30 14:26:23
字段操作 create table tf1( id int primary key auto_increment, x int, y int ); # 修改 alter table tf1 modify x char(4) default ''; alter table tf1 change y m char(4) default ''; # 增加 mysql>: alter table 表名 add 字段名 类型[(长度) 约束]; # 末尾 eg>: alter table tf1 add z int unsigned; mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] first; # 首位 eg>: alter table tf1 add a int unsigned first; mysql>: alter table 表名 add 字段名 类型[(宽度) 约束] after 旧字段名; # 某字段后 eg>: alter table tf1 add xx int unsigned after x; mysql>: alter table 表名 drop 字段名; # 删除字段 eg>: alter table tf1 drop a; 多表关系 """ 一对一:丈夫-妻子,用户-身份证,作者-作者详情 一对多:部门-员工,班级-学生,书

MySQL 列级约束和表级约束

眉间皱痕 提交于 2019-11-30 13:25:02
一,六大约束 NOT NULL 非空 PRIMARY KEY 主键 UNIQUE 唯一 CHECK 检查约束,MySQL 不支持,语法不报错但无效果 FOREIGN KEY 外键.限制两表关系,通常在从表引入外键约束,引入主表中某列的值,保证从表该字段的值必须来源于主表关联列的值 DEFAULT 默认值/系统设定值 二,表级约束和列级约束的定义: 表级约束: 对多个数据列建立的约束,称为表级约束表级约束只能在列定义后声明 列级约束:对一个数据列建立的约束,称为列级约束列级约束既可以在列定义时声明,也可以在列定义后声明 ps:简单来理解的话就是列级约束针对的是单列,表级约束针对的是整个表,如此引伸出来 六大约束都可在列级约束使用,但外键无效果(外键是约束两个表之间的关系) 显而易见,非空和默认不可在表级约束中使用 三,添加约束的时机: 创建表时:   #创建主表,实验外键   CREAT TABLE IF NOT EXISTS major(         id INT,         major_name varchar(20)   );   #创建从表,实验表级/列级约束   CREAT TABLE IF NOT EXISTS students(         #添加表级约束,直接在类型后添加即可         id INT PRIMARY KEY,        

MySQL数据库基础(6)表的操作

笑着哭i 提交于 2019-11-30 12:54:09
一、表操作     1、指定字符集建库         下面我们以默认格式的old库为例讲解,注意,由于我们并未特别设置数据库及客户端的字符集,因此,我们先指定字符集建库: mysql> create database oldboy; Query OK, 1 row affected (0.00 sec) mysql> show create database oldboy; +----------+-------------------------------------------------------------------+ | Database | Create Database | +----------+-------------------------------------------------------------------+ | oldboy | CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET latin1 */ | +----------+-------------------------------------------------------------------+ 1 row in set (0.00 sec)     2、建立表         1)建表的基本命令语法:

Mysql 数据库表内存使用查询及空洞(碎片)清理

孤街浪徒 提交于 2019-11-30 11:57:41
查询数据库表内存使用详情 SELECT * FROM information_schema.tables WHERE TABLE_NAME = 'table_name' 字段及注释 Table_catalog 数据表登记目录 Table_schema 数据表所属的数据库名 Table_name 表名称 Table_type 表类型[ system view|base table ] Engine 使用的数据库引擎[ MyISAM|CSV|InnoDB ] Version 版本,默认值10 Row_format 行格式[ Compact|Dynamic(动态表)|Fixed(静态表_纯字符) ] Table_rows 表里所存多少行数据 Avg_row_length 平均行长度 Data_length 数据长度(B) Max_data_length 最大数据长度(B) Index_length 索引长度(B) Data_free 空间碎片 Auto_increment 做自增主键的自动增量当前值 Create_time 表的创建时间 Update_time 表的更新时间 Check_time 表的检查时间 Table_collation 表的字符校验编码集 Checksum 校验和 Create_options 创建选项 Table_comment 表的注释、备注 数据库碎片清理

Mysql 表名大小写敏感

萝らか妹 提交于 2019-11-30 11:05:20
默认情况下,mysql在创建数据库对象时,是区分大小写的。故与microsoft之间进行移植时,要特别注意是否存在问题。在mysql中大小写与参数lower_case_table_names有很大关系。 以下为官方解释: If set to 0, table names are stored as specified and comparisons are case sensitive. If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive. If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases. 当设置为0时,存储和比较都是大小写敏感的;当设置为1是存储时会转换为小写,比较时不区分大小写;当设置为2时候,存储时区分大小写,比较的时与转换为小写。此选项对数据库名和数据表名起作用。 lower_case_table_names是个只读变量,不能直接设置生效,必须在配置文件中设置并重启mysqld服务。 mysql> set lower

mysql多表关系

房东的猫 提交于 2019-11-30 10:58:29
mysql多表关系 多表关系是关系型数据库特有的 三种关系 一对一关系 一对多关系 多对多关系 总结 一对一 例子:用户和用户信息 外键设置在用户上,外键字段唯一非空 添加 无级联:先增加被关联表记录(用户信息表),再增加关联表记录(用户表) 级联:相同 删除 无级联:先删除关联表记录,再删除被关联表记录 级联:可以直接先删除被关联的记录,直接删除两张表 修改 无级联:关联与被关联表都无法完成 关联的外键和主键 数据更新 - (如果被关联表记录没有被绑定,可以修改) 级联:可以直接修改 detail_id int unique not null, foreign key(detail_id) references author_detail(id) on update cascade on delete cascade 一对多 例子:购物车和商品 外键必须放在多的一方(商品),此刻外键不唯一 添加 无级联:先增加被关联表记录(购物车),再增加关联表记录(商品) 级联:相同 删除 无级联:先删除关联表记录,再删除被关联表记录 级联:可以直接先删除被关联的记录,直接删除相关联的所有表 修改 无级联:关联与被关联表都无法完成 关联的外键和主键 数据更新 - (如果被关联表记录没有被绑定,可以修改) 级联:可以直接修改,并修改相关联的表 author_id int, foreign key

mysql 表和字段

∥☆過路亽.° 提交于 2019-11-30 08:18:19
数据库导入 文件存储数据 多个文件放在一个文件夹中统一管理的系统 数据库的分类 mysql的安装与使用 数据库的基本操作 create show use drop 表的基本操作 create show desc drop 记录的基本操作 insert into delete from update set select from 今日内容 数据库 与表的剩余操作 编码配置 引擎介绍 数据库字段的操作 数据库的数据类型 数据库字段的约束条件 数据库配置 通过配置 文件统一配置的目的 统一管理 服务端mysqld 客户端 client 配置了 mysqld服务端的编码为utf8 那么再创建的数据库 默认编码都采用utf8 表的修改 alter table 旧表 rename 新表 修改字段名 alter table 表名 change 旧字段 新字段 类型(长度) 修改字段属性 alter table 表名 modify 字段 新类型 (长度) 创建表的完整语法 create table 表名(属性名 类型(长度) 约束) 数据库表的引擎 create tale t11(id int) engine = xxx mysql支持的数据类型 类型 tinyint 1字节 -128~ smallint 2字节 -32768 ~ 32767 mediumint 3字节 int 4字节

MySQL的库表详细操作

旧城冷巷雨未停 提交于 2019-11-30 03:18:05
一 库操作 1、创建数据库      1.1 语法       CREATE DATABASE 数据库名 charset utf8;      1.2 数据库命名规则       可以由字母、数字、下划线、@、#、$       区分大小写       唯一性       不能使用关键字如 create select       不能单独使用数字       最长128位 基本上跟python或者js的命名规则一样 2、数据库相关操作     也是一些基本操作,和我们之前说的差不多。 1 查看数据库 show databases; show create database db1; select database(); 2 选择数据库 USE 数据库名 3 删除数据库 DROP DATABASE 数据库名; 4 修改数据库 alter database db1 charset utf8;   关于库的内容,咱们就说这些吧,哈哈,有点少是吧,不是咱们的重点,来看下面的表操作~~~ 二 表操作 1、存储引擎     存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制,关于存储引擎的介绍看我这篇博客: https://www.cnblogs.com/changxin7/p/11525457.html 2、表介绍     表相当于文件,表中的一条记录就相当于文件的一行内容