通过本文主要向大家介绍了mysql,约束等相关知识,希望本文的分享对您有所帮助
一、数据约束
数据约束可以在建表时设定,也可以在建表后通过修改表结构来添加,如果需要为约束添加别名,可以在约束前面添加CONSTRAINT name ...
1.默认值-DEFAULT
DEFAULT
的值可以为NULL
ALTER TABLE student MODIFY id INT DEFAULT 0;
2.非空-NOT NULL
ALTER TABLE student MODIFY id INT NOT NULL;
3.唯一-UNIQUE
- 注意:UNIOUE的字段可为NULL,当为NULL时,不判断是否唯一
ALTER TABLE student MODIFY id INT UNIQUE;
4.主键-PRIMARY KEY
- 单主键
ALTER TABLE student MODIFY id INT PRIMARY KEY;
- 复合主键
ALTER TABLE student ADD PRIMARY KEY (id,name);
- 删除主键
ALTER TABLE student DROP PRIMARY KEY;
5.自增长-AUTO_INCREMENT
- 前提: 该字段是主键
ALTER TABLE student id INT AUTO_INCREMENT;
ALTER TABLE student id INT PRIMARY KEY AUTO_INCREMENT;
6.外键
前提: 外键对应字段应该是相同类型、长度,且表中不存在冲突数据;所参考的外键必须是该表中的主键
- 添加外键
alter table testA add constraint testA_testB_fk foreign key (b_id) references testB(id);
- 删除外键
alter table testA drop foreign key testA_testB_fk;
7.级联
前提:必须在外键的基础上使用
- ON UPDATE CASCADE: 更新时,同步更新
- ON DELETE CASCADE/SET NULL: 删除时,删除/置空
ALTER TABLE testA ADD CONSTRAINT testA_testB_fk FOREIGN KEY (b_id) REFERENCES testB(id) ON UPDATE CASCADE ON DELETE CASCADE;
- 说明: 当testB中的数据被删除或修改时,testA中关联外键的数据也会同步概统
8.字段校验-CHECK
ALTER TABLE student ADD CHECK (id > 0 AND name = 'no');
二、索引
- 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
- 用户无法看到索引,它们只能被用来加速搜索/查询。
- 更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
1.简单索引
CREATE INDEX simple_index ON testA (id, name);
2.唯一索引
CREATE UNIQUE INDEX simple_index ON testA (id, name);
3.删除索引
ALTER TABLE testA DROP INDEX simple_index;