外键

mysql建表约束(外键约束)

喜欢而已 提交于 2019-12-04 00:01:09
--外键约束 至少要有两张表菜成立的约束 create table class( id int , sname varchar(20) ) create table student( id int, sname varchar(20), class_id int )  添加外键约束 foreign key (class_id) refercens person(id);  你的外键是受到来源的约束的 如果id 内容是1-5 ,那么在输入class_id 的内容它只能在1-5 的范围以内否则就会报错. 来源: https://www.cnblogs.com/qf928/p/11812366.html

MySQL_约束

时间秒杀一切 提交于 2019-12-03 23:27:36
MySQL中约束的作用是对表中的数据进行限定,保证数据的正确性,完整性,有效性。 分类:(1)主键约束 primary key(2)非空约束 not NULL (3)唯一约束 unique (4)外键约束 foreign key     1.非空约束:限定数据非空,如果为空则不可以添加数据。 添加语法:(1)在创建表的时候添加: 列名 数据类型 NOT NULL 发现可以插入id为空的数据,但在现实生活中id不为空 那么就要去限定id:id INT NOT NULL, (2)表已经创建完成时的非空约束:用到以前的修改语句,对name来进行限定非空 删除非空约束语法:与第二个创建方法类似,倒过来用就对了 发现姓名可以为空了。     2.唯一约束:限定列值不能重复 添加语法与之前的非空约束一样,但是删除不一样,语法为 alter table drop index 列名,之前的删除方法没有用,虽然执行成功了,但是还是唯一的 注意:NULL值表示不确定,因此唯一约束限定的列值可以有多个NULL。 3.主键约束:就是非空且唯一。并且一个表只能有一个主键列,主键是表中记录的唯一标识,同样添加方法同上,但是删除不同。 语法:alter table 表名drop primary key;那么问题来了,为什么删除不指定哪个列呢,那是因为之前说过,主键只有一个,不用去区分。

外键约束的要求

核能气质少年 提交于 2019-12-03 17:26:54
1,父表和子表必须使用相同的存储引擎,而且禁止使用临时表. 2, 数据表的存储引擎只能为InnoDB. 3, 外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同 4, 外键列和参照列必须创建索引.如果外键列不存在索引的话,mysql将自动创建索引. 例如 以下创建外键的 表 CERATE TABLE provinces( id SMALLINT(5) UNSIGNED PRIMARY KEY AUTO_INCREMENT, pname VARCHAR(20) NOT NULL, ) CREATE TABLE users( id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, pid SMALLINT(5) UNSIGNED , FOREIGN KEY (pid) REFERENCES provinces (id) ) user表中的 pid 就是外键,需要和子表的 provinces中的 id 字段配置一致,不然会报错 语法为 FOREIGN KEY (pid) REFERENCES provinces (id) 来源: https://www.cnblogs.com/2019huha/p/11804736.html

数据库外键的使用以及优缺点

☆樱花仙子☆ 提交于 2019-12-03 16:25:22
摘录网上讨论共同观点: 主键和索引是不可少的,不仅可以优化数据检索速度,开发人员还省不其它的工作, 矛盾焦点:数据库设计是否需要外键。这里有两个问题:一个是如何保证数据库数据的完整性和一致性;二是第一条对性能的影响。 正方观点: 1,由数据库自身保证数据一致性,完整性,更可靠,因为程序很难100%保证数据的完整性,而用外键即使在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性。 eg:数据库和应用是一对多的关系,A应用会维护他那部分数据的完整性,系统一变大时,增加了B应用,A和B两个应用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一年以后如果又增加了C应用呢? 2,有主外键的数据库设计可以增加ER图的可读性,这点在数据库设计时非常重要。 3,外键在一定程度上说明的业务逻辑,会使设计周到具体全面。 反方观点: 1,可以用触发器或应用程序保证数据的完整性 2,过分强调或者说使用主键/外键会平添开发难度,导致表过多等问题 3,不用外键时数据管理简单,操作方便,性能高(导入导出等操作,在insert, update, delete 数据的时候更快) eg:在海量的数据库中想都不要去想外键,试想,一个程序每天要insert数百万条记录,当存在外键约束的时候,每次要去扫描此记录是否合格,一般还不 止一个字段有外键,这样扫描的数量是成级数的增长

SQL 创建表

坚强是说给别人听的谎言 提交于 2019-12-03 15:46:57
SQL 创建表是通过SQL CREATE TABLE 语句来实现,该语句是DDL SQL语句 。CREATE TABLE语句用于创建用于存储数据的表。在创建表时,可以为列定义主键、惟一键和外键等完整性约束。完整性约束可以在列级或表级定义。对于不同的RDBMS, CREATE语句的实现和语法是不同的。 CREATE TABLE语句语法 CREATE TABLE table_name (column_name1 datatype, column_name2 datatype,... column_nameN datatype); SQL table_name—是表的名称 column_name1, column_name2 ….-是列的名称 datatype -是列的数据类型,比如char、date、number等 例如:如果要创建employee表,语句应该是这样的: CREATE TABLE employee ( id number(5), name char(20), dept char(10), age number(2), salary number(10), location char(10)); SQL 在Oracle数据库中,整数列的数据类型表示为“number”。在Sybase中,它表示为“int”。 Oracle提供了另一种创建表的方法。 CREATE TABLE

