zoukankan      html  css  js  c++  java
  • 数据库 ——创建数据库的表

    一、创建表

    语法:

     

    a、table_name——表名

    b、column_name——字段名

    Oracle表名与字段名命名规则:

    i、必须以字母开始

    ii、必须是1到30 个字符长度

    iii、只能包含字母、数字、下划线“_”、美元符“$”和井号“#”

    Ⅳ、不能使用Oracle的关键字

    Ⅴ、同一个用户所拥有的对象之间不能重名

    c、datatype——数据类型

           Oracle常用数据类型:

    i、char(size):存储固定长度的字符串。参数size指定了长度,如果存储的字符串长度小于size,用空格填充,默认长度为1,最长不超过2000个字节;

    ii、varchar2(size):存储可变长度的字符串。参数size指定了该字符串的最大长度。默认长度为1,,最长不超过4000个字节;

    iii、number(p,s):存储变长的数字。既可以存储浮点数,也可以存储整数。p表示数字的最大位数(如果是小数包括整数部分、小数部分,不包括小数点p默认是38位),s指小数位数

    Ⅳ、timestamp:和DATE类型大致相同,不过timestamp精确到了秒后6位小数

    Ⅴ、clob:存储单字节字符大数据。和varchar2数据类型相似,最大可以存储4G的数据,可以用来存储非结构化的XML文档

    ⅶ、blob:存储无结构的二进制大数据。最大可以存储4G的数据,可以用来存储图像、视频、音频等信息;

    d、[default default_value]——设定字段默认值

     

    e、约束

        Oracle数据库通过约束(constraints)防止无效的数据进入到表中,以保护数据的实体完整性。为了便于约束的使用,往往需要为约束起一个有意义的名字(例如student_id_pk表示student表id列为主键);如果不显式命名约束,Oracle数据库将以SYS_Cn的格式为约束命名,这里n是唯一的整数。约束分为字段级别约束和表级别约束:字段级约束:只为单个字段添加约束;表级约束:为一个或多个字段添加约束

    ①、not null:指定字段不能为空,只能定义为字段级约束

    create table user_info(

    user_name varchar2(10) not null,--约束名由Oracle指定,格式为SYS_Cn

    password varchar2(15) constraint student_password_nn not null--自定义约束名

    )

                         注意:没有显式命名的非空约束,使用PL/SQL Developer在Checks约束选项卡中是看不到的。

    ②、unique:指定字段的值(或字段组合的值)对于表中所有的行必须是唯一的。对于无非空约束的字段,唯一键约束允许输入空值,且包含空值的行可以有多个。可以为字段级别约束,也可以为表级别约束,表级约束时可以定义复合唯一键。主键是表中每行数据的唯一标识。

    create table user_info(

    user_name varchar2(30) unique

    )

    create table user_info(

                user_name varchar2(10),

               password varchar2(15),

               unique(user_name,password)--user_namepassword 联合做唯一键

             )

    ③、primary key:指定主键。该约束强制字段或字段组合必须具有唯一性且每个字段不能为空。可以为字段级别约束,也可以为表级别约束。

    create table user_info(

    id char(36) primary key,

    user_name varchar2(10)

    )

    create table user_info(

    id char(36) constraint user_info_id_pk primary key,

    user_name varchar2(10)

    )

    create table user_info(

    id char(36),

    user_name varchar2(10) ,

            constraint user_info_id_pk primary key(id)

    )

     

    注意:每个表只能创建一个主键

    ④、foreign key:指定一个字段或字段组合作为一个外键(即外来的主键唯一键),该外键和另一个表的主键或唯一键简历起一个关系。外键值必须匹配父表中存在的值;如果父表主键值或唯一键值是子表的外键值,则父表中的这条数据不能删除,Oracle数据库中外键的值可以为null。

    需求:如何将京东fuliuqingfeng的用户信息及其多个邮寄商品地址保存到数据库中

    方案1:

     

     问题:这种表结构存在严重的字段冗余,如果个人信息字段比较多这一问题表现的越严重。

    方案2:

     

     问题:这种表结构消除了字段冗余,但由于只是逻辑上的“外键”关系,所以依然无法保证数据完整性,例如可以将user_infoid为51b28fe1-4ebf-41ac-a17b-d5e276861fd0的数据删除,但此时地址表中数据将不再完整——找不到这些地址属于哪个用户;再例如也可以向address表中添加一条user_info_id不存在的地址信息(如:insert into address (id,user_info_id,real_name,mobile,address) values ('7da42cc6-36a6-4ad5-9998-71dbc30c8e17','ddc376dd-f8b3-42a6-b42a-db22abed1941','张三','18338970095','北京东城区');——同样,该条数据并不完整,依然找不到这些地址属于哪个用户

    方案3:

     

      说明:这种方案为user_info_id添加了外键,指向user_info表的主键,该约束起到了保护数据完整性的作用:如果删除的用户信息id已经在address表中使用,则该条数据无法删除;无法向address表中添加用户id不存在的地址信息。

    注意:

     1、设置表中字段为外键时,该字段对应父表字段必须是父表的主键或唯一键,否则创建失败,例如:

     

     2、外键数据类型要和父表对应字段数据类型一致,否则会出错;另外字段间长度也建议一致;

     

    ⑤、check:指定列值必须满足check中条件,否则无法进行添加或修改;一个字段可以定义多个check约束。

    create table people(

    age number(3) not null check(age>0 and age<150)-- --年龄不能为空并且范围在0~150

    )

    可以通过视图查看某个表有哪些约束,例如

     

  • 相关阅读:
    java Math类方法使用
    线性逻辑回归与非线性逻辑回归pytorch+sklearn
    Java学习方向
    ubuntu16.04安装Anaconda+Pycharm+Pytorch
    迁移学习resnet
    简单的CNN图像分类datasets.MNIST/FashionMNIST
    pytorch学习2
    tools/build.c
    zBoot/Makefile
    tools/version.c
  • 原文地址:https://www.cnblogs.com/lyxcode/p/9400350.html
Copyright © 2011-2022 走看看