zoukankan      html  css  js  c++  java
  • mysql表相关操作

    表的完整性约束

    约束条件与数据类型的宽度一样,都是可选参数

    作用:用于保证数据的完整性和一致性

    主要分为:

    not null  标识该字段不能为空

    default   为该字段设置默认值

    unsigned  无符号

    zerofill   使用0填充

    auto_increment  标识该字段的自动增长(整数类型,而且为主键)

    primary key   标识该字段为该表的主键,可以唯一的标识记录

    foreign key   标识该字段为该表的外键

    unique key    标识该字段的值是唯一的

    一、not null与default

    create table t1(

             id int primary key auto_increment,

             name varchar(16) not null,

             sex enum(‘nale’,’female’) not null default ‘male’

    );

    Insert into t1(name) values(‘egon’),(‘lxx’),(‘alex’);

    二、unique key

    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)

    );  # 联合唯一

    三、primary key

    站在约束角度看primary key = not null unique

    以后但凡建表,必须注意:

    1、必须有且只有一个主键

    2、通常是id字段被设置为主键

    create table t5(

             id int primary key auto_increment

    );

    # 补充存储引擎:

    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';   #不会有任何数据信息

    四、foreign key:限制关联表某一个字段的值必是来自于被关联表的一个字段的

    注意:

    1.被关联的字段必须是一个key,通常是id字段

    2.创建表时:必须先建立被关联的表,才能建立关联表

    3.插入记录时:必须先往被关联的表中插入记录,才能往关联表中插入记录

    4.删除时:应该先删除关联表emp中的记录,再删除被关联表对应的记录

    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

    );

    insert into dep(dname,info) values

             (‘IT’,’技术能力有限部门’),

             (‘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);

    # 找两张表的关系的窍门

    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

  • 相关阅读:
    第6章 函数 习题
    2. VS使用---HelloWorld
    [计蒜客]小 B 的题目
    [计蒜客] n 子棋
    [博弈]Euclid's Game
    [博弈]A Funny Game
    [博弈]Being a Good Boy in Spring Festival
    [组合数学]Magic 12 Months(坑)
    [PTA]L2-031 深入虎穴 (25 分)
    [天梯赛]L2-029 特立独行的幸福
  • 原文地址:https://www.cnblogs.com/luck-L/p/9343469.html
Copyright © 2011-2022 走看看