zoukankan      html  css  js  c++  java
  • 18 SQL语言——约束

    理解约束 

    跳转w3school约束解析

    发现问题

    现在我们创建一个Student表

    create table student(
           snume number(10),
           sname varchar2(100),
           sex char(4),
           age number,
           qq number,
           sal number(6,2),
           mail varchar2(50)
    );
    

      

    创建完成后,面临以下问题:

    问题1:学号重复了,数据还可以插入成功
    insert into student(snum,sna,sex,age,qq,sal,mail)values('123','张三','男',18,12345678,88.88,'12345678@qq.com')
    insert into student values(123,'李四','男',18,7890122,88.99,'7890122@qq.com')
    问题2:姓名可以为空。
    insert into student values(456,'柳岩','女',18,666999,99.66,'666999@qq.com')
    insert into student (snum,sex,age,qq,sal,mail) values(789,'女',18,888444,99.66,'888444@qq.com')
    问题3:性别不但可以为空,还可以为其他不知道的字符
    insert into student (snum,sna,age,qq,sal,mail) values(108,'景甜',18,000999,99.66,'000999@qq.com')
    insert into student (snum,sna,sex,age,qq,sal,mail) values(102,'景甜','a',18,000999,99.66,'000999@qq.com')
    insert into student (snum,sna,sex,age,qq,sal,mail) values(102,'景甜','女',18,000999,99.66,'000999@qq.com')
    问题4:年龄可以超过200
    insert into student (snum,sna,sex,age,qq,sal,mail) values(103,'唐嫣','女',23,78900,99.66,'78900@qq.com')
    insert into student (snum,sna,sex,age,qq,sal,mail) values(103,'唐嫣','女',230,78900,99.66,'78900@qq.com')
    问题5:qq号一致
    insert into student (snum,sna,sex,age,qq,sal,mail) values(104,'关晓彤','女',19,111000,99.66,'111000@qq.com')
    insert into student (snum,sna,sex,age,qq,sal,mail) values(105,'袁华','男',22,111000,99.66,'111000@qq.com')

    解决问题

    三种方式

    1.在创建表的时候,写在字段后面

    create table student(
       sname varchar2(10) not null primary key ,
        
    )
    

    2.创建表时,统一写在最后面

    create table student1(
           snum number(10) not null primary key,
           sname varchar2(100),
           sex char(4),
           age number(10),
           qq number(30),
           sal number(6,2),
           mail varchar2(50)
          constraints pk_表名_字段名 primary key(字段名),
          constraints ck_表名_字段名 check(字段名 is not null),
          constraints uk_表名_字段名 unique(字段名),
          constraints fk_表名_字段名 foreign key(字段名) references 表2(字段) [on delete cascade|set null]   
    )
    

      

      其中check(条件)可以像这样写:check(age>0 and age <100)明白吗

    3.表已经创建好了,再去添加/修改/删除约束

    下面的pk/ck/uk/fk_表名_字段名 是规范的约束名。

    添加:alter table 表名 add constraints pk/ck/uk/fk_表名_字段名 primary key/(字段名)/check(条件)/unique(字段名)/foreign key(字段名) references 表2(字段) [on delete cascad|set null];

    删除:alter table 表名 drop constraints pk/ck/uk/fk_表名_字段名

    添加默认值:alter table 表名 modify 字段名 defalut 值

    修改字段类型:alter table 表名 modify 字段名 类型

    删除约束

    删除:alter table 表名 drop constraints 约束名

    生成约束时,如果没有给约束取名,则系统自动生成约束名,我们先查询约束名,再使用上面的方法删掉即可。

    查询约束: select  * from user_cons_columns order by table_name; 

    找到对应的表对应的字段对应的约束名(constraint_name),删除即可。

     

  • 相关阅读:
    jQuery 语法
    jQuery 简介
    把数据存储到 XML 文件
    XML 注意事项
    XML DOM (Document Object Model) 定义了访问和操作 XML 文档的标准方法。
    通过 PHP 生成 XML
    XML 命名空间(XML Namespaces)
    XML to HTML
    XMLHttpRequest 对象
    使用 XSLT 显示 XML
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12304437.html
Copyright © 2011-2022 走看看