外键

mysql数据库索引

左心房为你撑大大i 提交于 2020-01-11 03:45:50
MySQL数据库索引分成三类:普通索引,唯一索引和主索引 1、普通索引   普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件 (WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如 一个整数类型的数据列)来创建索引。 2、唯一索引   普通索引允许被索引的数据列包含重复的值。比如说,因为人有可能同名,所以同一个姓名在同一个“员工个人资料”数据表里可能出现两次或更多次。   如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好 处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值 是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合, 人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。 3、主索引   在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的“主索引”。主索引与唯一索引的唯一区别是

数据库建表小技巧

自古美人都是妖i 提交于 2020-01-10 12:26:19
E-R总图: 先判断是什么关系: 1)一个用户能对应多个订单,而一个订单只能对应一个用户,所以是一对多的关系(不需要中间表:在多方加外键) 2)一个订单可以有多个商品,一个 商品也能出现在多个订单上,所以是多对多的关系(需要中间表,外键都在中间表(多方) 出现) 分析: 先确定三张基本表,user、product、order 分析用户user、商品product、订单order三者关系 1、user和order是一对多关系,其中user是一,order是多,即每个user可拥有多个order,而每个order只能属于一个user。一对多关系的两张表建立关联,不需要额外创建中间表,只需在多的一方表中增加外键列,将一的一方主键引入即可。 结论:user表不需改动,order表额外增加外键列uid 2、order和product是多对多关系,多对多关系的两张表建立关联,需要创建中间表将之拆分成两个一对多关系。 新建订单项表orderItem记录订单项,每行记录一个订单项。 product和orderItem是一对多关系,其中product是一,orderItem是多,即每个product可属于多个orderItem,而每个orderItem只能包含一个product。需要在多的一方,即orderItem表增加外键列pid。 order和orderItem是一对多关系,其中order是一

oracle查询表

我的未来我决定 提交于 2020-01-10 05:57:35
--查看用户系统权限 select * from dba_sys_privs; select * from user_sys_privs; --查看用户对象权限 select * from dba_tab_privs; select * from all_tab_privs; select * from user_tab_privs; select * from dba_roles; --查看所有角色 --查看用户所拥有的角色: select * from dba_role_privs; select * from user_role_privs; --查看角色所拥有的权限 select * from role_sys_privs; select * from role_tab_privs; select * from system_privilege_map; --查看所有系统权限 select * from table_privilege_map; --查看所有对象权限 --查询所有当前用户下面所有的表名 select * from tab; select * from dba_tables; select * from dba_objects; select * from cat; --查看用户建立的表 select * from user_tables;--当前用户的表

实现Oracle查询用户所有表

