多表设计,数据库热备份能够将随机备用数据库

2019-11-25 15:20栏目:网络数据
TAG:

数据完整性分为:实体完整性,域完整性,参谋完整性。

后生可畏、参照完整性

PostgreSQL是贰个开花源代码的靶子关系型数据库管理种类(OHighlanderDBMS卡塔 尔(英语:State of Qatar),协理大概全数的SQL零器件(满含子查询、事务、客商定义类型和函数卡塔尔国。
数据库是由一堆数量整合有序的聚众。这一个数量被寄放在结构化的多少表里。数据表之间相关互联,,反映了客观事物间的真相联系。、
PostgreSQL,客商端-服务器结构,(C/S结构卡塔 尔(阿拉伯语:قطر‎,是朝气蓬勃种网络架构。
服务器是任何应用系统财富的蕴藏与治本骨干,八个顾客端的倡议被传送到数据库服务器,数据库服务器进行管理后,将结果回到顾客端,收缩网络数据传输量。
PostgreSQL辅助热备份本事,该技巧是开创、维护和监督三个仍旧八个主数据库的备用数据库,以维护集团数量不受故障、灾殃、错误和崩溃的熏陶。它经过多少个操纵中央来完车以上全体的职务。当临蓐数据库由于布署搁浅而变得不可用时,数据库热备份能够将轻巧备用数据库切换成生育剧中人物,进而使与中断相关的停机时间减到起码,并防止数据遗失。

参照完整性:

参照完整性指的就是多表之间的准备,首要使用外键节制。多表设计: 豆蔻梢头对多、多对多、风度翩翩对生机勃勃设计

改进数据库的称谓
alter database test rename to testdb;
纠正数据库具有者
alter database test owner to postgres1;
去除数据库
drop database test;
数据库在修正数据库名称、删除的时候,以下意况不能操作成功。当数据库处何侯择在利用境况等的时候。
改革数据库连接最大值
alter database testdb with connection limit=1000;
在创建数据库时,create database前面不可能直接加条件,须求合作alter语句实行。这和SQL server有出入。

参照他事他说加以考察完整性指的正是多表之间的两全,主要运用外键限制。多表设计: 少年老成对多、多对多、意气风发对后生可畏陈设

1.一对多

主键,又称主码,是表中的一列只怕多列。
主键限定(Primary Key Constraint卡塔尔国
主键节制必要主键列的数额唯意气风发,而且不允许为空。
1.单字段主键
create table tb1
(
id int ,
name varchar(20),
age int,
primary key(id)
);

实体完整性通过表的主键来落到实处。使用主键来表示一条记下的天下第一,且不为空语法:primary key主键分类:

关联首要语句:constraint cus_ord_fk foreign key REFERENCES customer成立客商表——订单表一个顾客能够订多份订单,每份订单只可以有贰个顾客。

  1. 多字段联合主键
    create table tb1
    (
    id int ,
    name varchar(20),
    age int,
    primary key(id,name,age)
    );

逻辑主键:比如ID,不意味着实际的事体意义,只是用来唯意气风发标记一条记下业务主键:比如username,参与实际的作业逻辑。特点:唯生龙活虎,not null自动增进:auto_increment

-- 关联create table customer(id int PRIMARY KEY auto_increment,name varchar  not null,adress varchar ;create table orders PRIMARY KEY,price FLOAT not NULL,customer_id int, -- 进行和customer 关联的字段 外键constraint cus_ord_fk foreign key  REFERENCES customer;insert into customer values;insert into customer values;SELECT * from customer;INSERT INTO orders values;INSERT INTO orders values;INSERT INTO orders values;SELECT * from orders;

外键节制
外键用来在八个表的数量里面创设连接,能够是一列大概多列。叁个表可以有一个可能多个外键。

create table person2(id int primary key auto_increment,name varchar;

notice: constraint: 节制的意味。foreign key: 外键。references: 参照创设叁个叫做customer_id_fk的外键限制,个中外键指的是customer_id,而且参照的是 customers表中的id列

create table tb_dept1
{
id int primary key,
name varchar(22) not null,
location varchar(50)
}

二:域完整性

1卡塔尔CASCADE 级联计谋。使用此种计策时主表的笔录被删除可能主键字段被涂改时会同步删除或改过子表 2卡塔 尔(阿拉伯语:قطر‎ NO ACTION 无动作攻略。使用此种计策时要删减主表必需先删除子表,要去除主表的记录必需先删除子表关联的笔录,不能够更新主表主键字段的值。 3卡塔尔 纳瓦拉ST悍马H2ICT 主表节制政策。此种计策对主表的自律跟 NO ACTION 同样 4卡塔 尔(英语:State of Qatar)SET NO 置空计谋。使用此种计策时,假使主表被删除或许主键被改换,则将子表中的外键设置为NULL。需求在乎的是,假设子表的外键是主键恐怕是安装为NOT NULL的,则主表的删减和主键的改造跟 NO ACTION 同样。

create table tb_emp5
{
id int primary key,
name varchar(25),
deptid int,
salary float,
constraint fk_emp_dept1 foreign key(depid) references tb_dept1(id);
}

非空约束:not null唯风流洒脱节制:unique

2. 多对多

非空约束 not null constraint
点名字段的值不能够为空
create table tb_emp6
(
id int primary key,
name varchar(20) not null,
deptid int,
salary float,
constraint fk_emp_dept2 foreign key (deptid) tb_dept1(id)
)

creat table person3(id int not null unique,name varchar not null unique,gender varchar not null,phone char;

创建学子——老师关系表格个中三个学员可以有三个老师,壹人事教育师也会有多个学子

唯生龙活虎约束 unique constraint
唯意气风发性约束(unique constraint卡塔尔要求增添该节制的列字段的值唯风流倜傥,允许为空,但只可以现身一个空值。唯大器晚成约束能够确认保证一列依旧几列不出新重复值。

三:参照完整性

-- 多对多关系-- 创建teacher表格CREATE TABLE teacher (id INT,NAME VARCHAR  NOT NULL,gender CHAR  NOT NULL,PRIMARY KEY ;-- 创建学生表格CREATE TABLE student (id INT,NAME VARCHAR  NOT NULL,age INT NOT NULL);ALTER TABLE student ADD PRIMARY KEY ;-- 第三张关系表CREATE TABLE tch_std (teacher_id INT,student_id INT,CONSTRAINT fk_teacher FOREIGN KEY  REFERENCES teacher ,CONSTRAINT fk_student FOREIGN KEY  REFERENCES teacher ;DELETEFROMteacherWHEREid = 3;SELECT*FROMteacher;SELECT DISTINCT*FROMtch_std;

create table tb-dept2
(
id int parmary key,
name varchar(20) unique ,
location varchar(20)
)

1,风流罗曼蒂克对多a:比方:客商和订单的关系正是大器晚成对多,二个顾客能够有多张订单,一张订单归属三个客商;b:外键设置到多的一方

attention:多对多是三张表,第三张表创造外键约束对应前两张表中的id

create table tb_dept3
(
id int primary key,
name varchar(20),
location varchar(20),
constraint sth unique(name)
)
unique 和primary key : 贰个表中能够有多少个字段注解为unique , 但只好有叁个primary key 注解:注解为primary key 的列不容许有空值,可是评释为unique的字段允许空值null的留存。

语法输入创制后生可畏对多:创制顾客表:

3. 一对一

只好有二个primary key 注解的意义:
以下为错误注明:
create table tb_dept3
(
id int primary key,
name varchar(20) primary key,
location varchar(20),
constraint sth unique(name)
)

create table customers(id int,name varchar,address varchar;

create table orders(id int,order_num int primary key,price float,customer_id int, constraint customer_ord_fk foreign key references customers;

1卡塔 尔(阿拉伯语:قطر‎依照外键关联在IdCard表中的外键增加唯后生可畏限定2卡塔尔国依据主键关联对主键增多外键约束

那是错的

注:constraint: 限制,foreign key: 外键,references: 参照创制一个称为customer_ord_fk的外键限定,外键指的是customer_id,参照的是 customers表中的id列

-- 一对一-- 创建users表格CREATE TABLE users (id INT,NAME VARCHAR  NOT NULL,gender CHAR  NOT NULL,PRIMARY KEY ;-- 创建card 表格CREATE TABLE card (id INT,adress VARCHAR  NOT NULL,user_id INT UNIQUE,constraint users_id_fk foreign key references users;ALTER TABLE card ADD PRIMARY KEY ;

暗中认可约束 default constraint
钦点某列的暗许值
语法准绳如下:
字段名 数据类型 default 暗中认可值
create table tb_emp7
(
id int primary key,
name varchar(25) not null,
deptid int default 11,
salary float,
constraint fk_emp_deptid3 foreign key (deptid) references tb_dept1(id)
)

开创三个叫做customer_ord_fk的外键约束,外键栏位customer_id,参照的是 customers表中的id列

此种为形式1,给外键增多唯生龙活虎限制unique

矫正表名
alter table <旧表名> rename to <新表名>
校正字段的数据类型
alter table <表名> alter column <字段名> type <数据类型>
改进字段名
alter table <表名> rename <旧字段名> to <新字段名>
增多字段
alter table <tablename> add column <newfieldname> <fieldtype>

扩展:二种子表的删除更新战略:

上述所述是小编给大家介绍的sql中的参照完整性安详严整整合,希望对大家全数利于,要是大家有别的疑问请给笔者留言,笔者会及时还原大家的。在那也特别多谢大家对台本之家网址的支撑!

  1. 增加无完整性约束标准的字段
    alter table test1 add column usernameid int;
    2.增添有完整性限定原则的字段
    alter table test1 add column1 varchar(10) not null;

1,cascade 级联计策:使用此种战术时主表的笔录被剔除或然主键字段被改善时会同步删除或校正子表 2,no action 无动作战略:使用此种攻略时要去除主表必需先删除子表,要去除主表的记录必需先删除子表关联的记录,不能订正主表主键字段的值 3,restrict 主表节制政策。此种计谋对主表的自律跟 NO ACTION 同样 4,set no置空计策。使用此种攻略时,要是主表被删除可能主键被退换,则将子表中的外键设置为null。需求当心的是,如若子表的外键是主键也许是安装为not null的,则主表的去除和主键的改造跟 no action 同样

除去字段
alter table <table name> drop <field name>

Create table teachers(id int primary key auto_increment,name varchar,subject varchar;

Create table students(id int primary key , name varchar;

Create table teacher_student( id int,t_id int,s_id int,primary key constraint teacher_id_fk foreign key references students, constrains student_id_fk foreign key references teachers;

例子: alter table test1 drop column1;

法1:第二张表格中开创三个字段作为外键对应第一张表格中的主键;法2:间接利用第二张表格中的主键作为外键,对应率先张表格的主键。

删除表的外键限制
alter table <table name> drop constraint < 外键节制名>

两张表:unique很重要

例子
alter table test1 drop constraint fk_emp_dept;

create table user(id int primary key auto_increment,name varchar;

create table card(id int primary key auto_increment,num varchar not null,address varchar not null,user_id int unique,constraint user_card_fk foreign key references user;

除去数据表
剔除未有被提到的表
drop table 表1,表2....; 同一时间删除七个表,后边的表名用逗号隔离。
在乎:::::假诺表名空头支票,则会报错

如上所述是小编给我们介绍的MySQL数据完整性详整整合,希望对大家具备利于,假若我们有任何疑问请给自家留言,小编会及时复苏大家的。在这里也特别谢谢大家对剧本之家网址的支撑!

drop table if exists 表1,表2....
累积参数 if exists 后,在剔除前判别表是还是不是存在。加上后,再删除表时,如若表一纸空文,SQL语句可以安枕而卧实施,可是会生出警告
例子:::drop table if exists test1;

除去被别的表关联的主表
数据表之间存在外键关联,固然直白删除父表,结果会显得退步。
案由:直接删除将破坏表的完整参照性。如果非得要去除,可以先删除与之相关联的子表,再删除父表。不过如此相同的时候删除了多少个表的多寡。

不经常候,要保留子表,要是此时要独立删除父表,只需将相关联的表的外键限制原则撤消。然后就可以去除父表

改善数据库时候,要潜心备份

例子:::::::::
1.成立数据库market
create database market;

2.创办数据库表 customers,在c_num 主键限制,自增限制;c_birth 非空节制
create table public.customers
(
c_num serial primary key,
c_name varchar(50) ,
c_contact varchar(50),
c_city varchar(50),
c_birth date not null
)

3.将 c_name 字段改为varchar(70)
alter table public.customers alter column c_name type varchar(70);

4.将 c_contact 字段改名字为c_phone
alter table public.customers rename c_contact to c_phone ;

5.增加 c_gender 字段 数据类型 char(1)
alter table public.customers add column c_gender varchar(1);

6.将表名校订为 customers_info
alter table public.customer rename to customers_info;

7.删除 字段 c_city
alter table public.customers_info drop c_city;

8.创建表 orders ,c_id 增多外键,关联customers_info 中的 c_num
create table public.orders
(
o_num serial primary key not null,
o_date date ,
o_id int,
constraint orders_id_fk foreign key (o_id) references customers_info(c_num)
)

9.去除orders 表的外键节制,然后删除customers_info
alter table public.orders drop constraint orders_id_fk;
drop table customers_info;

原书中冒出难题,
原书上定义public.orders 的o_id 字段数据类型为varchar(50) 。
此为外键关联到customers_info 字段 c_num 数据类型为 int ,现身错误..

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于网络数据,转载请注明出处:多表设计,数据库热备份能够将随机备用数据库