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。

代码:

  1. /*创建表,注意属性*/
    mysql> create table item_properties_table(
  2. -> id int auto_increment primary key,
  3. -> name varchar(20) not null unique key,
  4. -> pwd varchar(48) not null,
  5. -> age tinyint default 18,
  6. -> email varchar(50) comment '电子邮件'
  7. -> );
  8. Query OK, 0 rows affected (0.02 sec)

  9. /*查看表结构,主要是为了查看comment*/
  10. mysql> show full columns from item_properties_table;
  11. +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
  12. | Field | Type | Collation | Null | Key | Default |Extra | Privileges | Comment |
  13. +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
  14. | id | int(11) | NULL | NO | PRI | NULL |auto_increment| select,insert,update,references | |
  15. | name | varchar(20)| utf8_general_ci | NO | UNI | NULL | | select,insert,update,references | |
  16. | pwd | varchar(48)| utf8_general_ci | NO | | NULL | | select,insert,update,references | |
  17. | age | tinyint(4) | NULL | YES | | 18 | | select,insert,update,references | |
  18. | email | varchar(50)| utf8_general_ci | YES | | NULL | | select,insert,update,references | 电子邮件 |
  19. +-------+------------+-----------------+------+-----+---------+--------------+---------------------------------+---------+
  20. 5 rows in set (0.00 sec)
  21.  
  22. mysql>

2、索引

  索引是帮助mysql高效获取数据的数据结构,由系统维护。

  要使用索引,就要建立索引,就是指定一个表的某个或某些字段作为“索引字段”。格式如下:

    索引类型(字段名)

   索引类型:

    (1)、普通索引

        格式:key(字段名)

    (2)、唯一索引

        格式:unique key(字段名)

    (3)、主键索引

        格式:primary key(字段名)

    (4)、外键索引

        格式:foreign key(字段名)references 其他表(字段名)

    (5)、全文索引

        格式:fulltext(字段名)

普通索引、主键索引、唯一索引代码:

  1. mysql> create table indexes_table(#创建表,演示索引的创建
  2. -> id int auto_increment,
  3. -> name varchar(20),
  4. -> email varchar(50),
  5. -> age int, #没有为age建立索引
  6. -> key(email), #为email建立普通索引
  7. -> primary key(id), #为id建立主键索引
  8. -> unique key(name) #为name建立唯一索引
  9. -> );
  10. Query OK, 0 rows affected (0.05 sec)
  11.  
  12. mysql> show full columns from indexes_table;
  13. +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
  14. | Field | Type | Collation | Null | Key | Default | Extra | Privileges |Comment|
  15. +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
  16. | id | int(11) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
  17. | name | varchar(20) | utf8_general_ci | YES | UNI | NULL | | select,insert,update,references | |
  18. | email | varchar(50) | utf8_general_ci | YES | MUL | NULL | | select,insert,update,references | |
  19. | age | int(11) | NULL | YES | | NULL | | select,insert,update,references | |
  20. +-------+-------------+-----------------+------+-----+---------+----------------+---------------------------------+-------+
  21. 4 rows in set (0.00 sec)

这样,就建立了索引。此时,以id,name或者email做条件来进行查找,速度会很快,如果以age做条件进行查找,相对就会慢一些。

