mysql列属性包括:NULL 、default、comment、primary key、unique key

一、NULL
定义方式:NULL(默认)  NOT NULL

空属性有2个值,mysql数据库默认字段都是为null的,但是在实际开发过程中,尽可能保证所有的数据都不应该为null,空数据没有意义,任何参与NULL运算的结果都是NULL。

二、comment
列描述(comment),又可以称之为注释,实际没有什么含义,是专门用来描述字段的,会根据创建语句保存,用来给程序员(或者数据库管理员)来进行了解的。主要用于查看创建表的语法上进行查看,可用show create table tb_name;语句查看

  create table my_tab(

    str varchar(10) not null comment '描述信息',

    num int unsigned not null comment '描述信息'

  );

三、default
用来设置默认值。某一种数据会经常的出现某个具体值,可以在一开始指定好,在需要真实数据的时候,用户可以选择性地使用默认值。

  create table my_tab(

    str varchar(10) not null,

    num int unsigned default 10;   #默认值为10

  );

使用方法:

  insert into my_tab (str) values ('abc');   #num会自动设为10
  insert into my_tab values ('abc', default); #用默认值插入num字段

四、primary key (主键)

主键约束: 主键对应的字段中的数据不允许重复,一旦重复,操作失败。

1. 主键特点

  ① 唯一性,一张表只能有一个字段设为主键

  ② 主键不允许为NULL

2. 增加主键方式,常用的有3种

  ① 在创建表时,在字段后面跟关键字primary key设置

    create table my_tab(

      id int primary key, #第一种方式

      name varchar(10)

    )charset utf8;

  ② 在创建表时,在所有字段后使用primary key(字段列表)设置复合主键

    create table my_tab2(

      id int,

      number int,

      name varchar(10),

      primary key(id, number, ...) #第二种方式,这种方式是符合主键,比较特殊

    )charset utf8;

复合主键:

     在创建表的时候,在所有的字段之后,使用primay key(主键字段列表)来创建主键(可以有多个字段作为主键)来创建复合主键。

     语法:primary key(字段1,字段2......)

     例子:创建一张my_primark_key2的表,为其添加number字段(int类型)和classname 字段(varchar类型),将这个2字段添加成复合主键。          

        create table if not exists my_primary_key2(

          number int not null,

          classname varchar(20) not null,

          primary key(number,classname) #符合主键

        )charset utf8;

插入数据:插入数据只有两个字段(number,name)共同重复时才会插入失败,如果有1个字段重复,另一个字段不重复,那么会插入成功。

③ 在已创建好的表中追加主键

   alter table my_tab3 modify id int primary key; #第三种方式

   alter table my_tab3 add primary key(id, ...);

3. 主键更新与删除

  主键无法更新,若想更新主键,只能删除后重新添加!!!!

  alter table my_tab3 drop primary key;

五、auto_increment -- 自动增长

1. 自动增长通常与主键搭配使用, 字段设置自动增长后,不给值,或给默认值或NULL的时候,会自动触发,如果给了值,则当前自增失效,从下一次开始以当前最大值开始自增。

设置为自增长的字段必须是一个索引,且必须是一个整型类型,一张表只能有一个字段被设为auto_increment !!!!

自增长的特点 :

       a)、任何一个字段做自增长前提:该字段必须是一个索引字段(key一栏有值)。

      b)、自增长字段通常是整形。

      c)、一个表中只能有1个自增长字段。

示例:
添加一张my_auto_increment的表,为其添加id字段和name字段,其中id字段设置成主键和自增长。

  create table if not exists my_auto_increment(

   id int primary key auto_increment, #配合主键使用,自增长

   name varchar(10) not null

 )charset utf8;

插入值:       

  insert into my_auto_increment values(null,'张三'); #有效,给与空值null的形式,这种形式最为方便
  
insert into my_auto_increment(name) values('李四'); #有效,不给值的形式,如果不给值,表名后必须指定哪些字段要给值

如果对应的自增长字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长(从最大值+1)。

 insert into my_auto_increment values(10,'王五');

再次插入数据的时候,自增长就会从11开始:

 insert into my_auto_increment values(null,'赵六');

自增长如果是涉及到字段改变,必须先删除自增长,后增加,一张表中只能有1个自增长。

修改当前已存在自增长的值,修改只能比当前已有的自增长的最大值大,不能小(小则不生效)。

 update my_auto_increment set id = 20 where name = '赵六'; #将姓名为赵六的id修改成20,仅仅是更新数据,因此下一次自增长值是12

再次插入数据,自增长就会从12开始,而不是从21,注意insert和update操作后效果的不同:

insert into my_auto_increment values(null,'甜七');

alter table my_tab4 auto_increment = 20; #仅修改单张表的起始值,下一次插入数据自增长从20开始

删除自增增长:

自增长是字段的一个属性,可以通过modify属性来修改(字段没有自增长)。

语法:alter table 表名字 modify 字段名 数据类型

