zoukankan      html  css  js  c++  java
  • mysql中列属性

    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

  • 相关阅读:
    android学习笔记--AlarmManager
    Linux学习笔记--vi
    perl学习笔记--搭建开发环境
    PERL学习笔记---正则表达式的应用
    PERL学习笔记---正则表达式
    perl学习笔记---标量
    产生0到100内的任意随机数
    js判断参数是否为非数字
    linux 下搭建php环境
    关于echarts的疑问
  • 原文地址:https://www.cnblogs.com/wyzhou/p/9283182.html
Copyright © 2011-2022 走看看