约束某一个字段
无符号的 int unsigned
不能为空 not null
默认值是什么
mysql> create table t10( id int unsigned not null, name char(18) not null ); mysql> insert into t10(id,name) values(11,'mike');
mysql> create table t11( id int unsigned not null, name char(18) not null, sex enum('male','female') not null default 'male' ); mysql> insert into t11(id,name) values (1,'mike');
不能重复 unique
create table t12( id1 int unique, id2 int ); insert into t13 values(1,1); insert into t13 values(2,1); # 会报错 约束成功 insert into t13 values(1,2);
# 联合唯一 unique create table t14( id int, server_name char(12), ip char(15), port char(5), unique(ip,port) ); mysql> insert into t14 values(1,'mysql','192.168.14.2','3306'); mysql> insert into t14 values(2,'mysql','192.168.14.2','9001'); # ip和端口号联合起来不能重复 单独没神魔问题 mysql> insert into t14 values(3,'pycharm','192.168.14.2','9001'); ERROR 1062 (23000): Duplicate entry '192.168.14.2-9001' for key 't14.ip'
主键
# 非空 + 唯一约束 # 第一个被定义为非空+唯一的那一列会成为这张表的primary key # 一张表只能定义一个主键 create table t15( id int not null unique, username char(18) not null unique );
create table t15( id int primary key, username char(18) not null unique );
自增 auto_increment
只对数字有效 自带非空约束
create table t20( id int unique auto_increment, name char(20) ); create table t20( id int primary key auto_increment, name char(20) ); insert into t20(name) values('mike');
外键
# 学生表 create table students( id int primary key auto_increment, name char(12) not null, gender enum('male','female') default 'male', class_id int, foreign key(class_id) references class(cid) ); # 班级表 create table class( cid int primary key auto_increment, cname char(12) not null, started date ); insert into class values(1,'bigdata20','20190325'); insert into class values(2,'bigdata21','20190325'); insert into students values(1,'mike','male',1); update students set class_id = 2;
修改表结构
1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]; 5.修改字段排列顺序/在增加的时候指定字段位置 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; ALTER TABLE 表名 CHANGE 字段名 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
alter操作非空和唯一
create table t(id int unique,name char(10) not null); #去掉null约束 alter table t modify name char(10) null; # 添加null约束 alter table t modify name char(10) not null; # 去掉unique约束 alter table t drop index id; # 添加unique约束 alter table t modify id int unique; # 添加联合唯一 alter table t add unique index(aa,bb);
alter操作主键
1、首先创建一个数据表table_test: create table table_test( `id` varchar(100) NOT NULL, `name` varchar(100) NOT NULL, PRIMARY KEY (`name`) ); 2、如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。 先删除主键 alter table table_test drop primary key; 然后再增加主键 alter table table_test add primary key(id); 注:在增加主键之前,必须先把反复的id删除掉。
为表添加外键
创建press表 CREATE TABLE `press` ( `id` int(11) NOT NULL, `name` char(10) DEFAULT NULL, PRIMARY KEY (`id`) ) ; 创建book表 CREATE TABLE `book` ( `id` int(11) DEFAULT NULL, `bk_name` char(12) DEFAULT NULL, `press_id` int(11) NOT NULL, KEY `press_id` (`press_id`) ) ; 为book表添加外键 alter table book add constraint fk_id foreign key(press_id) references press(id); 删除外键 alter table book drop foreign key fk_id;