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

 

转载于:https://www.cnblogs.com/wyzhou/p/9283182.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端知识点整理(三)不定时更新~

目录 一、移动端跨平台开发方案 Hybrid App React Native Weex Flutter PWA (Progressive Web App) 小程序 Cordova html5 组件和模块的区别 组件化 模块化 前端代码规范 前端工程化理解 网站性能监测与优化策略 1.网络传输性能优化 页…

前端试题(一)

2020-03-28 金卡智能 *1. 脚手架 vue-cli现在用的什么版本,2版本了解多少,2 3有什么区别 绝对路径与相对路径 ./ 当前路径 …/父路径 / 绝对路径 某文件里引用其他路径下的资源: 判断该文件所在文件夹与其他资源路径间的关系。 什么&#…

html5 --- 利用localStorage进行本地存储

首先做一个提交到本地存储的表单及一个用来显示本地localStorage信息的表格…代码如下: <h2> 本地存储用 </h2>标题: <input id"title" name"title" type"text" size"60" style"margin-left:32px;margin-bottom:…

Tomcat启动阻塞变慢

Tomcat 熵池阻塞变慢详解 Tomcat 启动很慢&#xff0c;且日志上无任何错误&#xff0c;在日志中查看到如下信息&#xff1a; Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/jdbc.properties] Log4j:[201…

项目总结

123转载于:https://www.cnblogs.com/kehuaihan/p/9284858.html

前端试题(二)

1. 数组方法、reduce()的第二个参数 reduce() MDN文档 accumulator 累计器currentValue 当前值currentIndex 当前索引array 数组 在没有初始值的空数组上调用 reduce 将报错&#xff08;如果有initialValue不报错&#xff09;。回调函数第一次执行时&#xff0c;accumulator…

项目中遇到问题的解决方法合集

以下内容主要是为了方便记录自己在工作中遇到的项目问题搜寻到的解决方法&#xff0c;肯定方法不唯一&#xff0c;这里只是给出解决了我的问题的方法&#xff0c;大家走过路过随便瞧瞧较好啦嘻嘻 1、使用vue/cli 4.x 创建vue项目时使用iconfont 图标无法显示——前者版本问题 …

JS展示预览PDF。

刚好遇到需求&#xff0c;需要在手机端--展示一个电子收据&#xff0c;电子收据返回是PDF格式的&#xff0c;所以需要在前端上面去做PDF预览。 在学习过程中&#xff0c;了解到一种很简单&#xff0c;不需要任何插件的方法做PDF预览&#xff0c;但是这方法有局限性. 代码如下&a…

html5 --- IDBDatabase创建对象存储和索引

代码如下: <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title> CRUD操作 </title><style type"text/css">table{width: 830px;border: 1px …

查询数据库 收集 (如某个字段不是中文)

查询某个字段不为中文的 select * from 表名 where 字段名 REGEXP [\u0391-\uFFE5] 查询某个字段以数字开头 select * from 表名 where 字段名 REGEXP [0-9].*转载于:https://www.cnblogs.com/spicy/p/8038442.html

2019大疆PC软件开发笔试——开关和灯泡两个电路板

题目描述: 小A是一名DIY爱好者&#xff0c;经常制作一些有趣的东西。 今天&#xff0c;小A突然想要来做这样一个东西。小A现在有两块同样大小为nm&#xff0c;有nm块大小为11小电路板拼成的矩形电路板&#xff0c;假设叫做电路板A和电路板B。电路板A上每个小电路板都是一个开关…

2019高校微信小程序开发大赛获奖作品——《brain头脑智序》

目录 前言 交互流程说明图 我的任务 登录授权&#xff08;login&#xff09; 首页&#xff08;tababr分析&#xff09; 房间准备区&#xff08;preparing&#xff09; 便签编辑区 最终方案选择&#xff08;房主权限&#xff09; 会议报告页面&#xff08;report&#…

前端试题(三)

1. js继承的7种方式 回顾&#xff1a; 每个构造函数都有一个原型对象&#xff1b;原型对象都包含一个指向构造函数的指针&#xff1b;实例都包含一个指向原型对象的内部指针&#xff1b;一切皆为对象&#xff0c;只要是对象&#xff0c;就会有 proto 属性&#xff0c;该属性存…

javascript --- ES6模块与CommonJS模块的差异

CommonJS模块是运行时加载,ES6模块是编译时输出接口 是因为CommonJS加载的是一个对象(module.exports属性),该对象只有在脚本运行结束时才会生成.而ES6模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成. CommonJS模块输出的是一个值的复制&#xff0c;E…

C# ASP 面试题 2017

在博客上看到的&#xff0c;感觉还不错 https://www.cnblogs.com/renyiqiu/p/6435261.html 转载于:https://www.cnblogs.com/yangsirc/p/8038555.html

享元模式 - 结构型模式

模式类型&#xff1a; Flyweight 享元模式 - 结构型模式 意图&#xff1a; The intent of this pattern is to use sharing to support a large number of objects that have part of their internal state in common where the other part of state can vary. 运用共享…

前端试题(四)

1. vue过滤器使用场景 2. v-on绑定多个方法 <p v-on"{click:dbClick,mousemove:MouseClick}"></p>一个事件绑定多个函数&#xff1a; <p click"one(),two()">点击</p>3. 在菜单结构不确定时&#xff0c;前端如何动态渲染 树形…

http --- 用于HTTP调试的最小型Perl Web 服务器

下面的程序是个很有用户的诊断工具,可以用来调试与客户端和代理的交互情况. 该程序 首先会等待HTTP连接,只有收到请求报文,就会将报文打印在屏幕上,然后等待用户输入一条响应报文,并将其回送给客户端. #! /usr/bin/perl use Socket; use Carp; use FileHandle;# (1) use prot …

Mysql - 安装与配置

1、下载安装包 > https://www.mysql.com/downloads/ 2、双击安装&#xff0c;点击Install MySQL Products > 3、Skip 打钩&#xff0c;Next下一步 > 4、选择Server only&#xff1a;只选择安装服务端&#xff0c;根据个人喜好更改安装路径和数据保存路径…

4084:拓扑排序

题目链接&#xff1a;http://bailian.openjudge.cn/practice/4084/ 总时间限制: 1000ms 内存限制: 65536kB描述给出一个图的结构&#xff0c;输出其拓扑排序序列&#xff0c;要求在同等条件下&#xff0c;编号小的顶点在前。 输入若干行整数&#xff0c;第一行有2个数&#xff…