目录
1.主键约束(primary key)
(1)添加单列主键
(2)添加多列主键(联合主键)
(3)通过修改表结构方式添加主键
(4)删除主键约束
2.自增长约束(auto_increment)
(1)用字段添加auto_increment属性来实现(单列)主键的自增长,自增长初始值为1
(2)指定自增长的初始值
(3)删除自增长
3.非空约束(not null)
(1)非空所在列的数据必须有值(不能为空)
(2)删除非空约束
4.唯一性约束(unique)
5.默认约束(default)
6.零填充约束(zerofill)
(1)添加零填充约束
(2)删除零填充约束
7.外键约束(foreign key)
a.在定义字段的同时用primary key来指定主键
/* 格式如下: create table 表名( ..., <字段名> <数据类型> primary key, ... ); */ CREATE TABLE emp1( -- 创建emp1表 eid1 INT PRIMARY KEY, NAME VARCHAR(20), deptid INT, -- deptid部门号 salary DOUBLE );
b.在定义完字段后再指定主键
/* 格式如下: create table 表名( ..., <字段名> <数据类型>, ..., [constraint <约束名>] primary key [字段名] ); */ CREATE TABLE emp2( -- 创建emp2表 eid2 INT, NAME VARCHAR(20), deptid INT, salary DOUBLE, CONSTRAINT pk1 PRIMARY KEY(eid2) -- CONSTRAINT pk1 可省略 );
c.主键的作用 主键约束的列唯一、数据不能重复(其他数据随意)且不能为空值(null)
-- 以emp1为例: INSERT INTO emp1(eid1,NAME,deptid,salary) VALUES(1001,'张三',10,3000); INSERT INTO emp1(eid1,NAME,deptid,salary) VALUES(1002,'李四',20,4000), (1003,'李四',20,4000);
联合主键是由一张表中的多个字段组成,实质也是组合成一个主键
/* 格式如下: create table 表名( ..., <字段名> <数据类型>, ..., primary key (字段1,字段2,字段3...) ); */ CREATE TABLE emp3( -- 创建emp3表 NAME VARCHAR(20), deptid INT, salary DOUBLE, CONSTRAINT pk2 PRIMARY KEY(NAME,deptid) -- CONSTRAINT pk2 可省略 ); -- 联合主键只需主键中任意一列不重复就可以 INSERT INTO emp3 VALUES('张三',10,5000); INSERT INTO emp3 VALUES('张三',20,5000); INSERT INTO emp3 VALUES('李四',10,5000); -- 联合主键的各个列每一列都不能为空 INSERT INTO emp3 VALUES(NULL,10,5000); INSERT INTO emp3 VALUES('张三',NULL,5000); INSERT INTO emp3 VALUES(NULL,NULL,5000);
主键约束不仅可以在创建表的同时创建,也可以在修改表是添加
/* 格式如下: create table 表名( ..., <字段名> <数据类型>, ... ); alter table <表名> add primary key (字段1,字段2,字段3...); */
a.添加单列主键
CREATE TABLE emp4( -- 创建emp4表 eid4 INT, nama VARCHAR(20), deptid INT, salary DOUBLE ); ALTER TABLE emp4 ADD PRIMARY KEY(eid4);
b.添加多列主键
CREATE TABLE emp5( -- 创建emp5表 eid5 INT, name VARCHAR(20), deptid INT, salary DOUBLE ); ALTER TABLE emp5 ADD PRIMARY KEY(mane,deptid);
/* 格式如下: alter table <数据表名> drop primary key; */ ALTER TABLE emp5 DROP PRIMARY KEY;
/* 格式如下: create table 表名( ..., <字段名> <数据类型> primary key auto_increment, ... ); */ CREATE TABLE user1( -- 创建user1表 user1 INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO user1 VALUES(NULL,'张三'); INSERT INTO user1 VALUES(NULL,'张三'); INSERT INTO user1(NAME) VALUES('李四');
方式一:创建表之时指定
- CREATE TABLE user2( -- 创建user2表 user2 INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) )AUTO_INCREMENT=100; INSERT INTO user2 VALUES(NULL,'张三'); INSERT INTO user2 VALUES(NULL,'张三'); INSERT INTO user2(NAME) VALUES('李四'); -
方式二:创建表之后指定
CREATE TABLE user3( -- 创建user3表 user3 INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); ALTER TABLE user3 AUTO_INCREMENT=200; INSERT INTO user3 VALUES(NULL,'张三'); INSERT INTO user3 VALUES(NULL,'张三'); INSERT INTO user3(NAME) VALUES('李四');
-- a.使用delete删除后自增长从断点开始 DELETE FROM user1; -- b.使用truncate删除后自动增长从默认起始值开始 TRUNCATE user2;
方式一:创建表之时指定非空
-- <字段名> <数据类型> not null; CREATE TABLE user4( user4 INT, NAME VARCHAR(20) NOT NULL, address VARCHAR(20) NOT NULL ); INSERT INTO user4 VALUES(1,'张三','西安'); INSERT INTO user4 VALUES(NULL,'张三','西安');
方式二:创建表之后指定非空
-- alter table 表名 modify 字段 类型 not null; CREATE TABLE user5( user5 INT, NAME VARCHAR(20), address VARCHAR(20) ); ALTER TABLE user5 MODIFY NAME VARCHAR(20) NOT NULL; ALTER TABLE user5 MODIFY address VARCHAR(20) NOT NULL; INSERT INTO user5 VALUES(1,'张三','西安'); INSERT INTO user5 VALUES(NULL,'张三','西安');
-- alter table 表名 modify 字段 类型 ALTER TABLE user4 MODIFY NAME VARCHAR(20); ALTER TABLE user5 MODIFY address VARCHAR(20);
所在列所有字段的值不能重复出现
方式一:创建表之时添加唯一约束
-- <字段名> <数据类型> unique; CREATE TABLE user6( user6 INT, NAME VARCHAR(20), phone_number VARCHAR(20) UNIQUE ); INSERT INTO user6 VALUES(1,'张三','123'); INSERT INTO user6 VALUES(2,'张三','1234');
方式二:创建表之后添加唯一约束
-- alter table 表名 add constraint 约束名 unique(列); CREATE TABLE user7( user7 INT, NAME VARCHAR(20), phone_number VARCHAR(20) ); ALTER TABLE user7 ADD CONSTRAINT phone UNIQUE(phone_number); INSERT INTO user7 VALUES(1,'张三','1234'); INSERT INTO user7 VALUES(2,'张三','5678'); INSERT INTO user7 VALUES(2,'张三','5678');
删除唯一约束
-- 格式:alter table 表名 drop index <唯一的约束>; ALTER TABLE user7 DROP INDEX phone;
用来指定某列的默认值
方式一:<字段名> <数据类型> default <默认值>;
CREATE TABLE user8( user8 INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT '北京' ); INSERT INTO user8(user8,NAME) VALUES(1,'张三'); INSERT INTO user8(user8,NAME,address) VALUES(2,'张三','上海'); INSERT INTO user8 VALUES(3,'李四',NULL);
方式二:alter table 表名 modify 列名 类型 default '默认值';
CREATE TABLE user9( user9 INT, NAME VARCHAR(20), address VARCHAR(20) ); ALTER TABLE user9 MODIFY address VARCHAR(20) DEFAULT '宝鸡'; INSERT INTO user9(user9,NAME) VALUES(1,'张三'); INSERT INTO user9(user9,NAME,address) VALUES(2,'张三','上海'); INSERT INTO user9 VALUES(3,'李四',NULL);
删除默认约束
-- alter table 表名 modify 列名 类型 default null; ALTER TABLE user9 MODIFY address VARCHAR(20) DEFAULT NULL; INSERT INTO user9(user9,NAME) VALUES(4,'王五');
zerofill默认为int(10)
CREATE TABLE user10( user10 INT ZEROFILL, NAME VARCHAR(20) ); INSERT INTO user10(user10,NAME) VALUES(123,'张三'); INSERT INTO user10(user10,NAME) VALUES(2,'李四');
ALTER TABLE user10 MODIFY user10 INT;