foreign

PostgreSQL的外键深入使用

て烟熏妆下的殇ゞ 提交于 2020-04-25 16:58:14
有开发同事问及postgresql外键的用法,这里普及一下。外键是一个很基础的概念,使用得当可以对事务的一致性有很好的保障,方法上和Oracle是很接近的,作用很简单地说就是保证子表的数据都能在主表中找到,可保证数据一致性。 建立主表 postgres=# create table t_parent( postgres(# id serial primary key, postgres(# vname varchar(32), postgres(# ctime timestamp without time zone); NOTICE: CREATE TABLE will create implicit sequence "t_parent_id_seq" for serial column "t_parent.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t_parent_pkey" for table "t_parent" CREATE TABLE 建立子表 postgres=# create table t_child( postgres(# cid int4, postgres(# vname varchar(32)); CREATE TABLE 查看表外键 postgres=# \d+

mysql foreign key(外键) 说明与实例

帅比萌擦擦* 提交于 2019-12-06 11:12:31
mysql foreign key(外键) 说明与实例 一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强。关于完整性,关连性我举个例子,大家就会明白了。 有二张表,一张是用户表,一张是订单表: 1,如果我删除了用户表里的用户,那么订单表里面根这个用户有关的数据,就成了无头数据了,不完整了。 2,如果我在订单表里面,随便插入了一条数据,这个订单在用户表里面,没有与之对应的用户。这样数据也不完整了。 如果有外键的话,就方便多了,可以不让用户删除数据,或者删除用户的话,通过外键同样删除订单表里面的数据,这样也能让数据完整。 二,使用foreign key,遵守以下几点规则 1,有外键约束的表,必须是innodb型 2,外键约束的二个表,本来就相关系的表,并且要有索引关系,如果没有,创建外键时也可以创建索引。 3,不支持对外键列的索引前缀。这样的后果之一是BLOB和TEXT列不被包括在一个外键中,这是因为对这些列的索引必须总是包含一个前缀长度。 4,mysql外键的名子在数据库内要是唯一的 三,创建foreign key的语法规则 [CONSTRAINT symbol ] FOREIGN KEY [ id ] ( index_col_name , ...)

错误:mysql foreign key errno 150

混江龙づ霸主 提交于 2019-12-05 15:28:51
Mysql错误: ERROR 1005 (HY000): Can't create table 'mytable.#sql-191_1c5e4' (errno: 150) alter table message_demo add cons traint foreign key(type) references message_type(id) on delete cascade; 原因是message_demo表的type(外键)属性和message_type表的id(主键)定义不同,由于我是在建立表之后再建立的外键关系,之前给type字段加了个unsigned,而id字段又没加,因此报错。 参考: http://forums.devarticles.com/mysql-development-50/mysql-foreign-key-problem-errno-150t-7704.html Finally. I found out what the problem was. It wasn't about the definition of the foreign key. actually it was the definition of the primary key field. 好久不使用外键,对级联操作都有点不记得了。 以下资料来自官方文档(MySQL 5.1

PostgreSQL的外部表使用

有些话、适合烂在心里 提交于 2019-11-28 10:45:31
postgresql从9.1开始增加了外部表访问的功能,这个功能就是数据库直接读取数据库以外的文件,比如csv或者text等类型的文件,暂时不支持DML。postgresql有各种插件能直连各种异构DB,如oracle_fdw,mysql_fdw,file_fdw等,对数据的迁移是很方便的,这是PG的扩展性较强的一个表现。这里介绍foreign data wrapper的file_fdw使用。 一、环境: OS :CentOS 6.3 DB :PostgreSQL 9.3 二、使用过程 1.创建扩展,因为默认不安装,安装需要手工创建 [postgres@kenyon ~]$ psql psql (9.3.0) Type "help" for help. postgres=# CREATE EXTENSION file_fdw; CREATE EXTENSION postgres=# \dx List of installed extensions Name | Version | Schema | Description ----------+---------+------------+------------------------------------------- file_fdw | 1.0 | public | foreign-data wrapper for