精华内容
下载资源
问答
  • 约束条件

    2019-10-08 15:14:16
    表名( 字段名1 类型[(宽度) 约束条件], 字段名2 类型[(宽度) 约束条件], 字段名3 类型[(宽度) 约束条件]);约束条件:是在数据类型之外对字段附加的额外的限制#注意:1、最后一个字段之后不能加逗号2. 在同一张表中,...
    一、创建表的完整语法
    #语法:
    create table 库名.表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );
    约束条件:是在数据类型之外对字段附加的额外的限制

    #注意:
    1、最后一个字段之后不能加逗号
    2. 在同一张表中,字段名是不能相同
    3. 宽度和约束条件可选,字段名和类型是必须的



    二、 not null与default
    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'
    );



    三、unique key
    unique 限制字段的值唯一

    #单列唯一
    create table t2(x int unique);
    create table t3(
    x int,
    y varchar(5),
    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字段被设置为主键

    create table t5(
    id int primary key auto_increment
    );

    #补充存储引擎:

    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
    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';

    create table t6(
    id int primary key auto_increment,
    name varchar(16),
    age int,
    sex varchar(6)
    )engine=innodb;


    #联合主键
    create table t19(
    ip char(15),
    port int,
    primary key(ip,port)
    );

    # primary key auto_increment
    create table t20(
    id int primary key auto_increment,
    name char(16)
    )engine=innodb;


    # auto_increment注意点:
    1、通常与primary key连用,而且通常是给id字段加
    2、auto_increment只能给被定义成key(unique key,primary key)的字段加



    五、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
    ('eron',18,1),
    ('alex',28,2),
    ('wsj',38,2),
    ('lxx',30,1),
    ('xiaohou',18,3);

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


    # 找两张表的关系的窍门
    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
    );

    insert into author values
    ('akon',18),
    ('alex',28),
    ('xxx',38);

    insert into book values
    ('葵花宝典',5),
    ('九阴真经',6),
    ('玉女剑法',7),
    ('如来神掌',10);


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

    insert into author2book(author_id,book_id) values
    (1,3),
    (1,4),
    (2,2),
    (2,4),
    (3,1),
    (3,2),
    (3,3),
    (3,4);

    # 一对一:无需参考窍门,左表的一条数据唯一对应右表的一条记录
    fk+unique


    create table customer(
    id int primary key auto_increment,
    name varchar(20) not null,
    qq varchar(10) not null,
    phone varchar(16) not null
    );

    create table student(
    id int primary key auto_increment,
    class_name char(20) not null,
    customer_id int unique, #该字段一定要是唯一的
    foreign key(customer_id) references customer(id) #外键的字段一定要保证unique
    on delete cascade
    on update cascade
    );

    insert into customer(name,qq,phone) values
    ('李飞机','31811231',13811341220),
    ('王大炮','123123123',15213146809),
    ('守榴弹','283818181',1867141331),
    ('吴坦克','283818181',1851143312),
    ('赢火箭','888818181',1861243314),
    ('战地雷','112312312',18811431230)


    insert into student(class_name,customer_id) values
    ('一班',1),
    ('二班',3),
    ('三班',5);



    delete from tb1;
    强调:上面的这条命令确实可以将表里的所有记录都删掉,但不会将id重置为0,
    所以收该条命令根本不是用来清空表的,delete是用来删除表中某一些符合条件的记录

    delete from tb1 where id > 10;

    如果要清空表,使用truncate tb1;
    作用:将整张表重置



    转载于:https://www.cnblogs.com/kingyanan/p/9460091.html

    展开全文
  • MySQL常见约束条件

    万次阅读 多人点赞 2018-12-02 15:36:23
    约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败! 约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件 1、约束条件分类: 1)not null :非空...

    约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!
    约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件

    1、约束条件分类:
    1)not null :非空约束,保证字段的值不能为空
         s_name VARCHAR(10) NOT NULL, #非空

    2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!
         age INT DEFAULT 18, #默认约束

    3)unique:唯一,保证唯一性但是可以为空,比如座位号
         s_seat INT UNIQUE,#唯一约束

    4)check:检查性约束【MySQL不支持,语法不报错,但无效】
         s_sex CHAR(1) CHECK(s_sex='男' OR s_sex='女'),#检查约束(Mysql无效)

    5)primary key :主建约束,同时保证唯一性和非空
         id INT PRIMARY KEY,#主建约束(唯一性,非空)

    6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!
         teacher_id INT REFERENCES teacher(id)   #这是外键,写在列级,Mysql无效

    注意
    1. 列级约束
        上面6种约束都可以写,语法都支持,不报错,但外键约束写了mysql无效不起作用
    2. 表级约束
        非空、默认不支持,其他都可以!

        语法:

          其他: 【constraint 约束名】 约束类型(字段名称) ,

          外键:  【constraint 约束名】 约束类型(字段名称) foreign key(字段名称) references 关联表名(其字段名),

    DROP TABLE IF EXISTS students;
    CREATE TABLE students(
    id INT ,
    s_name VARCHAR(10) not null,# 非空约束
    s_sex CHAR(1) default '男',  # 默认约束
    s_seat INT,
    age INT ,
    teacher_id INT , 
    
    #上面是列级约束,下面有表级约束
    
    CONSTRAINT pk PRIMARY KEY(id), #主建约束,pk是起的名,后面一样
    CONSTRAINT uq UNIQUE(s_seat),  #唯一约束
    CONSTRAINT ck CHECK(s_sex='男' OR s_sex='女'), #检查约束
    CONSTRAINT fk_students_teacher FOREIGN KEY(teacher_id) REFERENCES teacher(id)  #外键约束
    );

     

    2、MySQL修改表时添加或删除约束

         即修改表字段的数据类型或约束

        外键删除约束: ALTER TABLE 表名 DROP CONSTRAINT 约束名称

    1) 非空约束
    alter table students modify column s_name varchar(20) not null; # 添加 
    alter table students modify column s_name varchar(20) ;             # 删除 不写约束条件

    2)默认约束
    alter table students modify column age int default 18; #添加
    alter table students modify column age;                      #删除

    3)唯一键约束
    alter table students modify column seat int unique; #添加
    alter table students drop index seat;                       #删除
    show index from students;                                  #查看唯一约束

    4)主键约束
    alter table students modify column id int primary key; #添加
    alter table students drop primary key;                         #删除 约束名称

    5)外键约束
    alter table students add foreign key(major_id) references majors(id); #添加
    alter table students drop foreign key fk_students_teacher;                #删除 约束名称

     

    3、自增长列 auto_increment

    id int primary key auto_increment,

    一个表中有且只能有一个自增长列,自增长列一般和主键搭配

    修改表的时候添加自增长列:
    alter table t_indentity modify column id int primary key auto_increment;

    删除自增长列:
    alter table t_indentity modify column id int;

    修改自增id的初始值:

    ALTER TABLE 表名  AUTO_INCREMENT=6;

     

     

    展开全文
  • 规范约束条件

    2020-04-21 22:51:21
    我们在开发时往往会对泛型指定约束条件,只有类型参数符合条件的才允许用在这个泛型上面。但是有时我们会定义过多或过少的约束条件,过多的约束条件会导致其他开发人员在使用你所编写的方法或类时做很多的工作以满足...

    我们在开发时往往会对泛型指定约束条件,只有类型参数符合条件的才允许用在这个泛型上面。但是有时我们会定义过多或过少的约束条件,过多的约束条件会导致其他开发人员在使用你所编写的方法或类时做很多的工作以满足这些约束,过少的约束又会导致程序在运行的时候必须做很多的检查,并执行更多的强制类型转化操作,有时我们还需要使用反射生成运行期错误,来防止用户误用这个类。要解决这些问题,我们就必须把确实需要的约束写出来,这句话说起来简单,其实做起来不太容易。下面我就来讲解一下如何正确的编写一个规范的约束。

    零、简述

    何为约束?所谓约束就是使得编译器能够知道 类型参数 除了具备 System.Object 所定义的公共接口外还需要满足的条件。在创建泛型类型时编译器必须为这个泛型类型定义有效的 IL 码,即使它不知道其中的类型参数会在什么时候替换成什么类型,也会设法创建出有效的程序集。如果我们不给它指明类型参数,那么它就会默认设置类型参数是 System.Object 类型。我们通过约束来表达对泛型类型的类型参数的约束要求会营销编译器和使用这个类的开发人员。编译器看到我们指定的约束后就会明白除了除了具备 System.Object 所定义的公共接口外还需要满足什么条件。对于编译器来说它获得了两个帮助:

    1. 可以令编译器在创建这个泛型类型的时候获得更多的信息;
    2. 编译器能够保证使用这个泛型的开发人员所提供的参数类型一定满足我们所指定的条件。

    一、如何规范约束条件

    讲解之前我们先来看一个例子,这个例子判断了输入的两个值是否相等。

    public bool DemoEqual<T>(T t1, T t2)
    {
        if(t1==null)
        {
            return t2==null;
        }
        if(t1 is IComparable<T>)
        {
            IComparable<T> val1 = t1 as IComparable<T>;
            if(t2 as IComparable<T>)
            {
                return val1.CompareTo(t2)==0;
            }
            else
            {
                throw new ArgumentException($"{nameof(t2)} 没有实现 IComparable<T>");
            }
        }
        else
        {
            throw new ArgumentException($"{nameof(t1)} 没有实现 IComparable<T>")
        }
    }
    

    这段代码中执行了大量的强类型转换,在转换之前还判断时传入的参数是否实现了 IComparable 接口。这段代码如果使用了泛型约束就会很简单:

    public bool DemoEqual<T>(T t1, T t2) 
        where T : IComparable<T>
            => t1.CompareTo(t2)==0;
    

    这段代码大大简化了前面的那段代码,并且把程序运行期可能出现的错误提前到了编译期,编译器提前阻止了不符合要求的用法。到这里你是不是以为上述代码就是很好的解决方案呢?其实严格来说上述代码矫枉过正了,为什么这么说呢?因为 IComparable 接口很常见,大部分开发人员在设计类型的时候都会事先这个接口,因此我们将上述代码修改一些,我们不使用 CompareTo 来对比两个值是否相等,我们这次使用 Equals 来对比:

    public bool DemoEqual<T>(T t1, T t2) 
        => t1.Equals(t2);
    

    上述代码有一点需要注意,如果 DemoEqual 是定义在泛型类里,并且泛型类也规定了 IComparable 约束,那么他调用的 Equals 是 IComparable.Equals ,反之调用的就是 System.Object.Equals 。这两个 Equals 在性能上没什么大的差别,前者的执行效率只比后者高了那么一丢丢,因为它只是不用在运行时检查程序有没有重写 System.Object.Equals ,以及泛型参数类型为值类型时它也不用执行装箱和拆箱操作。但是对于把性能看的特别重的开发人员来说,前者是最优的方案。

    Tip:如果有较好的方法,我还是建议大家使用较好的方法,比如前面我们所说的 IComparable.Equals 。

    我们在编写泛型类的时候,最好在内部编写相互重载的多个方法,这样就可以针对不同的情况调用不同的方法,并且其他开发人员调用起来也不会有过于严谨的约束。有时候我们定义的约束过于严谨,会导致泛型类的适用范围很狭窄,遇到这种情况时我们就应该考虑我们自己在泛型类种编写代码来判断传入的类型是否继承自某个类或者实现了某个接口。在泛型约束中有三种约束我们必须谨慎使用,它们就是 new 、 struct 以及 class 约束,因为它们会限定对象的构建方式,除非你要求对象的默认值必须是 0 、null 或者必须能以 new() 的形式创建,那么我们才可以使用这三种约束。

    二、总结

    约束是为了向调用方提出要求,但是如果约束太多调用方就需要做更多的工作来满足这些约束,因此在创建约束时应该权衡利弊,将多余的约束去掉只保留需要的约束。

    展开全文
  • 数据库中的约束条件,在数据库中使用约束条件可以定义规则使得数据能够朝我们希望的方向发展,也就是可以保证数据的完整性。在数据库中有五大约束条件,分别为主键约束,非空约束,唯一约束,检查性约束,外键约束。...

    数据库中的约束条件,在数据库中使用约束条件可以定义规则使得数据能够朝我们希望的方向发展,也就是可以保证数据的完整性。在数据库中有五大约束条件,分别为主键约束,非空约束,唯一约束,检查性约束,外键约束。

    1)主键约束(primary key)

    主键约束通常都是在id字段上使用,它有两个特点,不能为空,不能重复。

    例如:create table p(

    uid number(20) primary key,

    uname varchar2(6)

    //主键也可以自己指定

    constraint primary_key_name primary key (uid)

    );

    2)非空约束(not null)

    非空约束,就是保证一个字段不能为空,不能有空值存在,如果插入空值,则会报错。

    3)唯一约束(unique)

    如果想让某个字段唯一,则为它加上unique唯一约束,当插入了相同的值时会报错。

    例如:create table p3(

    uname varchar2(6) unique,

    uid number(10) primary key

    //唯一约束也可以自定义

    constraint  unique_name unique(字段)

    );

    4)检查性约束(check (字段名 in (一个合法范围)))

    使用检查性约束可以用来约束某个字段值的合法范围。例如用1表示男,2表示女。

    create table p4(

    gender number(1) check (gender in(1,2)),

    //检查约束也可以自己指定

    constraint  check_name check(字段 in(1,2))

    );

    5)外键约束

    外键约束用于两张表之间,用来保证关联数据的完整性。例如订单和订单明细表,一对多关系。

    创建订单表:

    create table orders(

    order_id number(10),

    total_price number(10,2),

    order_time date,

    constraint orders_order_id_pk primary key (order_id)

    );

    创建订单明细表:

    create table order_detail(

    detail_id number(10),

    order_id number(10),//在order表中是主键

    item_name varchar2(10),

    quantity number(10),

    constraint order_detail_detail_id_pk primary key (detail_id),

    constraint order_detail_order_id_fk foreign key (order_id) referencs orders(order_id)|on delete cascade|on update cascade

    );

    外键关联时要注意的是:1.外键一定是主表的主键,2.删除表时要先删子表在删主表。

    可以强制删除,而不用管约束条件:drop table orders cascade constraint;

    可以使用级联更新和级联删除,这样在主表中进行更新或者删除操作,子表中的数据也会保证同步更新或者删除。on delete cascade|on update cascade。

    展开全文
  • 约束条件1约束条件约束是一种限制,通过对表中的数据做出限制,来确保表中数据的完整性,唯一性默认约束CREATE TABLE tb(id INT DEFAULT 'a' ,name VARCHAR(20));插入数据的时候,如果没有明确为字段赋值,则自动...
  • MySQL约束条件

    2020-06-10 13:09:31
    MySQL的常用约束条件的定义、修改和删除
  • MySQL 约束条件

    2018-06-17 20:42:34
    约束条件 1 - 非空约束 NOT NULL 规定某个字段不能为空 2 - 唯一约束 UNIQUE规定某个?字段在整个表中是唯一的 3 - 主键 非空且唯一 4 - 外键 4 - 自增长 5 - 检查约束 6 - 默认值 ...
  • ORA-02443: 无法删除约束条件-不存在的约束条件 看到有人有同样的问题。亲测之后: 情况一:常规操作 ALTER TABLE table_name DROP CONSTRAINT foreignkeyname; 情况二:需要加引号(而且是双引号) ALTER TABLE ...
  • NSGA2 约束条件处理的方法,包括非线性约束。
  • 一、字段操作1.添加字段 (add)alter table add 字段名 数据类型;desc ;2.修改字段数据类型 (modify)alter table ...#可用来修改字段数据类型#也可以在修改数据类型后添加默认值或其它约束条件#可以在最后修改字段位...
  • 数据库表的约束条件

    2020-08-16 20:54:35
    deptno varchar(20) primary key, --列级约束条件 dname varchar(20), location varchar(40) ); 表级主键约束演示: create table dept_htlwk( deptno varchar(20) , dname varchar(20) , location varchar(40) ,
  • NOT NULL约束条件 UNIQUE约束条件: 保证此字段相同值不能录入。 create table table_name ( 字段名 类型 , constraint 约束名 unique(字段名) ) ALTER TABLE table_name add constraint constraint_name UNIQUE...
  • 约束条件(constraint)

    2017-06-24 21:57:50
    1.为啥使用约束条件: 约束条件也叫完整性约束条件,当对表中的数据做DML操作时会验证数据是否违反约束条件.如果违反了DML操作会失败.约束条件可以应用于表中的一列或几列,应用于整个表或几个表之间. 约束条件...
  • 数据库字符类型与约束条件

    千次阅读 2018-07-29 15:04:34
    字符类型 一、 创建表的完整语法 #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的。 create table 表名( ...约束条件约束条件是在类型之外添加一种...
  • 完整性检查是围绕完整性约束条件进行的,因此完整性约束条件是完整性控制机制的核心。 完整性约束条件作用的对象可以是关系、元组、列三种。其中列约束主要是列的类型、取值范围、精度、排序等约束条件。元组的约束...
  • Oracle数据库违反唯一约束条件 问题 ORA-00001: 违反唯一约束条件 (xxx.SYS_C0014310) 原因 数据库的ID值,小于序列的next number值,由于表中的ID值是唯一的,所以select max(id) from test 查的该ID大于Sequences...
  • 违反检查约束条件

    2018-03-21 11:05:00
    oracle数据库报错ORA-02290: 违反检查约束条件 (SYSARCHIVE.SYS_C0013489) 打开navicat工具 设计表——检查 后面的编号就是名,找一下就知道哪个字段问题了 转载于:...
  • 注意:添加约束条件必须在插入数据之前,在插入数据之后就不能再添加约束! 非空约束(NOT NULL) 要求属性不能为空,不允许插入null值。 唯一约束(UNIQUE) 要求属性为唯一值,不允许出现相同数据。 主键约束...
  • SQL语句的约束条件

    千次阅读 2018-03-13 19:37:24
    SQL语句的约束条件,是为了保证表中存储数据的完整性。数据完整性分为三类:实体完整性:标识每一行数据不重复 实体:表中每一条数据都是一个实体(entity)。 分为三种类型:主键约束、唯一约束、自动增长。 1、...
  • 列级别约束条件

    千次阅读 2015-01-25 17:14:04
    关系数据库中二维表的每一列数据除了需要指定数据类型,有时还需要指定一些约束条件,来限制该列能够存储哪些数据。关系数据库中主要存在五种约束(Constraint):非空、唯一、主键、外键、检查。 约束有两个级别...
  • mysql Navicat12约束条件的设置和详解

    千次阅读 2020-08-23 18:06:53
    文章目录一、什么是mysql约束条件1.1 说明:1.2 约束的分类二、Navicat对应约束的设置位置2.1 not null :非空约束、primary key :主建约束、default:默认约束2.2 unique:唯一2.3 foreign key:外键约束 ...
  • 数据库中的约束条件,在数据库中使用约束条件可以定义规则使得数据能够朝我们希望的方向发展,也就是可以保证数据的完整性。在数据库中有五大约束条件,分别为主键约束,非空约束,唯一约束,检查性约束,外键约束。...
  • MATLAB实现粒子群算法的进阶讲解(多维+约束条件

    万次阅读 多人点赞 2019-11-12 18:46:53
    我们在之前的博客中,对粒子群算法的实现进行了讲解,主要讲解了粒子...3,如果目标函数存在约束条件,该如何编写代码? 本节就基于之前博客的内容,出现的问题,以及这两天我的一些学习,来对上述问题进行一个解答。
  • 本人使用nsga2解决多目标0-1背包问题 对于如何添加约束条件不清楚![图片说明](https://img-ask.csdn.net/upload/201905/07/1557219394_625120.png) 约束如图 希望得到帮助 本人所用语言为matlab
  • 数据库中表的约束条件

    千次阅读 2018-07-04 15:50:25
    表的约束条件(CONSTRAINT)1)主键约束 主键(Primary Key,简称PK) 特征: 主键约束=不能重复+不能为空 一张表中只能存在一个主键,主键可以是一列,也可以是多列组合(联合主键)。 主键约束定义方式有两种: 列级...
  • 约束条件的优化问题求解推导

    千次阅读 2020-04-03 10:53:01
    以SVM优化问题为例,其回归函数(分类平面)为: ...SVM中的分类问题和预测问题的区别在于约束条件的不同。 在分类问题中,约束条件为:;而在预测问题中,约束条件为(以Vapnik 不敏感损失函数为例): ...
  • SVM约束条件函数理解

    千次阅读 2018-08-09 17:11:34
    对于约束条件函数s.t,如果样本站队错误的话,左边式子就是一个负值,则损失值就会 越大,如果站队正确,距离越远,左边式子越大,那么损失值就越小...
  • 降低约束条件

    2010-10-07 18:26:00
     eNINGYOUNGDataSet4.EnforceConstraints = false;//降低约束条件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,279
精华内容 9,711
关键字:

约束条件