MySql学习笔记06

易管家 提交于 2019-12-03 11:51:09
课程回顾 一对一关联 案例1:查询每个员工的名字和主管领导的名字 select e.ename 员工姓名,m.ename 领导姓名from emp e join emp mon e.mgr=m.empno; 案例2: 查询主管领导名字为blake的所有员工名字 select e.ename 员工姓名,m.ename 领导姓名 from emp e join emp m on e.mgr=m.empno where m.ename='blake' 案例3:查询有商品的分类信息及上级分类信息 往t item category表内部插入以下数据 id 162 name 办公用品 id 229 name 文具 id 913 name 户外用品 -插入数据 insert into t item category (id,name) values(162,'办公用品'),(229,'文具'),(913,'户外用品'); -查询所有有商品的分类id SELECT DISTINCT category id FROM t item WHERE category id IS NOT NULL -查询分类详情 select * from t item category where id in (SELECT DISTINCT category id FROM t item WHERE category

数据库设计中一对一、多对一、多对多关系依据外键的实现条件及方法

▼魔方 西西 提交于 2019-12-03 11:13:51
作者:二歪求知iSk2y 链接:https://www.jianshu.com/p/2b27c7ba0653 来源:简书 下面以departments和staff_info表为例(为staff_info添加指向departments的外键) 一个表的字段作为外键的条件: 列值必须非空且唯一测试例子如下: mysql> create table departments (dep_id int(4),dep_name varchar(11)); Query OK, 0 rows affected (0.02 sec) mysql> desc departments; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | dep_id | int(4) | YES | | NULL | | | dep_name | varchar(11) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ rows in set

删除外键及 字母倒叙

送分小仙女□ 提交于 2019-12-03 10:58:06
按字段的拼音首字母倒序 select field from table order by convert(field using GBK) desc 删除某个数据库中所有的外键关联 -- 拼接所有删除语句 SELECT CONCAT( 'ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;' ) del_sql FROM information_schema.TABLE_CONSTRAINTS c WHERE c.TABLE_SCHEMA='数据库名称' AND c.CONSTRAINT_TYPE='FOREIGN KEY'; -- 将所有查询出来的删除语句复制出来进行执行 来源: https://www.cnblogs.com/huanglp/p/11792203.html

ER-Studio的五种关系说明

…衆ロ難τιáo~ 提交于 2019-12-03 10:24:21
1. identifying relationship: 1对多。 父实体的主键是子实体的外键(FK1),且FK1是主键。 2. no identifying, mandatory relationship: 1对多。 父实体的主键是子实体的外键(FK1),FK1不为空。 3. no identifying, optional relaotionship: 1对多。 父实体的主键是子实体的外键(FK1),Fk1可以为空。 4. one-to-one relationship: 1对1. 父实体的主键是子实体的外键(FK1), FK1可以为空。 5. non-specific relationship: 多对多。 (不建议的关系) 父实体和子实体是多对多的关系。 实际上ER studio会自动生成一个中间表。 ============================================= Identifying Relationship:需要提供外键给另外一张表作联合主键 Non-identifying Mandatory Relationship:强制外键 Non-identifying Optional Relationship:可选外键 One-to-one Relationship Non-specific:无特殊关系 单词解释: Identifying:标识

ORM查询

易管家 提交于 2019-12-03 10:18:02
目录 [toc] # 概要 ## ORM常用字段 ``` 常用字段 1 AutoFile( primary_key=Ture) 2 Charfiled(max_length= 12) 3 IntgerFile () 4 DateFile() 5 DatetimeFlie ROM 常用13个操作 ( 1 ) 返回QuerySet对象的有 1 all( ) 2 filter( ) 3 values( ) 4 values_list( ) 5 exclude( ) 6 order_by( ) 7 distinct( ) 8 reverse( ) ( 2 ) 返回对象的有 1 all( ).get( ) 2 all( ).first( ) 3 all( ).last( ) ( 3 ) 返回布尔值的 1 exists ( ) ( 4 ) 返回具体数据的 1 count( ) 条件查询 1 id__gt= 大于 id__lt( 小于) 2 id__in= 在[1,2,21,12,221] 3 id__contains="lc" 包含内容的 4 id__startwith="钱" 以钱开头的 5 id__endswitch= "娜" .... 6 date__year=2017 年份是2017的(day month) 7 3 id__icontains="lc" 不区分大小写 跨表查询 ( 1