外键索引代码:

  1. mysql> create table classes(#班级表
  2. -> id int auto_increment primary key,
  3. -> classid varchar(10) unique key comment '班级号码',
  4. -> teacher varchar(10) comment '班主任',
  5. -> opendate date comment '开班日期'
  6. -> );
  7. Query OK, 0 rows affected (0.02 sec)
  8.  
  9. mysql> create table students(#学生表
  10. -> id int auto_increment primary key,
  11. -> name varchar(20),
  12. -> age tinyint,
  13. -> classid int comment '所在班级的id',
  14. -> foreign key(classid) references classes(id)
  15. -> );
  16. Query OK, 0 rows affected (0.03 sec)
  17.  
  18. mysql> show full columns from classes;
  19. +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
  20. |Field |Type |Collation | Null | Key | Default | Extra | Privileges | Comment |
  21. +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
  22. |id |int(11) |NULL | NO | PRI | NULL | auto_increment| select,insert,update,references | |
  23. |classid |varchar(10)|utf8_general_ci| YES | UNI | NULL | | select,insert,update,references | 班级号码 |
  24. |teacher |varchar(10)|utf8_general_ci| YES | | NULL | | select,insert,update,references | 班主任 |
  25. |opendate|date |NULL | YES | | NULL | | select,insert,update,references | 开班日期 |
  26. +--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+
  27. 4 rows in set (0.00 sec)
  28.  
  29. mysql> show full columns from students;
  30. +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
  31. |Field |Type | Collation | Null | Key | Default|Extra | Privileges | Comment |
  32. +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
  33. |id |int(11) | NULL | NO | PRI | NULL |auto_increment| select,insert,update,references | |
  34. |name |varchar(20)| utf8_general_ci | YES | | NULL | | select,insert,update,references | |
  35. |age |tinyint(4) | NULL | YES | | NULL | | select,insert,update,references | |
  36. |classid|int(11) | NULL | YES | MUL | NULL | | select,insert,update,references | 所在班级的id|
  37. +-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+
  38. 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表属性、索引、约束的更多相关文章

  1. MySQL 数据类型简介 创建数据表及其字段约束

    数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...

  2. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  3. MySQL 表的约束与数据库设计

    DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...

  4. Mysql表的约束设计和关联关系设计

    https://blog.csdn.net/u012750578/article/details/15026677 Mysql表的约束设计和关联关系设计 ======================表 ...

  5. Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束

    Python进阶----数据库引擎(InnoDB),表的创建,mysql的数据类型,mysql表的约束 一丶MySQL的存储引擎 什么是存储引擎:    MySQL中的数据用各种不同的技术存储在文件( ...

  6. MySql表、约束、视图

    MySql表.约束.视图 索引组织表 在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表成为索引组织表(index organized table). 每张表都有主键,如果创建表 ...

  7. mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

    一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database  table  -c  #检查单 ...

  8. MySQL常见建表选项以约束

    一.CREATE TABLE 选项 1.在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认 ...

  9. SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL

          SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...

随机推荐

  1. BZOJ 1202 [HNOI2005]狡猾的商人(并查集)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1202 [题目大意] 给出一些区间和的数值,问是否存在矛盾 [题解] 用并查集维护前缀和 ...

  2. [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 ...

  3. Java常用小笔记

    1.对list集合进行分页 //startIndex指的是开始的小标 从0开始,pageSize是每页记录数 int toIndex = new Integer(startIndex)+new Int ...

  4. [NOIP2011]聪明的质检员

    [问题描述] 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有$n$个矿石,从 1 到$n$逐一编号,每个矿石都有自己的重量$w_i$以及价值$v_i$.检验矿产的流程是: 1. 给 ...

  5. HDU 5638 Toposort 拓扑排序 优先队列

    Toposort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5638 Description There is a directed acycli ...

  6. HDU 4665 Unshuffle (2013多校6 1011 )

    Unshuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  7. Delphi 中ASSERT用法

    http://blog.csdn.net/dongyonggan/article/details/5780979 用法:ASSERT(表达式) 如果为假,ASSERT会产生一个EASSERTIONFA ...

  8. Understanding how SQL Server executes a query

    https://www.codeproject.com/Articles/630346/Understanding-how-SQL-Server-executes-a-query https://ww ...

  9. 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 ...

  10. okHttp,greenDao,EventBus组合框架项目中实战

    okHttp,greenDao,EventBus组合封装 zzyandroid 介绍 开门见山,大体思路是在Activity中启动服务,通过服务创建Http请求,请求处理结果通过EventBus通知前 ...