zoukankan      html  css  js  c++  java
  • python-study-39

    表的完整性约束

    一、创建表的完整语法
    #语法:
    create table 库名.表名(
        字段名1 类型[(宽度) 约束条件],
        字段名2 类型[(宽度) 约束条件],
        字段名3 类型[(宽度) 约束条件]
    );
    约束条件:是在数据类型之外对字段附加的额外的限制
    
    #注意:
    1、最后一个字段之后不能加逗号
    2. 在同一张表中,字段名是不能相同
    3. 宽度和约束条件可选,字段名和类型是必须的
    
    二 not null与default  一般连用:不为空,如果为空则用默认值
    create table t1(
        id int primary key auto_increment,
        name varchar(16) not null,
        sex enum('male','female') not null default 'male'
    );
    
    insert into t1(name) values('egon'),('lxx'),('alex');
    
    三 unique key
    #限制唯一 没限制空
    #默认约束名和字段名相同,可以用constraint 指定约束名
    #可以两个字段名 联合唯一
    create table t2(x int unique);
    create table t3(
        x int,
        y varchar(5),
        unique key(x)
    );
    create table t4(
        x int,
        y varchar(5),
        constraint uni_x unique key(x) #
    );
    
    create table service(
        ip varchar(15),
        port int,
        unique key(ip,port)
    );
    insert into service values
    ('1.1.1.1',3306),
    ('1.1.1.1',3306);
    
    
    四 primary key
    站在约束角度看primary key=not null unique
    以后但凡建表,必须注意:
    1、必须有且只有一个主键
    2、通常是id字段被设置为主键
    3、id int primary key auto_increment 这一段可以当成固定用法
    4、如果没有主键,则自动在字段中找一个不为空且唯一的字段做主键,也没有的话,就用隐藏的
    5、我们用的存储引擎一般是innodb,它要求必须有主键
    6、键=索引 存储引擎以主键作为索引,提升查询速度
    7、联合主键,不常用,几个字段做成一个主键
    
    create table t5(
        id int primary key auto_increment
    );
    
    
    五 foreign key:
    外键的耦合度,导致不好扩展,以后尽量不要用  类比对象编程中的鸭子思想
    限制关联表某一个字段的值必是来自于被关联表的一个字段的
    # foreign key注意:
    # 1、被关联的字段必须是一个key,通常是id字段
    # 2、创建表时:必须先建立被关联的表,才能建立关联表
    create table dep(
        id int primary key auto_increment,
        dname varchar(20),
        info varchar(50)
    );
    
    create table emp(
        id int primary key auto_increment,
        name varchar(15),
        age int,
        dep_id int,
        foreign key(dep_id) references dep(id)
        on update cascade
        on delete cascade
    );
    # 3、插入记录时:必须先往被关联的表插入记录,才能往关联表中插入记录
    insert into dep(dname,info) values
    ('IT','技术能力有限部门xxx'),
    ('Sale','文化程度不高'),
    ('HR','招不到人部门');
    
    
    insert into emp(name,age,dep_id) values
    ('egon',18,1),
    ('alex',28,2),
    ('wsj',38,2),
    ('lxx',30,1),
    ('xiaohou',18,3);
    
    ps:删除时:应该先删除关联表emp中的记录,再删除被关联表对应的记录
    View Code

    存储引擎

    # 补充存储引擎:
    create table t12(x int)engine='myisam';
    create table t13(x int)engine='innodb';
    create table t14(x int)engine='memory';
    create table t15(x int)engine='blackhole';
    
    mydql里分不同的表,不同的表组织结构不一样,需要用不同的存储引擎处理
    类比关系  实际是一堆不同功能的代码
    innodb=文本编辑器:处理文本格式
    myisam=MP3播放器:处理MP3格式的
    
    show engines; 查看所有的引擎
    
    innodb:索引组织表  索引+数据
    
    ################参考
    http://www.cnblogs.com/linhaifeng/articles/7213670.html
    现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等
    
    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
    View Code

    表之间的关系

    表之间的关系:
    
    外键的延伸:
    
    # 找两张表的关系的窍门
    emp        dep
    #1、先站在左表的角度:去找左表emp的多条记录能否对应右表dep的一条记录
        翻译:多个员工能否属于一个部门
    
    #2、然后站在右表的角度:去找右表dep的多条记录能否对应左表emp的一条记录
        翻译:多个部门能否拥有同一名员工
    
    # 多对一:结果的判断
    #1、如果只有单向的多对一成立,那么最终的关系就是多对一
    #2、在emp表新增一个字段dep_id, 该字段外键关联dep(id)
    
    # 多对多:结果的判断
    #1、双向的多对一就是多对多
    #2、需要建立第三张表,有一个字段值fk左表,一个字段的值fk右表
    create table author(
        id int primary key auto_increment,
        name varchar(16),
        age int
    );
    create table book(
        id int primary key auto_increment,
        bname varchar(20),
        price int
    );
    create table author2book(
        id int primary key auto_increment,
        author_id int,
        book_id int,
        foreign key(author_id) references author(id) on update cascade on delete cascade,
        foreign key(book_id) references book(id) on update cascade on delete cascade
    );
    
    # 一对一:无需参考窍门,左表的一条数据唯一对应右表的一条记录
    fk+unique
    View Code

    修改、复制、删除表

    http://www.cnblogs.com/linhaifeng/articles/7232894.html#_label1
    View Code

    上节课复习

    上节课复习:
        1、基本sql语句
            库
                增
                    create database db1 charset utf8;
                删
                    drop database db1;
                改
                    alter database db1 charset gbk;
                查
                    show create database db1;
                    show databases;
            表
                use db1;
                select database();
    
                增
                    create table t1(id int,name varchar(15));
                删
                    drop table t1;
                改
                    alter table t1 add sex enum('male','female');
                    alter table t1 modify name varchar(16);
                    alter table t1 change name NAME varchar(16);
    
                查
                    show tables;
                    show create table t1;
    
            记录
                增
                    insert into t1 values(1,'egon'),(2,'egon2'),(3,'egon3');
                删
                    delete from t1 where id > 3;
    
                    清空表:
                        truncate t1;
    
                改
                    update db1.t1 set name='xxx' where id > 3;
                查
                    1 egon1
                    2 egon2
                    3 egon3
                    4 egon4
                    5 egon5
    
                    select id from db1.t1 where id > 3;
    
        2、创建表的数据类型
    
    
    
    
    今日内容:
        1、表的完整性约束
            表之间的三种关系
                多对一
                多对多
                一对一
        修改表
        复制表
        删除表
    预习:
        2、单表查询
        3、多表查询
    作业:
    http://www.cnblogs.com/linhaifeng/articles/7238814.html#_label7
    View Code
  • 相关阅读:
    STM32F0库函数初始化系列:进入STOP模式,外部中断唤醒
    STM32F0库函数初始化系列:ADC
    STM32F0库函数初始化系列:PWM输出
    VBS病毒实验
    AWVS漏洞扫描教程之扫描方式
    利用AWVS扫描Web漏洞
    命令执行漏洞靶场练习二
    命令执行漏洞靶场练习一
    CSRF POST型
    RainbowCrack彩虹表破解密码hash
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9343392.html
Copyright © 2011-2022 走看看