外键

MYSQL新手入门篇

给你一囗甜甜゛ 提交于 2020-03-10 15:19:23
MYSQL新手入门篇 一、数据库的简介 什么是数据库? 数据的仓库,如:在atm的实例中我们创建一个db目录称之为数据库 什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ? 他们是数据库软件,主要功能为两部分:1、讲数据保存到内存或者文件。2、接受特定的命令对数据进行操作 什么是SQL? 上述问题说过,数据库要接受特定的命令,这个命令就是用SQL编写,他是结构化查询语言(Structured Query Language)的缩写,一种专门与数据库交互的语言。 二、数据库的安装 windows版本 1、下载 MySQL Community Server 5.7.16 http://dev.mysql.com/downloads/mysql/ 2、解压 如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64 3、初始化 MySQL解压后的 bin 目录下有一大堆的可执行文件,执行如下命令初始化数据: cd c:\mysql-5.7.16-winx64\bin mysqld --initialize-insecure 4、启动MySQL服务 执行命令从而启动MySQL服务 # 进入可执行文件目录 cd c:\mysql-5.7.16-winx64\bin # 启动MySQL服务

数据库

只谈情不闲聊 提交于 2020-03-09 13:01:01
表连接: 两个表通过共有的某一列,根据其数值关系(一般是相等)进行联合,把一个表的一行所带的相应列附加到另一个表上。 业务上看,是添加了相应列的延伸内容,加的内容是一个对象在外表所对应的属性(类似点击一个key,看到其相应的属性,3d透视角度)。一对多即是一个外键附加了一堆属性 多表连接 先两个表连接,再连接其他表。即某一行所带的列不停的增加,某个属性(key)所带的值不停的附加 一对一,一对多,多对多 一对一:一个表里的key只出现一次,另一个表里对应的key也只有一行 一对多:一个表里的key只出现一次,另一个表里对应的key出现在多行。一对多的联合不会使得行数增加,因为一个表里已经有多个行了,联合和只是把key做主键那个表的内容复制到每一行 多对多:一个表里的key出现在多行,另一个表里对应的key也出现在多行。联合后是m*n 外键,主键 如果一个key在一个表里是外键,那么就是一对多 如果一个key在一个表里是主键键,那么就是一对一 内连接,外连接,左连接,右连接 内连接:两个表联合,只取key值相等的行连接 左连接:两个表联合,如果左边的key在右边的表找不到,左边的key所在的那一行保留,右边的列对应的值都是空 右连接:两个表联合,如果右边的key在左边的表找不到,右边的key所在的那一行保留,左边的列对应的值都是空 外连接:两个表联合,左右两表的key对应行都要保留

MySQL修改表的外键约束

为君一笑 提交于 2020-03-08 19:20:36
创建表 CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY(id))ENGINE=INNODB; CREATE TABLE child(id INT,parent_id INT,FOREIGN KEY(parent_id) REFERENCES parent(id))ENGINE=INNODB; insert into parent(id) values(1); insert into child values(1,1); select * from parent; select * from child; update parent set id = 2 where id = 1; 删除约束 首先查看约束名: show create table child; 则 child_ibfk_1 是外键名称,删除外键 ALTER TABLE child DROP FOREIGN KEY child_ibfk_1 增加约束 ALTER TABLE child ADD CONSTRAINT FOREIGN KEY(parent_id) REFERENCES parent(id); ALTER TABLE child ADD CONSTRAINT KF_PARENT_CHILD FOREIGN KEY(parent_id) REFERENCES

主、外键约束

佐手、 提交于 2020-03-08 12:56:37
--创建数据库---------- use master go if exists(select * from Sysdatabases where name='学生数据库') drop database 学生数据库 create database 学生数据库 on primary( name=学生数据库, filename='d:\data\学生数据库.mdf', size=5, maxsize=300 ) log on( name=学生数据库_log, filename='d:\data\学生数据库_log.ldf', size=5, maxsize=300 ) ----创建表------------ use 学生数据库 go if exists(select * from Sysobjects where name='学生表') drop table 学生表 create table 学生表 ( 学号 char(6) primary key, 姓名 char(30) not null, 性别 char(4) check(性别 in('男','女')), 年龄 char(6) not null, 民族 char(4) default('汉') not null, 身份证号 char(20) unique, 宿舍号 char(6) foreign key references

使用INSERT…SELECT语法插入记录(三十二)

给你一囗甜甜゛ 提交于 2020-03-08 12:41:36
  前面,我们在谈INSERT语句时,使用两种语句:INSERT…SELECT 和 INSERT…VALUES。 INSERT…SELECT可以使用子查询。因为在写SELECT时。 *** = ***,这就是子查询。   我们还以tdb_goods这张表为例,这张表目前一共有22条数据,但是这22条数据中有很多重复的信息,下面我们简单来查看一下。 select * from tdb_goods\G;   比如这21、22条记录,他们的商品类别都是笔记本配件,他们的品牌都是索尼。这些都是重复的信息,我们都知道汉字占的字节数肯定要比数字要多,如果这种记录越来越多,那么你的数据表就越来越庞大,那么查找的时候速度就会越来越慢,那 最好的办法就是使用外键来实现 ,如果使用外键,那么至少要有两张数据表,所以我们需要再做一张数据表来存储我们的产品分类和品牌。   下面我们就来创建商品的分类表,操作命令及结果如下: CREATE TABLE IF NOT EXISTS tdb_goods_cates( cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREENT, cate_name VARCHAR(40) NOT NULL );   OK,我们的数据表创建成功。   那么我们该如何插入数据呢,难道我们要一条一条去查找吗,当然不用,一定会有其他的方法

mysql(视图 事务 索引 外键)

流过昼夜 提交于 2020-03-07 13:06:19
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atomicity) 一致性(C,consistency) 隔离性(I,isolation) 持久性(D,durabulity) 原子性:事务内所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位 例如: A给B转账,不会因为各种原因A账号已经发生扣款而B账户没有收到加款。 一致性:事务开始和结束前后,数据库的完整性没有被破坏 案例: 对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元。 隔离性:事务之间不相互影响,多个事务并发访问时,事务之间是隔离的 事务查看数据更新时,数据所处状态要么是另一事务修改之前或者修改之后的状态,不会查看到中间状态的数据。事务1在修改表的时候提交之前事务2不能修改 持久性:事务完成一手

