1、约束是作用于表中列上的规则,用于限制加入表中的数据;
2、约束的存在保证了数据库中数据的正确性、有效性和完整性。
在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。
语法
字段名 数据类型 auto_increment
create table t_user1(
id int primary key auto_increment,
name varchar(20)
);
默认情况下,auto_increment的初始值是 1,每新增一条记录,字段值自动加 1。
一个表中只能有一个字段使用 auto_increment约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。
auto_increment约束的字段必须具备 NOT NULL 属性。
auto_increment约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等。
auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。
如果第一条记录设置了该字段的初始值,那么新增加的记录就从这个初始值开始自增。例如,如果表中插入的第一条记录的 id 值设置为 5,那么再插入记录时,id 值就会从 5 开始往上增加
create table t_user (
id int primary key auto_increment,
name varchar(20)
)auto_increment=100;
create table t_user3 (
id int primary key auto_increment,
name varchar(20)
);
alter table t_user2 auto_increment=100;
注意:
delete和truncate在删除后自增列的变化
delete数据之后自动增长从断点开始
truncate数据之后自动增长从默认起始值开始
外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性
语法
ALTER TABLE 从表 ADD CONSTRAINT 外键名 FOREIGN KEY(外键列名) REFERENCES 主表(主键列名)
ALTER TABLE 从表 DROP FOREIGN KEY 外键名
保存数据时未指定值,采用默认值
语法
<字段名> <数据类型> default 默认值
create table t_user10 (
id int ,
name varchar(20) ,
address varchar(20) default ‘北京’ -- 指定默认约束
);
alter table 表名 modify 列名 类型 default 默认值;
alter table t_user11 modify <字段名> <数据类型> default 默认值;
alter table <表名> modify column <字段名> <类型> default null;
添加默认约束-方式2
create table t_user11 (
id int ,
name varchar(20) ,
address varchar(20)
);
alter table t_user11 modify address varchar(20) default ‘北京’;
删除默认约束
alter table <表名> modify column <字段名> <类型> default null;
alter table t_user11 modify column address varchar(20) default null;
保证列中的值满足某一条件
Tips:MySQL不支持检查约束。
语法
ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件表达式)
条件表达式的结果必须为TRUE,否则不允许插入或更新。
例如限定年龄必须大于0小于150:
ALTER TABLE 用户 ADD CONSTRAINT ck_age CHECK (age > 0 and age < 150)
ALTER TABLE 表名 DROP CONSTRAINT 约束名
与默认值、唯一约束相比,检查约束可以使用更复杂的条件逻辑。
主键是一行数据的唯一标识,要求非空且唯一。
在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。
–在定义字段的同时指定主键,语法格式如下:
create table 表名(
...
<字段名> <数据类型> primary key
...
)
例如:
create table emp1(
eid int primay key,
name VARCHAR(20),
deptId int,
salary double
);
在定义字段之后再指定主键,语法格式如下:
create table 表名(
...
[constraint <约束名>] primary key [字段名]
);
例如:
create table emp2(
eid INT,
name VARCHAR(20),
deptId INT,
salary double,
constraint pk1 primary key(id)
);
create table 表名(
...
);
alter table <表名> add primary key(字段列表);
create table emp4(
eid int,
name varchar(20),
deptId int,
salary double,
);
alter table emp4 add primary key(eid);
所谓的联合主键,就是这个主键是由一张表中多个字段组成的。
注意:
当主键是由多个字段组成时,不能直接在字段名后面声明主键约束。
一张表只能有一个主键,联合主键也是一个主键
create table 表名(
...
primary key (字段1,字段2,…,字段n)
);
create table emp3(
name varchar(20),
deptId int,
salary double,
primary key(name,deptId)
);
alter table <数据表名> drop primary key;
alter table emp1 drop primary key;
alter table emp5 drop primary key;
保证列中所有数据不能为Null值。
语法
<字段名> <数据类型> not null
create table t_user7 (
id int ,
name varchar(20) not null, -- 指定非空约束
address varchar(20) not null-- 指定非空约束
);
alter table 表名 add constraint 约束名 unique(列);
create table t_user7 (
id int ,
name varchar(20) , -- 指定非空约束
address varchar(20) -- 指定非空约束
);
alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify address varchar(20) not null;
- alter table t_user7 modify name varchar(20) not null;
- alter table t_user7 modify address varchar(20) not null;
保证列中所有数据各不相同。
语法
<字段名> <数据类型> unique
create table t_user8 (
id int ,
name varchar(20) ,
phone_number varchar(20) unique -- 指定唯一约束
);
alter table 表名 add constraint 约束名 unique(列);
create table t_user9 (
id int ,
name varchar(20) ,
phone_number varchar(20) -- 指定唯一约束
);
alter table t_user9 add constraint unique_ph unique(phone_number);
alter table <表名> drop index <唯一约束名>;
alter table t_user9 drop index unique_ph;