例子:将my_auto_Increment表中 id字段的自增长去掉。

    alter table my_auto_increment modify id int;

自增长为什么从1开始?又为什么每次都是自增1呢?

 所有系统的表现(如字符集、校对集)都是由系统的内部变量进行控制的。

 查看自增长对应的变量的语法:show variables like 'auto_increment%';

mysql> show variables like '%auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 | #步长
| auto_increment_offset | 1 | #起始值
+--------------------------+-------+

可以修改变量实现不同的效果。如果对整个数据库修改(而不是一张表),这种方式是修改时会话级(当前客户端,当此连接有效,关闭失效)。

 修改成一次自增为5。

 set auto_increment_increment = 5; #表示一次自增5

2. 使用方式,在字段后面跟auto_increment关键字

  create table my_tab4(

   id int auto_increment, #自增长,这里没有配个主键使用

   name varchar(10)

  )charset utf8;

. 修改自增长

  alter table my_tab4 auto_increment = 值; #如果改的值比当前最大值小,则修改无效

. 查看系统自增长变量

  show variables like '%auto_increment%';

  可以修改系统变量的值, 但是没什么意义

  set auto_increment_increment = 值; #修改自增步长

5. 删除自增长

  alter table my_tab1 modify id int; #修改字段,使其没有auto_increment即可。

六、unique key 唯一键

一张表往往有很多字段需要具有唯一性,数据不能重复(但可以为null,不像主键),这个时候用唯一键(unique)就体现出其优势了,可以解决表中多个字段需要唯一性约束的问题。

唯一键的本质与主键的性质差不多,唯一键默认的允许字段为空,而且可以多个字段为空(空字段不参与唯一性比较)!!!!

特点:
1. 唯一键允许自动为NULL,且可以有多个。如果当前表中没有主键,并有唯一键设为NOT NULL时,会显示第一个NOT NULL的唯一键为PRI,但他本质是唯一键!!!
因此使用desc 表名 查看某字段显示为pri的字段不一定是主键,如果该字段是一个不为空的唯一键,也会显示为Pri,可通过show create table 查看真伪

2. 增加唯一键:有3种方式

   语法: 字段名 数据类型 unique/unique key

  ① 在创建时在字段后面跟关键字unique/unique key

    create table my_unique1(

      id int unique, #唯一键

      num int unique key, #唯一键

      name varchar(10)

    )charset utf8;

  ② 在创建时在所有字段后面增加 unique key(字段列表) ,复合唯一键MUL

    create table my_unique2(

      id int,

      num int,

      name varchar(10)

      unique key(id, num) #唯一键,类似于主键,这种形式也称之为复合唯一键

    )charset utf8;

  ③ 在表创建之后追加唯一键

    alter table my_unique3 add unique key(字段列表);  #unique key 或 unique 都可以

    alter table my_unique3 modify 字段名 数据类型 unique; #修改已经存在的字段为唯一键

3. 更新与删除唯一键

    和主键一样,先删除后添加,因为唯一键可以有多个,所以不删除直接添加也可以!!!!!

    alter table my_unique drop index 索引名; #唯一键默认使用字段名作为索引名字

从以上可知唯一键和主键都是索引!!!

七、索引

  索引的作用: 提高查询效率、约束数据的有效性

  1. 主键索引   primary key

  2. 唯一键索引  unique key

  3. 全文索引   textfull index

  4. 普通索引   index

最新文章

  1. Bootstrap_让Bootstrap轮播插件carousel支持左右滑动手势的三种方法
  2. MyEclipse安装lombok
  3. CSS样式的插入方式
  4. 用Python实现九九乘法表
  5. nginx 日志分割(简单、全面)
  6. 微机原理基础(四)—— MSC51
  7. element-ui <el-input> 注册keyup事件,即键盘enter.
  8. python datetime模块详解
  9. rem+media+jquery布局结局方案
  10. 将模型.pb文件在tensorboard中展示结构
  11. hdu2509 Be the Winner 博弈
  12. 使用httpClient调用接口获取响应数据
  13. Extjs前端框架解决了什么问题
  14. UVA.10986 Fractions Again (经典暴力)
  15. 洛谷P2762 太空飞行计划问题(最小割)
  16. How to download Heavy Duty Diagnostic Caterpillar SIS 2018 software
  17. redis配置详解(中英文)
  18. 185. Department Top Three Salaries
  19. meterpreter > migrate 1548
  20. 从头写一个Cucumber测试(一) Selenium Test

热门文章

  1. BNU 26349——Cards——————【区间dp】
  2. Javascript 学习 Boolean
  3. C#天气预报程序
  4. win8中如何设定editplus为txt默认打开程序
  5. JAVA避免入坑必备
  6. 浅谈JavaScript原型
  7. BZOJ4709: [Jsoi2011]柠檬(决策单调性)
  8. LOJ#137. 最小瓶颈路 加强版(Kruskal重构树 rmq求LCA)
  9. Mysql慢查询 [第一篇]
  10. html+css杂记