主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。
1. 主键
是一种用于唯一标识表中每一行数据的标识符。在Mysql中,主键可以是一个或多个列的组合,但是必须满足以下条件:
- 主键列的值必须唯一,不能重复。
- 主键列的值不能为空,不能为NULL。
- 一个表只能有一个主键。
主键可以用于加速查询和提高数据的完整性和安全性。在Mysql中,主键可以通过以下两种方式定义:
1.1. 在创建表时定义主键
在创建表时,可以通过在列定义后面添加PRIMARY KEY关键字来定义主键。例如:
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2. 在已有表中添加主键
在已有表中添加主键,可以使用ALTER TABLE语句
ALTER TABLE `users` ADD PRIMARY KEY (`id`);
2. 外键
外键是一种用于建立表与表之间关联关系的机制。外键可以用于保证数据的完整性和一致性。在Mysql中,外键可以通过以下两种方式定义:
2.1. 在创建表时定义外键
在创建表时,可以通过在列定义后面添加FOREIGN KEY关键字来定义外键。
CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `product_id` int(11) NOT NULL, `quantity` int(11) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`user_id`) REFERENCES `users`(`id`), FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
orders表中的user_id和product_id列被定义为外键,分别引用了users表和products表中的id列。
2.2. 在已有表中添加外键
在已有表中添加外键,可以使用ALTER TABLE语句。
ALTER TABLE `orders` ADD FOREIGN KEY (`user_id`) REFERENCES `users`(`id`);
3. 约束
约束是一种用于限制表中数据的规则。在Mysql中,约束可以用于保证数据的完整性和一致性。Mysql支持以下几种约束:
3.1. NOT NULL约束
NOT NULL约束用于限制列中的数据不能为NULL。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
name和email列被定义为NOT NULL。
3.2. UNIQUE约束
UNIQUE约束用于限制列中的数据不能重复。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL UNIQUE, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
email列被定义为UNIQUE。
3.3. CHECK约束
CHECK约束用于限制列中的数据必须满足指定的条件。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `age` int(11) NOT NULL, CHECK (`age` >= 18), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
age列被定义为CHECK约束,要求age的值必须大于等于18。
3.4. DEFAULT约束
DEFAULT约束用于指定列的默认值。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `status` tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
status列被定义为DEFAULT约束,如果插入数据时没有指定status的值,则默认为0。
4. 索引
索引是一种用于加速查询的机制。在Mysql中,索引可以用于提高查询效率和保证数据的完整性和一致性。Mysql支持以下几种索引:
4.1. PRIMARY KEY索引
PRIMARY KEY索引是一种用于唯一标识表中每一行数据的索引。在Mysql中,每个表只能有一个PRIMARY KEY索引。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
id列被定义为PRIMARY KEY索引。
4.2. UNIQUE索引
UNIQUE索引是一种用于限制列中的数据不能重复的索引。在Mysql中,每个表可以有多个UNIQUE索引。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL UNIQUE, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
email列被定义为UNIQUE索引。
4.3. INDEX索引
INDEX索引是一种用于加速查询的索引。在Mysql中,每个表可以有多个INDEX索引。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, INDEX `idx_name` (`name`), INDEX `idx_email` (`email`), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
name和email列被定义为INDEX索引。
4.4. FULLTEXT索引
FULLTEXT索引是一种用于全文搜索的索引。在Mysql中,每个表只能有一个FULLTEXT索引。
CREATE TABLE `articles` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `content` text NOT NULL, FULLTEXT INDEX `idx_content` (`content`), PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
content列被定义为FULLTEXT索引。
原文链接:https://blog.csdn.net/m0_63947499/article/details/131095865
标签:varchar,PRIMARY,外键,主键,索引,KEY,mysql,NULL,id From: https://www.cnblogs.com/wangdch/p/18203886