MYSQL约束

 

 

 

 

 

 

 

 

 

 

 

 

-- 1.创建单列主键约束
-- 方式1
-- 在 create table 语句中,通过 PRIMARY KEY 关键字来指定主键。在定义字段的同时指定主键
use mydb1;
CREATE TABLE emp1(
eid int PRIMARY key,
name VARCHAR(20),
deptid int,
salary double
);

 

 

-- 方式2
-- 在定义字段之后再指定主键,
CREATE TABLE emp2(
eid int,
name VARCHAR(20),
deptid int,
salary double,
CONSTRAINT pk1 PRIMARY KEY(eid)#constraint pk1可以省略
);

 

 

-- 主键的作用
-- 主键约束的列非空而且唯一
INSERT into emp2(eid,name,deptid,salary) values(1001,'z3',10,5000);
INSERT into emp2(eid,name,deptid,salary) values(1001,'l4',20,6000);
INSERT into emp2(eid,name,deptid,salary) values(NULL,'w5',20,6000);

 

 

-- 联合主键
-- 联合主键就是这个主键是由一张表中多个字段组成的,
CREATE TABLE emp3(
name VARCHAR(20),
deptid int,
salary double,
CONSTRAINT pk2 PRIMARY KEY(name,deptid)
);

INSERT into emp3 values('z3',10,5000);#两个主键只要不是全部一样即可
INSERT into emp3 values('z3',20,5000);

INSERT into emp3 values(NULL,20,5000);
INSERT into emp3 values('z6',null,5000);#两个主键无论哪个都不能为空

 

 

-- 添加单列主键
CREATE TABLE emp4(
eid int,
name VARCHAR(20),
deptid int,
salary double
);
alter table emp4 add PRIMARY key(eid);

-- 添加多列主键
CREATE TABLE emp5(
eid int,
name VARCHAR(20),
deptid int,
salary double
);
alter table emp5 add PRIMARY key(name,deptid);

 

 

-- 删除主键
alter table emp1 drop PRIMARY key;#主键删除不分单列和多列

 

 

 

-- 自增长约束
create table tuser1 (
id int PRIMARY key auto_increment,
name varchar(20)
);
INSERT into tuser1(name) values('l4');
INSERT into tuser1 values(NULL,'w5');

 

 

 

 

 

 

-- 指定自增长初始值
-- 方式1:创建表时指定
create table tuser2 (
id int PRIMARY key auto_increment,
name varchar(20)
)auto_increment=100;
INSERT into tuser2(name) values('l4');
INSERT into tuser2 values(NULL,'w5');
-- 方式2:创建表之后指定
create table tuser3 (
id int PRIMARY key auto_increment,
name varchar(20)
);
alter table tuser3 auto_increment=100;
INSERT into tuser3(name) values('l4');
INSERT into tuser3 values(NULL,'w5');

 

 truncate无法保留设置的起始值,永远从一开始

 

 

-- 1.创建非空约束-方式1,创建表时指定
use mydb1;
create table tuser7 (
id int,
name varchar(20) not null,#指定非空约束
address varchar(20),#指定非空约束
);
insert into tuser6(id) values(1001);#不可以
insert into tuser6(id,name,address) values(1001,null,null);#不可以
insert into tuser6(id,name,address) values(1001,'null',null);#可以,字符串null
insert into tuser6(id,name,address) values(1002,'','');#可以,空字符串

-- 2.创建非空约束-方式2,创建表之后指定
create table tuser7 (
id int,
name varchar(20),#指定非空约束
address varchar(20)#指定非空约束
);
alter table tuser7 modify name varchar(20) not null;#使name不能为空
alter table tuser7 modify address varchar(20) not null;
desc tuser7;
-- 3删除非空约束
-- alter table 表名 modify 字段 类型
alter table tuser7 modify name varchar(20);#使name能为空
alter table tuser7 modify address varchar(20);

 

 

 

use mydb1;
-- 1.添加唯一约束-方式1-创建表时指定
create table t_user8 (
id int,
name varchar(20),
phone_number varchar(20) unique-- 指定唯一约束
);
insert into t_user8 values(1001,'zc',138);
insert into t_user8 values(1002,'zc2',139);
insert into t_user8 values(1003,'zc3',null);
insert into t_user8 values(1004,'zc4',null);#在mysql中,null和任何值都不同,与自己也一样
-- 2.添加唯一约束-方式1-创建表之后指定
-- 格式:alter table 表名 add constraint 约束名 unique(列);
create table tuser9 (
id int,
name varchar(20),
phone_number varchar(20)
);
alter table tuser9 add constraint unique_pn unique(phone_number);
insert into tuser9 values(1001,'zc',138);insert into tuser9 values(1001,'zc2',138);
-- 3.删除唯一约束
-- 格式:alter table <表名> drop index <唯一约束名>;如果约束没有名字,默认使用约束的列名
alter table tuser9 drop index unique_pn;

 

 

 

use mydb1;
-- 方式1-创建表时指定
create table tuser10 (
id int,
name varchar(20),
address varchar(20) default '北京'-- 指定默认约束
);
insert into tuser10(id,name) values(1001,'zc');
insert into tuser10(id,name,address) values(1001,'zc','sh');
insert into tuser10(id,name,address) values(1001,'zc',null);
-- 方式2-创建表之后指定
-- alter table 表名 modify 列名 类型 default 默认值;
create table tuser11 (
id int,
name varchar(20),
address varchar(20)
);
alter table tuser11 modify address varchar(20) default 'tj';
insert into tuser11(id,name) values(1002,'zc');
alter table tuser11 modify address varchar(20) default null;#设置默认约束为null

 

 

 

use mydb1;
-- 零填充约束(zerofill)
-- 1.添加约束
create table tuser12 (
id int zerofill,#零填充约束
name varchar(20)
);
insert into tuser12 values(123,'zc');
-- 2.删除约束
alter table tuser12 modify id int;
insert into tuser12 values(1235,'zc');

posted @ 2022-01-28 20:25  wzc6  阅读(82)  评论(0)    收藏  举报