mysql/oracle----约束

来源:互联网 发布:windows telnet 漏洞 编辑:程序博客网 时间:2024/06/05 02:42

  约束最重要的作用就是定义规则。

1、非空约束

1).在创建表时设置非空约束
  语法:CREAETE TABLE table_name(column_name datatype NOT NULL, ...);
2).在修改表时添加非空约束
  语法:ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
3).在修改表时去除非空约束
  语法:ALTER TABLE table_name MODIFY column_name datatype NULL;


2、主键约束

  作用:确保表当中每一行数据的唯一性。
  特点:非空,唯一。
        一张表只能设计一个主键约束,
        但主键约束可以由多个字段构成(联合主键)

--1).在创建表时设添加主键约束--语法1SQL> CREATE TABLE table_name      (id int NOT NULL PRIMARY KEY,       age int);-- 语法2:建议用这种写法SQL> CREATE TABLE table_name      (id int NOT NULL,       age int,       CONSTRAINT pk_id_age PRIMARY KEY(id,age));--2).在创建表后时添加主键约束SQL>  ALTER TABLE table_name ADD CONSTRAINT pk_id PRIMARY KEY(id);--3).更新约束的名称SQL> ALTER TABLE table_name RENAME CONSTRAINT pk_id TO new_pk_id;--4).删除主键的约束  禁用约束语法:disable|enanle constraint constraint_nameSQL> ALTER TABLE table_name DISTABLE CONSTRAINT pk_id;  删除约束语法1:drop constraint constraint_nameSQL> ALTER TABLE table_name DROP CONSTRAINT pk_id;  删除约束语法2:drop primary key [cascade]SQL> ALTER TABLE table_name DROP PRIMARY KEY;

3、外键约束

  references 注意:
     1.设置外键约束时,主表的字段必须是主键
     2.主从表中相应的字段必须是同一个数据类型
     3.从表中外键字段的值必须来自主表中的相应字段的值,或者为null值

-------------------1).在创建表时设置外键约束-- 语法1--主表SQL> CRERATE TABLE table_name1(type_id int primary key);SQL> CRERATE TABLE userinfo_f    (id int primary key,    type_id_new int REFERENCES table_name1(type_id));SQL> insert into table_name1 values(1,1);SQL> insert into userinfo_f(id,typeid_new) values(1,2);ORA-02291: 违反完整约束条件 (SYS.SYS_C0011150) - 未找到父项关键字SQL> insert into userinfo_f(id,typeid_new) values(1,1);1 row insertedSQL> insert into userinfo_f(id,typeid_new) values(1,null);ORA-00001: 违反唯一约束条件 (SYS.SYS_C0011149)SQL> insert into userinfo_f(id,typeid_new) values(2,null);1 row inserted--语法2:CONSTRAINT constraint_name FOREIGN KEY(column_name)         REFERENCES table_name(column_name)[ON DELETE CASCADE]-- 如果要级联删除,在后面加ON DELETE CASCADE就行SQL> create table userinfo_f2    (id varchar2(10) primary key,    typeid_new varchar2(10),    constraint fk_typeid_new foreign key(typeid_new) references table_name1(type_id));-----------------2).在修改表时添加外键约束--语法:ADD CONSTRAINT constraint_name FOREIGN KEY(column_name)        REFERENCES table_name(column_name)[ON DELETE CASCADE]SQL> ALTER TABLE alter table userinfo_f2    ADD CONSTRAINT fk_typeid_new     foreign key(typeid_new) references table_name1(type_id);----------------3).删除外键约束--禁用/启用约束:DISABLE|ENABLE CONSTRAINT constraint_nameSQL> select constraint_name, constraint_type, status from user_constraints  2  where table_name='USERINFO_F4';CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS------------------------------ --------------- --------SYS_C0011153                   P               ENABLEDFK_TYPEID_ALTER                R               ENABLEDSQL> alter table userinfo_f4  disable constraint FK_TYPEID_ALTER ;SQL> select constraint_name, constraint_type, status from user_constraints  2  where table_name='USERINFO_F4';CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS------------------------------ --------------- --------SYS_C0011153                   P               ENABLEDFK_TYPEID_ALTER                R               DISABLED--删除约束语法:DROP CONSTRAINT constraint_name;SQL> alter table userinfo_f4 drop constraint FK_TYPEID_ALTER ;SQL> select constraint_name, constraint_type, status from user_constraints  2  where table_name='USERINFO_F4';CONSTRAINT_NAME                CONSTRAINT_TYPE STATUS------------------------------ --------------- --------SYS_C0011153                   P               ENABLED

4、唯一约束

  作用:保证字段值的唯一性
唯一约束与主键约束的区别
  1.主键字段值必须是非空的,唯一约束允许有一个空值
  2.主键在每张表中只能有一个,而唯一约束可以有多个

---------------1).-创建表时设置唯一约束------------------语法1:SQL> CREATE TABLE table_name1    (id INT PRIMARY KEY NOT NULL,    username varchar(20) UNIQUE);--语法2:SQL> CREATE TABLE table_name1    (id INT PRIMARY KEY NOT NULL,    username varchar(20) ,    CONSTRAINT un_username UNIQUE(username));---------------2).在修改表时添加唯一约束---------------SQL> ALTER TABL table_name ADD CONSTRAINT un_username UNIQUE(username);---------------3).删除唯一约束(同上)--------------  禁用/启用约束:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name  删除约束:ALTER TABLE table_name DROP CONSTRAINT constraint_name;

5、检查约束

--------------1).在创建表时设置检查约束----------------语法1:SQL> CREATE TABLE table_name1     (id INT PRIMARY KEY NOT NULL,     salary INT CHECK(salary>0));--语法2:SQL> create table table_name2    (id varchar2(10) primary key,     salary INT CHECK,     constraint ck_salary check(salary>0));SQL> INSERT INTO table_name1 VALUES(1,-10);ORA-02290: 违反检查约束条件 (SYS.SYS_C0011161)--------------2).在修改表时添加检查约束--------------  语法:ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK(expressions);-------------3).删除检查约束(同上)----------------  禁用/启用约束:ALTER TABLE table_name DISABLE|ENABLE CONSTRAINT constraint_name  删除约束:ALTER TABLE table_name DROP CONSTRAINT constraint_name;

6、默认约束

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

-- 设置默认约束SQL> create table table_name    (id varchar2(10) primary key,     age int DEFAULT 18);-- 已建表修改SQL> ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT defaultvalue;-- 删除SQL> ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;






1 0