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 4403 序列统计(Lucas)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4403 [题目大意] 给定三个正整数N.L和R,统计长度在1到N之间, 元素大小都在L到 ...
- 【模拟退火】poj2420 A Star not a Tree?
题意:求平面上一个点,使其到给定的n个点的距离和最小,即费马点. 模拟退火的思想是随机移动,然后100%接受更优解,以一定概率接受更劣解.移动的过程中温度缓慢降低,接受更劣解的概率降低. 在网上看到的 ...
- 【找规律】【DFS】Gym - 101174H - Pascal's Hyper-Pyramids
二维下,如果把杨辉三角按照题目里要求的那样摆放,容易发现,第i行第j列的数(从0开始标号)是C(i+j,i)*C(j,j). 高维下也有类似规律,比如三维下,最后一层的数其实是C(i+j+k,i)*C ...
- 【最小生成树】【kruscal】【贪心】CDOJ1636 梦后楼台高锁,酒醒帘幕低垂
首先,考虑到,我们需要找到一条路径,使它的最小边尽量大,最大边尽量小 然后,考虑到m比较小,我们可以去寻找一个m^2或者m^2logm的算法 考虑枚举最小边,那么我们就需要在m或者mlogm的时间内找 ...
- mysql 创建存储过程及测试sql
--存储过程 CREATE PROCEDURE proc_batch_id( out batch_id bigint ) begin insert into generate_sync_batch ( ...
- 【SQL Sever】安装过程
下载了sql sever,如下: 首先把iso解压,如下: 1.点击 2.打开页面后 3. 接下来直接下一步下一步 完成之后,需要重启计算机才能使用! 4. 重启之后,进入配置工具 将所有的端口号更改 ...
- Go -- FileManage 自建云盘
一.介绍 Caddy,用Go写的一款相当优秀的Web服务器软件,它有不少很有特色的功能,国内目前来说用的不多,不过也逐渐有越来越多的人知道了,它有个特色的插件功能,其中一款插件是FileManager ...
- NSLog 输出格式集合
• %@ 对象 • %d, %i 整数 • %u 无符整形 • %f 浮点/双字 • %x, %X 二进制整数 • %o 八进制整数 • %zu size_t • %p 指针 • %e 浮 ...
- nginx安装和配置
一.安装:yum install nginx service nginx restart/start/check/status/... 二.配置:官网文档 http://nginx.org/en/do ...
- http://my.oschina.net/lenglingx/blog/205269
http://my.oschina.net/lenglingx/blog/205269 http://www.2cto.com/os/201402/281465.html 单点登录原理: http:/ ...