mysql表属性、索引、约束
1、表属性
创建表的基本语法:
create table 【if not exists】 表名 (字段列表 【,索引或约束列表】)【表选项列表】
其中,字段列表格式如下:
字段名 类型 【属性列表】,
字段名 类型 【属性列表】...
属性列表中各个属性之间用空格隔开。
常用的字段属性:
auto_increment | 设置字段值自动增长,用于整数类型 |
primary key | 设置字段为主键,此时该字段的值可以“唯一确定”一行数据 |
unique key | 设置字段为唯一的,在整个数据表中不会重复 |
not null | 设置字段不能为null,如果不指定该属性,那么字段的值默认是可以为null的 |
default | 设置字段的默认值,插入数据的时候,若不指定该字段你的值,会使用默认值填充。 |
comment | 设置字段的说明 |
说明:primary key跟unique key都确定了字段的唯一性,由这两个属性修饰的字段都能唯一的确定一行数据,区别在于primary key不能为null(指定了primary key的时候,默认的指定了not null属性),而unique key则可以为null。可以说,primary key是特殊的unique key。
代码:
- /*创建表,注意属性*/
mysql> create table item_properties_table(- -> id int auto_increment primary key,
- -> name varchar(20) not null unique key,
- -> pwd varchar(48) not null,
- -> age tinyint default 18,
- -> email varchar(50) comment '电子邮件'
- -> );
- Query OK, 0 rows affected (0.02 sec)
/*查看表结构,主要是为了查看comment*/- mysql> show full columns from item_properties_table;
- +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
- | Field | Type | Collation | Null | Key | Default |Extra | Privileges | Comment |
- +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
- | id | int(11) | NULL | NO | PRI | NULL |auto_increment| select,insert,update,references | |
- | name | varchar(20)| utf8_general_ci | NO | UNI | NULL | | select,insert,update,references | |
- | pwd | varchar(48)| utf8_general_ci | NO | | NULL | | select,insert,update,references | |
- | age | tinyint(4) | NULL | YES | | 18 | | select,insert,update,references | |
- | email | varchar(50)| utf8_general_ci | YES | | NULL | | select,insert,update,references | 电子邮件 |
- +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
- 5 rows in set (0.00 sec)
- mysql>
2、索引
索引是帮助mysql高效获取数据的数据结构,由系统维护。
要使用索引,就要建立索引,就是指定一个表的某个或某些字段作为“索引字段”。格式如下:
索引类型(字段名)
索引类型:
(1)、普通索引
格式:key(字段名)
(2)、唯一索引
格式:unique key(字段名)
(3)、主键索引
格式:primary key(字段名)
(4)、外键索引
格式:foreign key(字段名)references 其他表(字段名)
(5)、全文索引
格式:fulltext(字段名)
普通索引、主键索引、唯一索引代码:
- mysql> create table indexes_table(#创建表,演示索引的创建
- -> id int auto_increment,
- -> name varchar(20),
- -> email varchar(50),
- -> age int, #没有为age建立索引
- -> key(email), #为email建立普通索引
- -> primary key(id), #为id建立主键索引
- -> unique key(name) #为name建立唯一索引
- -> );
- Query OK, 0 rows affected (0.05 sec)
- mysql> show full columns from indexes_table;
- +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
- | Field | Type | Collation | Null | Key | Default | Extra | Privileges |Comment|
- +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
- | id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
- | name | varchar(20) | utf8_general_ci | YES | UNI | NULL | | select,insert,update,references | |
- | email | varchar(50) | utf8_general_ci | YES | MUL | NULL | | select,insert,update,references | |
- | age | int(11) | NULL | YES | | NULL | | select,insert,update,references | |
- +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
- 4 rows in set (0.00 sec)
这样,就建立了索引。此时,以id,name或者email做条件来进行查找,速度会很快,如果以age做条件进行查找,相对就会慢一些。
外键索引代码:
- mysql> create table classes(#班级表
- -> id int auto_increment primary key,
- -> classid varchar(10) unique key comment '班级号码',
- -> teacher varchar(10) comment '班主任',
- -> opendate date comment '开班日期'
- -> );
- Query OK, 0 rows affected (0.02 sec)
- mysql> create table students(#学生表
- -> id int auto_increment primary key,
- -> name varchar(20),
- -> age tinyint,
- -> classid int comment '所在班级的id',
- -> foreign key(classid) references classes(id)
- -> );
- Query OK, 0 rows affected (0.03 sec)
- mysql> show full columns from classes;
- +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
- |Field |Type |Collation | Null | Key | Default | Extra | Privileges | Comment |
- +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
- |id |int(11) |NULL | NO | PRI | NULL | auto_increment| select,insert,update,references | |
- |classid |varchar(10)|utf8_general_ci| YES | UNI | NULL | | select,insert,update,references | 班级号码 |
- |teacher |varchar(10)|utf8_general_ci| YES | | NULL | | select,insert,update,references | 班主任 |
- |opendate|date |NULL | YES | | NULL | | select,insert,update,references | 开班日期 |
- +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
- 4 rows in set (0.00 sec)
- mysql> show full columns from students;
- +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
- |Field |Type | Collation | Null | Key | Default|Extra | Privileges | Comment |
- +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
- |id |int(11) | NULL | NO | PRI | NULL |auto_increment| select,insert,update,references | |
- |name |varchar(20)| utf8_general_ci | YES | | NULL | | select,insert,update,references | |
- |age |tinyint(4) | NULL | YES | | NULL | | select,insert,update,references | |
- |classid|int(11) | NULL | YES | MUL | NULL | | select,insert,update,references | 所在班级的id|
- +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
- 4 rows in set (0.00 sec)
tips:外键——某个表中的某个字段,必须在另一个表中存在(字段名字可以不同,但是意义要一样,比如上面学生表中的classid与班级表中的id)。
3、约束
约束,就是对数据的一种要求。
约束类型:
(1)、主键约束
格式:primary key(字段名)
作用:该字段可以唯一的确定一行数据,其实就是主键。
(2)、唯一约束
格式:unique key(字段名)
作用:该字段的值是唯一的,也可以区分一行数据。
(3)、外键约束
格式:foreign key(字段名)references 其他表(字段名)
作用:字段的值必须是其他表中的某个对应的字段,不能随便输入。
(4)、非空约束
格式:not null,就是字段的属性
(5)、默认约束
格式:default value,就是字段的默认值属性
(6)、检查约束
格式:check(判断语句)
代码:
create table check_constraint(
age tinyint,
check(age>=0 and age<100) #检查约束
);
总结:“主键约束、外键约束、唯一约束”跟“主键索引、外键索引、唯一索引”,其实是同一个概念的不同理解角度
mysql表属性、索引、约束的更多相关文章
- MySQL 数据类型简介 创建数据表及其字段约束
数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引
一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...
- MySQL 表的约束与数据库设计
DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...
- Mysql表的约束设计和关联关系设计
https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...
- Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束
Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎: MySQL中的数据用各种不同的技术存储在文件( ...
- MySql表、约束、视图
MySql表.约束.视图 索引组织表 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表成为索引组织表(index organized table). 每张表都有主键,如果创建表 ...
- mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查
一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database table -c #检查单 ...
- MySQL常见建表选项以约束
一.CREATE TABLE 选项 1.在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认 ...
- SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...
随机推荐
- BZOJ 1202 [HNOI2005]狡猾的商人(并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1202 [题目大意] 给出一些区间和的数值,问是否存在矛盾 [题解] 用并查集维护前缀和 ...
- [BZOJ2216]Lightning Conductor
原来决策单调性指的是这个东西... 一些DP可以写成$f_i=\max\limits_{j\lt i}g(i,j)$,设$p_i(p_i<j)$表示使得$g(i,j)$最大的$j$,如果$p_1 ...
- Java常用小笔记
1.对list集合进行分页 //startIndex指的是开始的小标 从0开始,pageSize是每页记录数 int toIndex = new Integer(startIndex)+new Int ...
- [NOIP2011]聪明的质检员
[问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...
- HDU 5638 Toposort 拓扑排序 优先队列
Toposort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 Description There is a directed acycli ...
- HDU 4665 Unshuffle (2013多校6 1011 )
Unshuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- Delphi 中ASSERT用法
http://blog.csdn.net/dongyonggan/article/details/5780979 用法:ASSERT(表达式) 如果为假,ASSERT会产生一个EASSERTIONFA ...
- Understanding how SQL Server executes a query
https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Server-executes-a-query https://ww ...
- MySQL 连接错误Can't connect to MySQL server on (61)
链接数据库时忽然遇到一个问题.Mac Navicat链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat ...
- okHttp,greenDao,EventBus组合框架项目中实战
okHttp,greenDao,EventBus组合封装 zzyandroid 介绍 开门见山,大体思路是在Activity中启动服务,通过服务创建Http请求,请求处理结果通过EventBus通知前 ...