精华内容
下载资源
问答
  • SQL 约束(Constraints)SQL 约束用于规定表中数据规则。如果存在违反约束数据行为,行为会被约束终止。约束可以在创建表时规定(通过 create table 语句),或者在表创建之后规定(通过 alter table 语句)。...

    SQL 约束(Constraints)

    SQL 约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过 create table 语句),或者在表创建之后规定(通过 alter table 语句)。

    create table + constraint 语法

    create 
    在 SQL 中,我们有如下约束: - not null - 指示某列不能存储 NULL 值。 - unique - 保证某列的每行必须有唯一的值。 - primary key - not null 和 unique 的结合。确保某列(或两个列多个列的结合)有唯>一标识,有助于更容易更快速地找到表中的一个特定的记录。 - foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。 - check - 保证列中的值符合指定的条件。 - default - 规定没有给列赋值时的默认值

    接下来,我们依次给大家分享每一种约束。

    Sql not null 约束

    在默认的情况下,表的列接受 NULL 值。not null 约束强制列不接受 NULL 值。not null 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

    下面的 SQL 强制 "PersonID" 列、 "Name" 列以及 "Address" 列不接受 NULL 值:

    create 

    添加 not null 约束

    在一个已创建的表的 "City" 字段中添加 not null 约束如下所示: 实例

    alter 

    删除 not null 约束

    在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示: 实例

    alter 
    注意:在添加和删除not null约束,我用change和modify命令始终报错,这是因为我用的是sql server数据库,而change和modify命令是在my sql 和oracle下才能用的语法。

    728cc0b8b19d6c0d5ef85300c608888f.png

    Sql unique 约束

    unique 约束唯一标识数据库表中的每条记录。unique 和primary key约束均为列或列集合提供了唯一性的保证。primary key 约束拥有自动定义的 unique 约束。请注意,每个表可以有多个 unique约束,但是每个表只能有一个 primary key 约束。

    create table 时的 unique 约束

    下面的 SQL 在 "Persons" 表创建时在 "PersonId" 列上创建unique 约束:

    MySQL:

    create 

    SQL Server / Oracle / MS Access:

    create 

    如需命名 unique 约束,并定义多个列的 unique 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    create 

    alter 时的 unique 约束

    当表已被创建时,如需在 "PersonID" 列创建unique 约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    如需命名 unique 约束,并定义多个列的 unique 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    撤销 unique 约束

    如需撤销 unique 约束,请使用下面的 SQL:

    MySQL:

    alter 

    SQL Server / Oracle / MS Access:

    alter 

    primary key 约束

    primary key 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。

    create table 时的 primary key 约束

    下面的 SQL 在 "Persons" 表创建时在 "PersonID" 列上创建 primary key 约束:

    MySQL:

    create 

    SQL Server / Oracle / MS Access:

    create 

    如需命名 primary key 约束,并定义多个列的 primary key 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    create 

    注释:在上面的实例中,只有一个主键 primary key(pk_PersonID)。然而,pk_PersonID 的值是由两个列(PersonID和 Name)组成的。

    alter table 时的 primary key 约束

    当表已被创建时,如需在 "PersonId" 列创建 primary key 约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    如需命名 primary key 约束,并定义多个列的 primary key 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    注释:如果您使用 alter table 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。

    撤销 primary key 约束

    如需撤销 primary key 约束,请使用下面的 SQL:

    MySQL:

    alter 

    SQL Server / Oracle / MS Access:

    alter 

    foreign key 约束

    一个表中的 foreign key 指向另一个表中的 unique key(唯一约束的键)。 让我们通过一个实例来解释外键。请看下面两个表:

    Persons 表:

    faddcbeffb77a25fa092d19dc128d222.png

    Orders表:

    4f80033d8efc239c9ecf5021a05dcf64.png
    请注意: - Orders"表中的 "PersonId" 列指向 "Persons" 表中的 "PersonId" 列。 - "Persons" 表中的 "PersonId" 列是 "Persons" 表中的 primary key。 - "Orders" 表中的 "PersonId" 列是 "Orders" 表中的 foreign key。 - foreign key约束用于预防破坏表之间连接的行为。 - foreign key约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

    create table 时的foreign key 约束

    下面的 SQL 在 "Orders" 表创建时在 "PersonId" 列上创建 foreign key 约束:

    MySQL:

    create 

    SQL Server / Oracle / MS Access:

    create 

    如需命名foreign key 约束,并定义多个列的foreign key约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    create 

    alter table时的foreign key约束

    当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 foreign key约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    如需命名 foreign key约束,并定义多个列的 foreign key约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    撤销foreign key约束

    如需撤销 foreign key约束,请使用下面的 SQL:

    MySQL:

    alter 

    SQL Server / Oracle / MS Access:

    alter 

    check 约束

    check 约束用于限制列中的值的范围。如果对单个列定义 check 约束,那么该列只允许特定的值。如果对一个表定义 check 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

    create table 时的check 约束

    下面的 SQL 在 "Persons" 表创建时在 "PersonId" 列上创建 check 约束。check 约束规定 "PersonId" 列必须只包含大于 0 的整数。

    MySQL:

    create 

    SQL Server / Oracle / MS Access:

    create 

    如需命名 check 约束,并定义多个列的 check 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    create 

    alter table 时的check 约束

    当表已被创建时,如需在 "P_Id" 列创建 check 约束,请使用下面的 SQL:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    如需命名 check 约束,并定义多个列的 check 约束,请使用下面的 SQL 语法:

    MySQL / SQL Server / Oracle / MS Access:

    alter 

    撤销 check 约束

    如需撤销 check 约束,请使用下面的 SQL:

    SQL Server / Oracle / MS Access:

    alter 

    MySQL:

    alter 

    Sql default 约束

    default 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

    create table 时的default 约束

    下面的 SQL 在 "Persons" 表创建时在 "City" 列上创建 default 约束:

    My SQL / SQL Server / Oracle / MS Access:

    create 

    通过使用类似getdata()这样的函数,default 约束也可以用于插入系统值:

    create 

    alter table 时的default 约束

    当表已被创建时,如需在 "City" 列创建 default 约束,请使用下面的 SQL:

    MySQL:

    alter 

    SQL Server / MS Access:

    alter 

    Oracle:

    alter 

    撤销 default 约束

    如需撤销 default 约束,请使用下面的 SQL:

    MySQL:

    alter 

    SQL Server / Oracle / MS Access:

    alter 
    展开全文
  • 答:子查询是一个select语句,它是嵌在另一个select语句字句(2) 子查询使用场景是什么?答:当某个查询需要利用另外一个查询查询结果时可以使用子查询。2. 子查询_2(1) 查询本部门最高工资员工答:select ...

    5841d1dbdb576594a456f5bd994f35c5.png

    子查询_

    1. 子查询_1

    (1) 什么是子查询?

    答:子查询是一个select语句,它是嵌在另一个select语句中的字句

    (2) 子查询的使用场景是什么?

    答:当某个查询需要利用另外一个查询的查询结果时可以使用子查询。

    2. 子查询_2

    (1) 查询本部门最高工资的员工

    答:select max(emp.salary) from employees emp group by department_id;

    (2) 查询每个部门平均薪水的等级

    答:select (select avg(emp.salary) from employees emp group by department_id) from job_grade gr where (select avg(emp.salary) from employees emp group by department_id) between gr.lowest_sal and gr.highest_sal;

    3. 用户user

    (1) 如何修改用户的密码?

    答:alter user 用户名 identified by 新密码;

    (2) 如何锁定/解锁用户账户?

    答:① 登录sys用户,conn sys as sysdba;(这个需要输入口令)或者conn /as sysdba;(这个不需要输入口令)

    ② 输入语句:alter user scottaccount unlock;

    4. 用户的权限

    (1) 列举Oracle中常用的角色及其含义

    答:connect: 连接数据库 resource:使用资源
    dba: 数据库管理员

    (2) 如何给用户授权? 如何撤销用户的权限?

    答:--授予权限和角色

    grant connect,resource to emp; --resource 资源

    select * from soctt.dept;

    --撤销权限和角色

    revoke connect,resource from emp;

    5. 数据库表格的创建

    (1) Oracle中的数据类型有哪些?

    答:字符类型,数字类型和日期类型。

    (2) CHAR和VARCHAR2之间有什么区别?

    答:CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。

    SQL语言

    6. 表格的修改和删除

    (1) 如何对表格进行重命名?

    答:Rename table to table2

    (2) 如何修改表格某个字段的类型?

    答:Alter table tableName modify (字段名 字段类型)

    7. 表格的约束_主键约束

    (1) 什么是表格的约束? 约束有什么作用?

    答:对表格中的数据进行约束的规则,可以提高数据的安全性、有效性和可操作性

    (2) 表格的约束有哪些? 什么是主键约束?

    答:主键约束、唯一约束、非空约束和外键约束。

    主键约束:表中每一行数据的唯一、非空标识符

    8. 表格的约束_非空约束_唯一约束

    (1) 什么是非空约束?

    答:表中指定列不能为空

    (2) 什么是唯一约束?

    答:表中指定列数据是唯一的,只能出现一次

    9. 表格的约束_检查约束_外键约束

    (1) 什么是检查约束?

    答:某列的取值范围、格式。如性别,年龄的约束

    (2) 什么是外键约束?

    答:用于两表间建立关系,需要指定引用主表的那列。外键通常用来约束两个表之间的数据关系,定义外键的那张表称为字表,另一张表成为主表。在表的创建过程中,应该先创建主表,后创建子表。

    10. 表格的约束_外键约束_修改表时添加约束

    (1) 修改表的时候有时候我们会添加相应的约束,请分别列出添加主键约束,唯一约束,验证约束,外键约束的约束内容是怎样的?

    答:Alter table 表名 modify 字段名 unique;

    Alter table 表名 modify 字段名 primary_key;

    Alter table 表名 add constraint 外键名 foreign key(列名) references table2(主键列名);

    Alter table 表名 add check(salary>1500);

    (2) 在删除主表数据时, 如果想级联删除子表中的数据, 应该如何设置外键?

    答:删除主表,字表列设置为null

    11. 序列sequence

    (1) 什么是序列? 有什么作用? 如何使用序列?

    答:1、序列是用户创建的数据库对象,序列会产生唯一的整数。

    2、序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。

    3、通过 DDL 语句创建序列

    (2) 创建序列的语法结构是什么?

    答:create sequence sequence_clazz_cid;

    12. 索引index

    (1) 索引是用来干什么的?有那些约束建立索引?

    答:为了加快对数据的搜索速度而设立的。索引有自己专门的存储空间,与表独立存放。

    Primary_key 或者 unique

    (2) 说下你怎么使用索引的?使用索引的好处和坏处?

    答:一个列包含一个大范围的值

    一个列包含很多的空值

    一个或多个列经常同时在一个 WHERE子句中或一个连接条件中被使用表很大,并且经常的查询期望取回少于百分之2到4的行。

    --1.索引可以提高查询的速度

    --2.索引也要占据单独的空间

    --3.索引不是越多越好,索引越多,占据的空间也越多

    --4.索引会降低添加 更新 删除的效率,因为进行这些操作时需要重新维护引

    展开全文
  • oracle 创建表sql语句主键,自增长

    千次阅读 2015-07-03 15:23:25
    在创建表之前请必须了解一下两点 1,oracle 没有identity,所以需要自己用squence 和 trigger 配合使用 实现 自增长。 2,oracle中如果使用关键字...现在就直接来sql语句。 检查是否存在该表,并删除 declare


    在创建表之前请必须了解一下两点

    1,oracle 没有identity,所以需要自己用squence 和 trigger 配合使用 实现 自增长。

    2,oracle中如果使用关键字,需要用 双引号引起了。所以下面例子中出现的双引号可以理解成转义的。


    /    在执行多个sql是用 / 可以区分。


    现在就直接来sql语句。


    检查是否存在该表,并删除

    declare 
          num   number; 
    begin 
          select count(1) into num from all_tables where TABLE_NAME = 'TABLEINFO' and OWNER='SCOTT'; 
          if   num=1   then 
              execute immediate 'drop table TABLEINFO'; 
          end   if; 
    end; 
    
    /
    declare 
    num number;
    begin
        select count(1) into num from user_sequences where sequence_name='SEQ_TABLEINFOID';
        if num =1 then
        execute immediate 'drop sequence SEQ_TABLEINFOID';
        end if;
    end;
    
    
    
    
    /
    declare 
    num number;
    begin
        select count(1) into num from user_triggers where trigger_name='TRI_TABLEINFOID';
        if num=1 then
        execute immediate 'drop trigger TRI_TABLEINFOID';
        end if;
    end;
    
    
    /
    CREATE TABLE tableinfo
    (
        "id"               number(4) NOT null,
        tablename           varchar2(40) NOT NULL,
        constraint PK_tableinfoID primary key ("id")
    );
    
    /
    create sequence SEQ_TABLEINFOID
    minvalue 1
    nomaxvalue
    start with 1
    increment by 1
    nocache;
    /
    create trigger TRI_TABLEINFOID
    before insert on TABLEINFO
    for each row
    declare 
    begin
    if inserting and :new."id" is NULL or :new."id" =0 then
    :new."id" :=SEQ_TABLEINFOID.nextval;
    end if;
    end TRI_TABLEINFOID;
    
    


    展开全文
  • 数据库中存储数据方式:规则表---〉分区表索引组织表簇修改列名alter table 表明 ...删除字段alter table 表名 drop column 字段名修改列属性alter table 表名 modify (字段名 新属性)设置某一个字段为无用状态al
    数据库中存储数据的方式:
    规则表---〉分区表
    索引组织表
    修改列名
    alter table 表明 rename column rename 老列名 to 新列名
    添加 字段
    alter table 表名 add(字段名 类型);
    删除字段
    alter table 表名 drop column 字段名
    修改列属性
    alter table 表名 modify (字段名 新属性)
    设置某一个字段为无用状态
    alter table 表名 set unuesed column 字段名
    删除无用字段
    alert table 表名 drop unused cloumns
    添加主键
    alert table 表名 add constraint pkKey primary key(字段列表)
    表分区
    oracle 允许用户对标进一步的规划,即对标进一步的拆分,将表分成若干个逻辑部分,
    每个部分成其为标的分区
    表分区的优点
    增强可用性。单个分区出现故障不会影响到其它分区
    均衡IO。不同的分区可以影射到不同的磁盘中
    改善性能
    范围分区法
    这种分区方法是根据表中的列值的范围对标进行分区
    分区时, 首先依据列中得值的可能的范围进行划分
    例:
    create table student

    studentId integer not null,
    studentName varchar2(20),
    scroe integer

    partition by rang(Score)
    (
    partition p1 values lessthan(60),
    partition p2 values lessthan(70),
    partition p3 values lessthan(80),
    partition p4 values lessthan(maxvalue),
    ) ;
    散列分区
    散列分区法提供了一种通过制定分区编号来均匀地分布数据的方法
    他通过hash 函数间数据映射到相应的分区上
    它使得数据均匀的分配到各分区上,各分区大小趋向一致
    例:
    create table department

    depno integer not null,
    depname varchar2(20),

    partition by hash(depno)
    (
    partition p1 ,
    partition p2,
    ) ;
    复合分区
    复合分区是先对数据进行范围分区,然后在每个字分区理由进行散列分区的一种分区方法
    例:
    create table salgrade
    (grade number ,losal number hisal number , hisal number )
    partition by rang(grade)
    subpartition by hash (losal, hisal)(
    partition p1 value lessthan (10),
    (subpartition sp1,subpartition sp2),
    partition p1 value lessthan (20),
    (subpartition sp3,subpartition sp4),
    )
    列表分区
    列表分区允许用户明确的控制行到分区的映射
    不同的范围分区或列分区,他运许按自然的方式对无序和不相干的数据集进行分组的组织
    例如:
    partition by list(字段)
    (
    partition 列名称 values (值列表),
    partition 列名称 values (值列表),
    。。。
    。。。
    partition 列名称 values (值列表)
    )
    指定的分区中查询
    select * from tableName partition(p1)
    表分区的维护
    移动,添加,删除,结合, 截断,拆分,合并,交换
     
    展开全文
  • 1. 查找所有引用某表主键为外键表 其中PK_SRVMONITOR_SERVICE为该表的主键名   select c.constraint_name, c.table_name, c.constraint_type, c.r_constraint_name from user_constraints c where c...
  • 这道题是我面试一家金融软件...要求能够通过一个sql语句删除所有重复的记录,并只留下重复记录中第一条记录的sql语句。 答案: delete from userinfo u3 where u3.userid in ( with aaa as(select u2.useri...
  • Oracle数据库表创建以及表结构增_删_改SQL语句相关脚本 创建表结构 create table 表名( id varchar2(64), name varchar2(230), age number(1), constraint 约束名称 primary key(id) );––––––创建表结构 ...
  • Oracle数据库中的约束有五种约束,分别是: 实体完整性:主键约束、唯一性约束(可以为空) ...创建、删除约束的SQL语句: 表名是test 1、添加主键约束(非空,不重复)(给test表的id这一列添加主键约束) alter
  • Oracle基本SQL语句

    2020-05-19 16:00:06
    删除表: ...主键(Primary Key–PK):主键在表中能够唯一表示一条记录字段,主键唯一并且不能为空。 外键(Foreign Key–FK):外键主要用来维系多表之间关联关系,一张表中外键,必定是另一张表中
  • 需求是删除一个主表A,另有两个附表建有此表的主键ID外键。删除A表数据级联删除另两个表关联数据。增删改查使用hibernate实现。 一开始一直以为是hibernate内部处理上有关联操作导致的删除和更新数据缓慢。...
  • sql语言整理: 创建:表 增加:表中列,完整性...删除:表列,列里面值,主键,唯一性,外键,check 示例: 创建雇员表(Employee),包括员工号(empno),员工名(empname),工作职位(job),主管领导(mana...
  • 1 索引简介索引是与表相关一个可选结构用以提高 SQL 语句执行性能减少磁盘I/O使用 CREATE INDEX 语句创建索引在逻辑上和物理上都独立于表数据 Oracle 自动维护索引索引有各种类型,除了标准索引外,还有一些...
  • SQL Server 基本SQL语句 drop table student --删除student这个表,彻底删除 create table student( --创建数据表 sid int primary key identity(10,1), --设置sid为主键自增(从10开始逐渐加1) sname varchar(20...
  • Oracle实现主键id自增

    2020-09-29 16:20:33
    在navicat中使用sql语句创建序列 CREATE SEQUENCE SEQ_USER --SEQ_USER为序列名称 INCREMENT BY 1 -- 每次自增加1 START WITH 1 --序列从1开始自增 NOMAXvalue --最大值 NOCYCLE NOCACHE; 查看当前序列 select ...
  • not null 非空 字段+not null unique 唯一 primary key 主键(确保数据不能重复) ...级联删除删除一个部门,部门里员工跟着删除--->on delete cascade 制空:把部门下员工转到NULL,删除部...
  • ; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.sql.*"%> ... 我表名叫STUDENT 主键是ID 然后还有 NUM ,NAME ,SEX ,STATE, STUDENT_ID ,CLASS,ID_CARD ,TEL, MAIL 字段 大神帮个忙被
  •  删除主键:Alter table tabname drop primary key(col)  8、说明:  创建索引:create [unique] index idxname on tabname(col….)  删除索引:drop index idxname  注:索引是不可更改,想更改必须删除重新...
  • sql语句优化

    2017-08-14 11:48:48
    ------------------------------数据库和SQL语句优化-------------------------------------- 1.创建表时,尽量建立主键,大数据表删除使用truncate table 2.合理使用索引,索引顺序尽量与查询条件一致,数据频繁更改...
  • 通过PLSQLDEV设置 1,创建一个有主键的表 2,创建一个丛表,通过PL/SQDEV设置带有级联删除的外键 ...通过SQL语句设置 [code="sql"]alter table [丛表名] add constraint [设置外键...
  • 根据Oracle的AWR、ADDM发现一个SQL语句SQL语句:select distinct m.*from ING_mmee_info mstart with m.mmee_id in(select distinct m.mmee_idfrom ING_PERSON_EMPLOYEE h,ING_PERSON_ROLE r,ING_mmee_info m,IN...
  • SQL 增删查改 DDL DDL:数据定义语言 一、创建 1.创建|删除 表 --oracle常用字段类型 number() 数值类型 varchar2()可变字节型 create table 表名( 字段名 字段类型 约束, 字段名 字段类型 约束 ); drop table ...
  • 经典SQL语句大全

    热门讨论 2014-12-20 12:00:30
    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...
  • 1 目标用示例演示如何创建、删除、禁用和使用唯一性约束。2 什么是唯一性约束?唯一性约束指表中一个字段或者多个...3 唯一性约束和主键的区别主键(Primary Key):所有组成主键的列都不能包含空值。唯一性约束(Uniqu...
  • oracle 删除重复记录

    千次阅读 2009-04-03 20:51:00
    对此,总结了一下删除重复记录方法,以及每种方法优缺点。...1、通过创建临时表可以把数据先导入到一个临时表中,然后删除原表数据,再把数据导回原表,SQL语句如下:creat table tbl_tmp (select distinct* f
  • 正在看的ORACLE教程是:oracle快速删除重复记录。做项目时候,一位同事导数据时候,不小心... 1、通过创建临时表 可以把数据先导入到一个临时表中,然后删除原表数据,再把数据导回原表,SQL语句如下: creat 
  • 1. 使用INSERT 语句添加行  a> 省略列列表  b> 为列指定空值  c> 在列值中使用单引号和双引号  4> 从一个表向另一个复制...4. 使用DELETE语句删除行 5. 数据库完整性  主键  外键 6. 使用默
  • SQL Oracle 学习

    2020-08-13 17:46:26
    SQL Oracle数据库相关学习数据库结构数据库物理结构数据库逻辑结构数据完整性主键约束唯一性约束检查约束默认约束外键约束SQL语言SQL运算符算术运算符赋值运算符逻辑运算符比较运算符SQL语句语法插入单行数据插入...

空空如也

空空如也

1 2 3 4 5 6
收藏数 108
精华内容 43
关键字:

oracle删除主键的sql语句