五、MySQL键值约束条件
约束条件
约束条件:作用是限制如何给字段赋值
NULL 是否允许为空
- 默认允许 null
- 不允许为空 not null
mysql> create table tb2 (
name char(10) not null
);
DEFAULT 默认值
不给字段赋值时使用默认值赋值
默认不定义时 是 null
定义 default 值 (要与字段类型匹配)
mysql> create table tb3 (
name char(10) not null default "",
age tinyint unsigned default 17,
sex enum("boy","gril") not null default "boy"
);
# default "" 是0个字符 不是null
Key 键值索引
-
Key 键值索引 不定义时没有键值
1. index 普通索引 2. unique 唯一索引 3. fulltext 全文索引 4. primary key 主键 5. foreign key 外键 -
索引是什么
类似于书的目录 对表中字段进行排序 索引类型包括: Btree B+tree hash -
索引的优缺点
索引优点 - 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性 - 可以加快数据的查询速度 索引缺点 - 当对表中的数据进行增加、删除和修改的时候,索引也要动态的调整,降低了数据的维护速度 - 索引需要占物理空间
Index 普通索引
-
使用规则
一个表中可以有多个index字段 字段的值允许重复,且可以赋NULL值 通常把作为条件查询的字段设置为index字段 index字段 标志是MUL # 创建索引后,存入字段索引会存在表所对应的文件中 例: /var/lib/mysql/db1/ *.frm *.ibt -
创建索引
# 建表时创建索引 - create table 库.表名(字段, index(字段名)); # 在已有表里创建索引 - create index 索引名 on 表名(字段名);CREATE TABLE tb4( id char(6) NOT NULL, name varchar(4) NOT NULL, age int(3) NOT NULL, gender ENUM("boy","girl") DEFAULT "boy", INDEX(id), INDEX(name) );CREATE INDEX nianling ON tb4(age); -
查看索引字段
# 基本查看 - desc 表名; # 详细信息查看 (\G 竖着来查看) - show index from 表名 [\G];mysql> show index from tb4; mysql> show index from tb4 \G; -
删除索引字段
drop index 索引名 on 表名;mysql> DROP INDEX nianling ON tb4; mysql> DROP INDEX name ON tb4;
Primary KEY 主键
-
使用规则
字段值不允许重复,切不允许赋NULL值 一个表中只能有一个primary key字段 多个字段都作为主键,称为复合主键,必须一起创建 主键字段标志是PRI 主键通常与auto_increment连用 通常把表中唯一表示记录的字段设置为主键 -
建表时创建主键
方法一 - create table 库名.表名(字段1 类型 primary key, 字段2 类型); 方法二 - create table 库名.表名(字段1 类型, 字段2 类型, primary key(字段1));mysql> create table tb5 (name char(3) primary key, id int(3)); mysql> create table tb6 (name char(3), id int(3), primary key(name)); -
在已有表里创建主键
# 在已有表里创建主键 - alter table 库名.表名 add primary key(字段名); # 对已有表添加复合主键 - alter table 表名 add primary key(字段名列表);mysql> alter table tb3 add primary key(name); mysql> alter table tb2 add primary key(id, name);# 创建表的时候设置复合主键 create table tb7( name char(10), class char(7), status enum("yes","no"), primary key(name, class) ); # 与auto_increment连用, ps:auto_increment 自增长(必须是主键) # 自增长从主键中最大的值开始 # 清空表之后在次写入也是从之前最大的值开始(有记录) # auto_increment字段赋空值的话使用自增长 create table tb8( id int primary key auto_increment, name char(10), sex enum("man","woman") ); -
删除主键
# 不管是复合主键还是单条主键,统一删除 alter table 表名 drop primary key;
Foreign KEY
-
什么是外键
外键功能: 向表中插入记录时,字段的值在另外一张表字段值里选择 使用规则 - 表存储引擎必须是innodb - 字段类型要一致 - 被参照字段必须要是索引类型的一种(primary key) -
创建外键
create table 表名( 字段名列表, foreign key(字段名) references 库.表(字段名) on update cascade # 同步更新 on delete cascade # 同步删除 )engine=innodb; # 指定存储引擎 mysql 5.7默认使用innodb # 同步更新 与主表所关联字段会随着主表的变化而变化 # 同步删除 主表记录删除,跟随删除mysql> create table tb1(id int(10) primary key, name char(5), age int(2), addr char(30)); mysql> show create table tb1; # 查看表结构是否使用innodb mysql> create table info1(id int(10),sex char(5),foreign key(id) references tb1(id) on update cascade on delete cascade); mysql> show create table info1; -
删除外键
# 查看外键名称 - show create table 表名; # 删除外键 - alter table 表名 drop foreign key 外键名称; # 删除外键只是相当于删除一个关系,不会改动已有数据mysql> show create table info1; ...... | info1 | CREATE TABLE `info1` ( `id` int(10) DEFAULT NULL, `sex` char(5) DEFAULT NULL, KEY `id` (`id`), CONSTRAINT `info1_ibfk_1` FOREIGN KEY (`id`) REFERENCES `tb1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | mysql> alter table info1 drop foreign key info1_ibfk_1; mysql> show create table info1; mysql> desc info1;
Extra 额外设置
额外设置 默认都没有额外设置

浙公网安备 33010602011771号