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),删除即可。

     

  • 相关阅读:
    UITableView, 表视图
    UINavigationController, 导航控制器
    UIScrollView, 滚动视图
    DelegateAndGestureRecognizer 手势识别
    触摸 响应者链(UITouch,UIIEvent )
    在SharePoint管理中心管理SharePoint Designer设置
    SharePoint在管理中心创建Secure Store
    使用SharePoint管理中心管理服务
    如何在SharePoint管理中心检查数据库架构版本、修补级别和修补程序的常规监控
    SharePoint创建Alternate Access Mapping (AAM)备用访问映射
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12304437.html
Copyright © 2011-2022 走看看