mysql数据库 数据库管理

核能气质少年 提交于 2020-03-06 06:09:56
在MySQL中,数据库是用于存储和操作诸如表,数据库视图,触发器,存储过程等数据的对象的集合。 创建数据库 mysql> CREATE DATABASE [IF NOT EXISTS] database_name DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE DATABASE语句的后面是要创建的数据库名称。建议数据库名称尽可能是有意义和具有一定的描述性。 IF NOT NULL是语句的可选子句。可防止创建数据库服务器中已存在数据库的错误。不能在MySQL数据库服务器中具有相同名称的数据库。 mysql> SHOW DATABASES; 显示MySQL数据库服务器中的所有数据库。 mysql> USE database_name ; 切换数据库。 删除数据库 mysql> DROP DATABASE [IF EXISTS] database_name; 创建数据表 CREATE TABLE [IF NOT EXISTS] table_name( column_list )ENGINE=table_type DEFAULT CHARSET=utf8; 存储引擎ENGINE就是指表的类型,数据库存储引擎决定了表在计算机的存储方式。如果不明确声明存储引擎,MySQL将默认使用 InnoDB 。

MySQL 存储引擎

非 Y 不嫁゛ 提交于 2020-03-05 22:35:28
存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。 1、MyISAM MySQL5.5之前的默认的存储引擎, 每个MyISAM在磁盘上存储成三个文件,文件名和表名相同,扩展名分别是 (1)frm文件:存储表的定义 (2)MYD文件:存储表中的数据(记录) (3)MYI文件:存储索引。 索引保存的是数据文件的指针 特点 访问速度快(优) 支持全文索引(优)。但基本不使用MySQL的全文索引,全文索引一般都是使用第三方的ElasticSearch,Solr等更加成熟的解决方案。 不支持事务、外键(缺) 默认的锁粒度为表级锁,所以并发度很差(缺),但加锁快,锁冲突较少,不容易发生死锁(优); 对数据的查询缓存只缓存索引,不缓存数据(记录),而且使用的是操作系统本身的缓存。 自动增长列可以是组合主键中的任何一列。设置自动增长列:创建表时,在字段后加auto_increment,默认初始值是1 适用场景 不需要事务 不使用外键 操作以select、insert为主 MyISAM支持三种不同的存储格式 (1)静态表(fixed) 表中不能包含变长字段(比如VARCHAR, BLOB, TEXT),每个记录都是固定的长度

DRF序列化组件实现十大接口

冷暖自知 提交于 2020-03-05 20:39:27
目录 基表的概念 表关系的建立 DRF中Response类二次封装 连表查询 depth配置查询深度 插拔式自定义序列化字段连表查询 子序列化 实现十大接口 单查群查 单删群删 单增群增 整体单改群改 局部单改群改 基表的概念 abstract = True # 基表 class BaseModel(models.Model): is_delete = models.BooleanField(default=False) create_time = models.DateTimeField(auto_now_add=True) class Meta: # 基表,抽象类 abstract = True class Book(BaseModel): pass class Publish(BaseModel): pass 表关系的建立 通常我们在实际开发项目中我们的数据库各种表是不建立外键关联表的,是为什么呢? 因为我们在建立了外键关系之后,随着业务发展,表越来越多,外间关系越来越复杂,假如有一天表字段可能有问题,需要重构什么的,需要删除掉,那会发现删不掉了,因为和其他很多表都建立了外键关系,这时候我们的数据库断开关联表关系的优点就体现出来了: 断关联表不会影响连表的查询操作 还有助于提升连表增删改操作的效率 最重要的一点是方便后期的扩展与重构 那么他的缺点就是数据库本身没有连表的检测