mysql创建表

mysql外键详解

匿名 (未验证) 提交于 2019-12-02 22:06:11
一、外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。 下面来看看中的以下数据库中两个表: customers 和`orders``的ER图。 上图中有两张表: customers 和 orders 。每个客户有零个或多个订单,每个订单只属于一个客户。 customers 表和 orders 表之间的关系是一对多的,它是由 customerNumber 字段指定在 orders 表中建立外键(引用 customers 表的 customerNumber 字段)。 orders 表中的 customerNumber 字段与 customers 表中的 customerNumber 主键字段相关。 customers 表称为父表或引用表, orders 表称为子表或引用表。 表可以有多个外键,子表中的每个外键可能引用不同的父表。 子表中的行必须包含父表中存在的值,例如, orders 表中的每个订单记录必须在 customers 表中存在 customerNumber 。 因此,多个订单可以指同一个客户,因此这种关系称为一个(客户)到许多(订单)或一对多。 有时,子表和父表是一样的,外键返回到表的主键。 reportTo 列是一个引用 employeeNumber 列的外键, employeeNumber

MySQL数据库之表的增删改查

匿名 (未验证) 提交于 2019-12-02 22:06:11
Ŀ¼ 1、MySQL数据库中,数据库database就是硬盘上的一个文件夹,表table就是文件夹里面的一个文件 2、表中的一条记录就相当于文件中的一行内容,与excel表类似,表table中有不同的标题,称之为字段 3、本节对表结构做增删改查,即创建表、删除表、修改表、查看表结构,至于表中数据的增删改查日后单独总结 1、创建一张表,需要建一个表结构,需要表名、表中字段的名字,字段的数据类型及约束条件等 #建表语法: create table 表名( 字段 1 数据类型[(宽度) 约束条件], 字段 2 数据类型[(宽度) 约束条件], 字段 3 数据类型[(宽度) 约束条件], ......) engine = innodb ; #注意: 1 、一张表中字段名不能相同 2 、字段的数据类型不能少、宽度和约束条件是可选的 3 、搜索引擎默认 engine = innodb ,可默认不写 #示例: #建一张学生表,包含学生id\姓名\年龄\性别\分数5个字段 create table student ( id int , name char ( 10 ) not null , #约束条件,not null 不为空 sex char ( 10 ), score int ); #注意: 1 、每个字段用逗号隔开,最后一个字段不用逗号 2 、 int 数据类型可以不指定宽度,日后再解释 1

MySQL常用系统表汇总

匿名 (未验证) 提交于 2019-12-02 22:06:11
在这篇文章中: Information_schema performance_schema mysql sys 概述 本篇文章虽大部分内容为参考原文作者的相关内容,但对原文对于文章的逻辑与排版上进行了大范围修改,方便阅读与理解。原文链接在底部 MySQL5.7 默认模式 库名 表数量 视图数量 information_schema 61 0 mysql 32 0 performance_schema 87 0 sys 1 100 Information_schema Information_schema数据库是 MySQL 自带的,它提供了访问数据库元数据的方式。 什么是元数据呢? 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。 在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件 information_schema 数据库部分表说明 表名 注释 SCHEMATA 提供了当前mysql实例中所有数据库的信息。是show

MySQL垂直分表

匿名 (未验证) 提交于 2019-12-02 22:06:11
业务表增长速度较快,单表数据较大,对表的读写有影响。 思路:化整为零,把单表拆解为多表,按指定规则选择表 以Laravel项目为例,分表读取代码如下: public function changeTable($companyId) { // 分表算法,根据companyId选择分表,请勿修改算法,以免混淆分表数据 $posfix = intval($companyId) % 10; $tableName = $posfix ? "demo_$posfix" : 'demo'; return $this->setTable($tableName); } 调用方法: public function countCompanyData($companyId, $condition) { return $this->changeTable($companyId)->multiwhere($condition)->count(); } 算法实现后,就差表数据迁移了 步骤一,先执行 SHOW CREATE TABLE `demo`; 得到原始表的创建语句,然后,加个下标,就是分表的创建语句了 步骤二,创建所需要的所有分表,需要创建 1~9 编号的分表,这里以编号1为例 CREATE TABLE `demo_1` ( `id` int(10) unsigned NOT NULL AUTO

11-Mysql数据库----单表查询

易管家 提交于 2019-12-02 22:03:11
本节重点:   单表查询 语法: 一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二、关键字的执行优先级(重点)重点中的重点:关键字的执行优先级from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4.将分组的结果进行having过滤 5.执行select 6.去重 7.将结果按条件排序:order by 8.限制结果的显示条数 创建公司员工表,表的字段和数据类型 company.employee 员工id id int 姓名 name varchar 性别 sex enum 年龄 age int 入职日期 hire_date date 岗位 post varchar 职位描述 post_comment     varchar 薪水 salary     double 办公室 office int 部门编号 depart_id int #创建表,设置字段的约束条件 create table employee(

mysql-建表、添加字段、修改字段、添加索引SQL语句写法

匿名 (未验证) 提交于 2019-12-02 22:02:20
DROP TABLE IF EXISTS USERS; CREATE TABLE USERS( id INT UNSIGNED NOT NULL AUTO_INCREMENT, # 主键 UNSIGNED 无符号 AUTO_INCREMENT 自增 name VARCHAR(30) NOT NULL COMMENT '用户名', sex ENUM('男','女') NOT NULL DEFAULT '男', # 使用枚举类型, 在插入的时候可以数值来表示,从1开始。如1则代表男 age TINYINT UNSIGNED NOT NULL DEFAULT 1, PRIMARY KEY (`Id`) )DEFAULT CHARSET=UTF8 ENGINE=INNODB; 操作字段都是ALTER TABLE 表名 的格式 2、添加字段 ALTER TABLE USERS ADD alias varchar(20) COMMENT '别名'; 3、修改字段   3.1 不修改名称 使用modify ALTER TABLE USERS MODIFY name varchar(20) NOT NULL COMMENT '用户名'; ALTER TABLE USERS CHANGE name username varchar(20) NOT NULL COMMENT '用户名'; 4、删除字段

MySQL表碎片整理

匿名 (未验证) 提交于 2019-12-02 21:59:42
MySQL表碎片整理 1. 计算碎片大小 2. 整理碎片 2.1 使用alter table table_name engine = innodb命令进行整理。 2.2 使用pt-online-schema-change工具也能进行在线整理表结构,收集碎片等操作。 2.3 使用optimize table命令,整理碎片。 1. 计算碎片大小 要整理碎片,首先要了解碎片的计算方法。 可以通过 show table [from|in db_name] status like '%table_name%' 命令查看: mysql> show table from employees status like 't1'\G *************************** 1. row *************************** Name: t1 Engine: InnoDB Version: 10 Row_format: Dynamic Rows: 1176484 Avg_row_length: 86 Data_length: 101842944 Max_data_length: 0 Index_length: 0 Data_free: 39845888 Auto_increment: NULL Create_time: 2018-08-28 13:40:19

MySQL之将查询结果生成新表

匿名 (未验证) 提交于 2019-12-02 21:59:42
SQL语句示例: CREATE TABLE school SELECT * FROM class CREARE负责创建表,表的内容是SELECT语句的查询结果 如果我们想结合两个表的相同字段并生成新表,SQL语句如下: CREATE TABLE school SELECT * FROME CLASS1,CLASS2 WHERE CLASS1.NAME=CLASS2.NAME 文章来源: MySQL之将查询结果生成新表

数据库表操作与列操作

Deadly 提交于 2019-12-02 20:10:52
目录 一 操作表 二 操作数据行 作业 一 操作表 增 ​ ​ 语法: ​ create table 表名( ​ 字段名 列类型 [可选的参数],####记住加逗号 ​ 字段名 列类型 [可选的参数],#####记住加逗号 ​ 字段名 列类型 [可选的参数] #####最后一行不加逗号 ​ )charset = utf8; #####后面加分号 ​ 列约束(*******************************************) ​ auto_increment: 自增 ​ primary key 主键索引,加快查询速度,列的值不能重复 ​ not null 标识该字段不能为空 ​ default 为该字段设置默认值 ​ 例子1: ​ create table t1(id int,name char(5))charest = utf8; ​ Query OK, 0 rows affected (0.72 sec) #### 如果回显是queryok,代表创建成功 ​ 增加数据: ​ 语法: ​ insert into 表名(列1,列2)values(值1,’值2'); ​ 例子: ​ insert into t1(id,name) values(1,'tank'); ​ insert into t1(id,name) values(1,'tank2'); ​

操作表与操作表数据行

妖精的绣舞 提交于 2019-12-02 19:53:11
一. 操作表 增 语法: create table 表名( 字段名 列类型 [可选的参数], ### 记住加逗号 字段名 列类型 [可选的参数], ### 记住加逗号 字段名 列类型 [可选的参数] ### 最后一行不加逗号 ..... )charset=utf8; #### 后面加分号 列约束:(*********************) auto_increment : 自增 1 primary key : 主键索引,加快查询速度, 列的值不能重复 NOT NULL 标识该字段不能为空 DEFAULT 为该字段设置默认值 例子1: create table t1( id int, name char(5) )charset=utf8; Query OK, 0 rows affected (0.72 sec) #### 如果回显是queryok,代表创建成功 增加数据: 语法: insert into 表名 (列1, 列2) values (值1,'值2'); 例子: insert into t1 (id, name) values (1, 'zekai'); insert into t1 (id, name) values (1, 'zekai2'); 查询数据: 语法: select 列1, 列2 from 表名; (*代表查询所有的列) 例子: mysql> select