MySQL建表约束
主键约束
能够唯一确定一张表中的一条记录,也就是通过给某个字段添加约束,就可以使得该字段不重复且不为空。
create table user(
id int primary key,
name varchar(20)
);
联合主键:只要联合的主键值不全重复即可。
CREATE TABLE user2(
id INT,
name VARCHAR(20),
password VARCHAR(20),
PRIMARY key(id,name)
);
自增约束
常与主键约束搭配在一起,使其自动增长。
CREATE TABLE user3(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
INSERT INTO user3(name) VALUES('张三');
INSERT INTO user3(name) VALUES('李四');
结构:
表内容:没有指定id的情况下,其自动补值增长。
唯一约束
约束修饰的字段的值不可以重复。
CREATE TABLE user5(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20)
);
运行 DESCRIBE user5;
±------±------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
±------±------------±-----±----±--------±---------------+
新增name为唯一约束:
ALTER TABLE user5 ADD UNIQUE(name);
运行 DESCRIBE user5;
±------±------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | UNI | NULL | |
±------±------------±-----±----±--------±---------------+
测试:插入数据
INSERT INTO user5(name) VALUES ('cc');
运行 SELECT * FROM user5; 查看结果:
±—±-----+
| id | name |
±—±-----+
| 1 | cc |
±—±-----+
再次插入INSERT INTO user5(name) VALUES (‘cc’);
出现:ERROR 1062 (23000): Duplicate entry ‘cc’ for key ‘name’
另一种添加唯一约束方式
CREATE TABLE user5(
id INT ,
name VARCHAR(20),
unique(id,name)//表示两个键不都重复,类似联合主键
);
非空约束
create table user9(
id int,
name varchar(20) not null
);
默认约束
当插入字段值时,若没有传值,就会使用默认值。
create table user10(
id int,
name varchar(20),
age int default 10
);
外键约束
设计到两个表: 主表,副表
1.主表中没有的数据值,不能在副表中使用。
2.主表中的记录被副表引用,是不可以删除此记录的。
–班级表
CREATE TABLE classes(
id INT PRIMARY KEY ,
name VARCHAR(20)
);
–学生表
CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(20),
class_id int,
FOREIGN KEY (class_id) REFERENCES classes(id)
);
给班级表插入值
INSERT INTO CLASSES VALUES (1,‘一班’);
INSERT INTO CLASSES VALUES (2,‘二班’);
INSERT INTO CLASSES VALUES (3,‘三班’);
给学生表插值
insert into student values(1001,‘张三’,1);
insert into student values(1002,‘张三’,2);
insert into student values(1003,‘张三’,3);
insert into student values(1004,‘张三’,4);
第4个由于外键约束插入失败。
修改表结构
添加主键
ALTER TABLE user4 add PRIMARY KEY(id);
删除主键
ALERT TABLE user4 DROP PRIMARY KEY;
把某个属性设置为主键
使用modify
ALTER TABLE user4 MODIFY id INT PRIMARY key;
总结
添加:alter … add…
修改:alter… modify…
删除:alter…drop…