mysql 查看表属性约束_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 tableitem_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.02sec)

/*查看表结构,主要是为了查看comment*/

mysql> show full columns fromitem_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.00sec)

mysql>

2、索引

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

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

索引类型(字段名)

索引类型:

(1)、普通索引

格式:key(字段名)

(2)、唯一索引

格式:unique key(字段名)

(3)、主键索引

格式:primary key(字段名)

(4)、外键索引

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

(5)、全文索引

格式:fulltext(字段名)

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

mysql> create tableindexes_table(#创建表,演示索引的创建-> id intauto_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.05sec)

mysql> show full columns fromindexes_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 tableclasses(#班级表-> 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.02sec)

mysql> create tablestudents(#学生表-> id int auto_increment primary key,-> name varchar(20),-> age tinyint,-> classid int comment '所在班级的id',-> foreign key(classid) referencesclasses(id)->);

Query OK,0 rows affected (0.03sec)

mysql> show full columns fromclasses;+--------+-----------+---------------+------+-----+---------+---------------+---------------------------------+----------+

|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.00sec)

mysql> show full columns fromstudents;+-------+-----------+-----------------+------+-----+--------+--------------+---------------------------------+-----------+

|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) #检查约束

);

总结:“主键约束、外键约束、唯一约束”跟“主键索引、外键索引、唯一索引”,其实是同一个概念的不同理解角度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值