烂漫一生 提交于 2020-01-10 00:39:34
下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对oracle查询方面感兴趣的话,不妨一看。 select * from all_tab_comments -- 查询所有用户的表,视图等 select * from user_tab_comments -- 查询本用户的表,视图等 select * from all_col_comments --查询所有用户的表的列名和注释. select * from user_col_comments -- 查询本用户的表的列名和注释 select * from all_tab_columns --查询所有用户的表的列名等信息(详细但是没有备注). select * from user_tab_columns --查询本用户的表的列名等信息(详细但是没有备注). --一般使用1: select t.table_name,t.comments from user_tab_comments t --一般使用2: select r1, r2, r3, r5 from (select a.table_name r1, a.column_name r2, a.comments r3 from user_col_comments a), (select t.table_name r4, t.comments r5 from user_tab

models中常用的查询字段以及参数,choices参数,数据库的查询优化,开启事物操作和MTV与MCV模型

二次信任 提交于 2020-01-09 22:38:46
一.models中常用的字段及参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。 IntegerField 一个整数类型,范围在 -2147483648 to 2147483647。(一般不用它来存手机号(自带正负号导致位数不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度。 补充注意: 这里需要知道的是Django中的CharField对应的MySQL数据库中的varchar类型,没有设置对应char类型的字段,但是Django允许我们自定义新的字段 如何自定义char字段类型 大胆推测,字段是不是类 自己根据源码写类似的Char字段 1 # 在models.py文件下创建自己的Char字段 2 # 导入模块 3 from django.db.models import Field 4 5 # 自定义继承field的Char类型字段 6 class RealCharField(Fied) 7 # 也需要长度设置 8 def __init__(self, max_length, *args, **kwargs) 9 self.max_length = max_length 10 # 拦截父类的方法

第六篇:Django的模型层

早过忘川 提交于 2020-01-09 22:36:56
ORM查询 1、只要是queryset对象就可以无限制调用Queryset对象的方法: res = models.User.objects.filter().filter().update().... 2、只要是queryset对象就可以通过下面的语句获得sql语句: print(res.query) 3、如果不是queryset对象,也可以获得sql语句,需要使用公共方法: # 固定的日志文件配置 拷贝到配置文件中即可 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', }, }, 'loggers': { 'django.db.backends': { 'handlers': ['console'], 'propagate': True, 'level':'DEBUG', }, } } 单独测试Django部分功能 当测试Django的时候,我们往往只需要测试部分功能,启动整个Django显得太慢,太大,因此我们可以书写测试脚本: 步骤如下: 1、在任意目录下创建一个py文件进行书写,或者直接在app下的 tests.py 文件中书写以下代码: #

MySQL数据库(三)------ order、limit、join以及正则表达式

喜夏-厌秋 提交于 2020-01-09 01:02:31
order、limit、join以及正则表达式 1. 排序order by 2. limit限制显示条数 3. 连接查询join 3.1内连接 3.2 外连接 4.外键 FOREIGN KEY(字段名) REFERENCES 主表名(字段名) 5. 联合查询Union 6. 子查询 7. 正则表达式 1. 排序order by 默认升序 ASC 降序 DESC 2. limit限制显示条数 LIMIT 显示条数 :可用于修改、删除 LIMIT 偏移量(页数),每页显示条数 3. 连接查询join 连接查询join是将两个或者两个以上的表按照某个条件连接起来,从中选取需要的数据。当不同的表中有相同意义的字段时,可以通过这些字段连接这些表。 3.1内连接 JOIN | CROSS JOIN | INNER JOIN 用 ON连接条件 显示两个表中符合连接条件的记录 3.2 外连接 左外连接LEFT [OUTER] JOIN:左表显示全部数据,右表没有匹配到的显示NULL 右外连接RIGHT [OUTER] JOIN:右表显示全部数据,左表没有匹配到的显示NULL 4.外键 FOREIGN KEY(字段名) REFERENCES 主表名(字段名) 外键是相对于主键说的,是建立表之间 的联系的必须的前提。 比如这里有两张,user(用户)表和qx(权限)表,user中gid是用户权限id

django模型层 、 ORM查询

一个人想着一个人 提交于 2020-01-09 00:55:33
模型层 ORM查询 单表查询 前期准备工作需求: 如何只单独测试django中的某一个py文件 如何书写测试脚本 如何使用: 在任意一个py文件中书写以下代码 应用下的tests 或者自己新建一个 import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53.settings") import django django.setup() 前期准备工作图片分析: 第一步:先到 settings.py配置信息: 第二步:modles 中设置数据信息 auto_now:每次修改数据的时候 都会自动将最新的更新时间记录下来auto_now_add:只在创建数据的时候将创建时间自动记录下来 之后不会自动改变 第三步: 从mange中获取四句信息,复制到相应的文件中(tests中 看你自己)在进行导入相关文件(不到入回报错) 必知必会16条 """ 必知必会16条 1.create() 2.all() 3.filter() 4.update() 5.delete() 6.first() 7.last() 8.get() 9.values() 10.values_list() 11.order_by() 12.count() 13.exclude() 14.exists()

单表查询,多表查询,分组查询,聚合函数,F与Q

白昼怎懂夜的黑 提交于 2020-01-09 00:03:32
一、单表查询前期准备 1、新建数据库修改django默认配置数据库 去django项目下的settings修改数据库参数 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day53', # 写你自己的数据库 'USER': 'root', 'PASSWORD': '123456', # 写你自己的密码 'HOST': '127.0.0.1', 'POST': 3306, 'CHARSET': 'utf8' } } 2、去项目app应用下或者与项目同名同名文件下的__init__文件下修改数据库 import pymysql pymysql.install_as_MySQLdb() 3、创建数据 from django.db import models # Create your models here. class Movie(models.Model): title = models.CharField(max_length=64) price = models.DecimalField(max_digits=8, decimal_places=2) publish_time = models.DateField() # 年月日 # publish_time = models

Django(数据查询)

百般思念 提交于 2020-01-08 20:44:09
如何治单独测试django中的某一个py文件 书写测试脚本:   - 在应用下的tests.py或者自己建一个py文件   - 在文件中书写以下内容: if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53.settings") import django django.setup() 创建表格: class Movie(models.Model): title = models.CharField(max_length=64) price = models.DecimalField(max_digits=8,decimal_places=2) publish_time = models.DateField() # 年月日 create() :创建数据,返回值就是当前被创建数据的对象本身 models.Movie.objects.create(title='齐天大圣',price=999.23,publish_time='2016-1-1') all() :查询所有数据,返回的是queryset对象 res = models.Movie.objects.all() fileter() :按照一定条件查询,条件可以是多个,条件直接关系是and,返回的是queryset对象