www.9778.com 4

www.9778.comMySQL(十五)DDL之常见的约束

注意: 若要修改 PRIMARY KEY 约束,必须先删除现有的 PRIMARY KEY
约束,然后再用新定义重新创建该约束。

普通索引(index,只有这一种才是纯粹的index)等,也是基于是不是把index看作了key

ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

SQL PRIMARY KEY 约束实例与 PRIMARY KEY语法

                                                                
主键列不能包含 NULL 值;

①列级约束

好了现在我们来看看创建和修改 PRIMARY KEY 约束

索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)

3、主表的被引用列要求是一个key

可以在创建表时创建单个 PRIMARY KEY
约束作为表定义的一部分。如果表已存在,且没有 PRIMARY KEY
约束,则可以添加 PRIMARY KEY 约束。一个表只能有一个 PRIMARY KEY 约束。

UNIQUE 约束:唯一标识数据库表中的每条记录。
                                                    UNIQUE 和 PRIMARY
KEY 约束均为列或列集合提供了唯一性的保证。
                                                    (每个表可以有多个
UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束)

都支持组合键,但不推荐

在创建考试基本表时定义一个名为pk_ks的表级primary key约束,主码为一 cj
int , Results int privary key )个属性组 create table pk_ks( constraint
pk_ks primary key (xh,kch) ) kch int , ID int, 最佳答案 create table
ksjcb (xh int, CourseID int,

unique
key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;

ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

主键列不能包含 NULL 值。

可见,mysql的key是同时具有constraint和index的意义,这点和其他数据库表现的可能有区别。

constraint 约束名 foreign key references 主表

如果另一个表中的 FOREIGN KEY 约束引用了 PRIMARY KEY 约束,则必须先删除
FOREIGN KEY 约束。

index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等; 

创建数据库

不能有重复的值。如果为具有重复值或允许有空值的列添加 PRIMARY KEY
约束,则数据库引擎 将返回一个错误并且不添加约束。

二是索引(辅助查询用的)。

删除默认约束

表包含应用于自身的 PRIMARY XML 索引

唯一索引(unique index,一般写成unique key)、

删除非空约束

每个表应该都一个主键,并且每个表只能有一个主键。

索引分类,分为

ALTER TABLE stuinfo ADD PRIMARY KEY;

主键必须包含唯一的值。

一是约束(偏重于约束和规范数据库的结构完整性),

www.9778.com 1

PRIMARY KEY 约束唯一标识数据库教程表中的每条记录。

key
是数据库的物理结构,它包含两层意义和作用,

ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

如果存在以下情况,则不能删除 PRIMARY KEY 约束:

主键索引(必须指定为“PRIMARY KEY”,没有PRIMARY Index)、

字段名 字段类型 primary key,#主键

数据库引擎 会自动创建唯一的索引来强制实施 PRIMARY KEY
约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施
PRIMARY KEY 约束。

foreign
key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index;

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY REFERENCES
major ON DELETE SET NULL;

列不允许有空值。创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。

                                                                
每个表都应该有一个主键,并且每个表只能有一个主键。(PRIMARY KEY
拥有自动定义的 UNIQUE 约束)

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR NOT NULL;

为表中的现有列添加 PRIMARY KEY 约束时,SQL Server 2005 数据库引擎
将检查现有列的数据和元数据以确保主键符合以下规则:

primary
key
 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引;    

创建学生信息表,添加列级约束

不能添加违反以上规则的 PRIMARY KEY 约束。

其它key创建类似,但不管那种方式,既建立了constraint,又建立了index,只不过index使用的就是这个constraint或key。

seat INT UNIQUE,#唯一

如果已存在 PRIMARY KEY 约束,则可以修改或删除它。例如,可以让表的
PRIMARY KEY 约束引用其他列,更改列的顺序、索引名、聚集选项或 PRIMARY KEY
约束的填充因子。但是,不能更改使用 PRIMARY KEY 约束定义的列长度。

 

create table 表名(

(至少在Oracle上建立外键,不会自动建立index),因此创建key也有如下几种方式:
(1)在字段级以key方式建立, 如 create table t (id int not null primary
key);
(2)在表级以constraint方式建立,如create table t(id int, CONSTRAINT
pk_t_id PRIMARY key (id));
(3)在表级以key方式建立,如create table t(id int, primary key (id));

NOT NULL:非空,该字段的值必填

                          PRIMARY KEY
约束:唯一标识数据库表中的每条记录;

ALTER TABLE stuinfo DROP PRIMARY KEY;

 

删除默认

 

DEFAULT:默认,该字段的值不用手动插入有默认值

 

5、删除数据,先删除从表

                                                                
主键必须包含唯一的值;

alter table 表 modify column 字段名 字段类型 约束 auto_increment

 

2、一个表至多有一个自增长列

UNIQUE:唯一,该字段的值不可重复

#方式一:级联删除

create table 表(

可以通过以下两种方式来删除主表的记录

添加外键

2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求

CREATE DATABASE students;

添加主键

添加唯一

ALTER TABLE stuinfo ADD UNIQUE;

alter table 表名 drop primary key;

set auto_increment_increment=值;

#方式二:级联置空

添加非空约束

ALTER TABLE stuinfo DROP INDEX seat;

删除主键

alter table 表名 add【 constraint 约束名】 primary key;

2、相同点

删除非空

列级约束: 除了外键其他类型都支持,不可以起约束名;

www.9778.com 2

①、一个表至多有一个主键,但可以有多个唯一

)

添加非空

alter table 表名 modify column 字段名 字段类型 ;

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR NULL;

字段名 字段类型 not null,#非空

age INT DEFAULT 18,#默认约束

alter table 表名 drop foreign key 约束名;

);

www.9778.com 3

②、主键不允许为空,唯一可以为空

修改表时添加约束,先重新创建一个表

创建科目表,添加主键约束

alter table 表 modify column 字段名 字段类型 约束

3、自增长列只能支持数值型

PRIMARY KEY:主键,该字段的值不可重复并且非空 unique+not null

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY
REFERENCES major;

添加表级约束

CREATE TABLE stuinfo(

表级约束:除了非空和默认其他类型都支持,可以起约束名,但对主键无效。

删除外键

CREATE TABLE major(id INT PRIMARY KEY,majorName VARCHAR;

alter table 表名 add【 constraint 约束名】 unique;

添加默认约束

alter table 表名 modify column 字段名 字段类型 not null;

stuName VARCHAR NOT NULL UNIQUE,#非空

都具有唯一性

添加唯一

通用的写法

ALTER TABLE stuinfo MODIFY COLUMN age INT ;

删除唯一

删除主键

查看stuinfo中的所有索引,包括主键、外键、唯一

特点:

1、不用手动插入值,可以自动提供序列值,默认从1开始,步长为1

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

添加外键

字段名 字段类型 unique,#唯一

alter table 表名 add【 constraint 约束名】 foreign key references 主表;

如果要更改起始值:手动插入值

如果要更改步长:更改系统变量

②表级约束

删除外键

alter table 表名 drop index 索引名;

4、自增长列必须为一个key

alter table 表名 modify column 字段名 字段类型 ;

id INT PRIMARY KEY,#主键

①列级约束

majorId INT REFERENCES major#外键

);

删除唯一

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

1、区别:

www.9778.com 4

添加默认

alter table 表名 modify column 字段名 字段类型 default 值;

1、用于限制两个表的关系,从表的字段值引用了主表的某字段值

4、插入数据,先插入主表

auto_increment_increment

②表级约束

字段名 字段类型 default 值,#默认

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY REFERENCES
major ON DELETE CASCADE;

FOREIGN KEY:外键,该字段的值引用了另外的表的字段

SHOW INDEX FROM stuinfo;

注意:

字段名 字段类型 约束 auto_increment

USE students;

添加主键