*定义列属性*

1、列属性NULL:
  是否为空,规定一个字段的值是否可以是null;
  null|not null

2、默认值属性:default value 

  默认值,在没有为该字段设置值时启用;而且默认值的设置需要使用“固定值”。
  常见的是:一个字段不能为空,而且存在默认值。

  例子:CREATE TABLE s_2 ( a int not null default 10, b int not null default 20 );
  解析:当插入某值时,有某字段没有插入值,则会采用默认值自动插入。default value

  例子:CREATE TABLE s_3 ( a int not null default 10, b int default 20 );
  解析:此时b可以为空(null),虽然设置了默认值,只有当b没有插入相关值才会使用默认值。
  INSERT INTO s_3 ( 10,null );#此时的b值为null

3、主键和唯一索引:

3.1:主键:PK (primary key) 可以唯一标识,某条记录的字段或者是字段的集合,就是主键。

  【注意】主键可以是 真实实体的属性。但是常用的好的解决方案是:利用一个与实体信息不相关的属性,作为唯一标识。
主键与业务逻辑不发生关系,只用来标识记录。一个表只能有一个 主键 。

3.1.1:设置主键语法:primary key
(1)在字段上设置:
    例子:CREATE TABLE s_3 (id int primary key,name varchar(10),class_name varchar(15));
    解析:此时字段id的值必须是唯一的,不能重复,否则报错。

(2)在定义完字段后,可以定义:可以定义多列主键(组合主键)
    例子:CREATE TABLE s_4 (id int,name varchar(10),class_name varchar(15),primary key (id));
    多列主键:CREATE TABLE s_4 (name varchar(10),class_name varchar(15),primary key (name,class_name));
    解析:定义完字段后,在定义主键和多列主键(组合主键)

【注意】组合主键的意义:一个主键内包含多个字段,而不是多个字段都是主键。只需要一个标识即可。mysql规定一个表只能有一个 主键 。

【要求】
    常见的设计,每个表都应该存在一个可以唯一标识的 主键字段 ,最好与实体没有联系,不是实体属性。

4、自动增长:
  为每条记录提供一个唯一的标识;每次插入记录时,将某个字段的值自动增加1,使用auto_increment标识。
  需要是整型,还需要索引;插入数据时,可以选择插入null或者不插入。

  例子:CREATE TABLE s_5 (id int primary key auto_increment,name varchar(10),class_name varchar(15));
  解析:插入数据:INSERT INTO s_5 VALUES(1,'alex','3301');
  INSERT INTO s_5 (name,class_name) VALUES('alex','3302');
  ......
  此时可以不用指定id字段的值,它会自动在初始值的基础上加1填充。

【注意】自动增长的初始值,是可以设置的,默认是1;通过表的选项:auto_increment n #n为初始值
    例子:ALTER TABLE s_5 auto_increment 10;
    解析:修改auto_increment初始值

【严重注意】如果n的值小于已经存在的主键的值:系统默认从大的那个主键的值开始加1。

  *-->问题1:是否可以手动插入某列的值?

  答:可以,但是如果是插入一个已经存在的主键,则失败,因为一个表中主键不可重复。
  例子:INSERT INTO s_5 VALUES(5,'bob','3306');
  解析:此时就可以插到从第1行开始的第5行。

  *-->问题2:某列是否可以更新?

  答:可以更新,前提是主键不发生冲突,既主键不重复。
  例子: UPDATE s_5 set id=6 where name='bob';
  解析:将满足条件name=bob的id改为6。

  *-->问题3:自动增长设置为20,数据库已经存在大于20的记录,删除所有的大于20的记录。
  问:插入数据时,id(主键)为多少?
  答:id(主键)仍然会从删除前设置的最后一个主键加1开始计算。删除命令:DELETE FROM s_6 WHERE id>=20;
详细数据参考如下:

1)删除前:
MariaDB [test]> SELECT *FROM s_6;
+----+-------+---------+
| id | name | hobby |
+----+-------+---------+
| 1 | alex1 | tennis |
| 2 | alex2 | tennis2 |
| 3 | alex3 | tennis3 |
| 20 | alex4 | tennis4 |
| 21 | alex5 | tennis5 |
| 22 | alex6 | tennis6 |
| 23 | alex7 | tennis7 |
| 24 | alex8 | tennis8 |
+----+-------+---------+
2)删除后:
MariaDB [test]> SELECT *FROM s_6;
+----+-------+------------+
| id | name | hobby |
+----+-------+------------+
| 1 | alex1 | tennis |
| 2 | alex2 | tennis2 |
| 3 | alex3 | tennis3 |
| 25 | alex4 | basketball |
| 26 | alex5 | basketball |
+----+-------+------------+

定义列属性:null,default,PK,auto_increment的更多相关文章

  1. 定义/修改列时 NULL

    mysql的文档说明: column_definition:     col_name type [NOT NULL | NULL] [DEFAULT default_value]         [ ...

  2. null调整为not null default xxx,不得不注意的坑

    最近碰到一个case,值得分享一下. 现象 一个DDL,将列的属性从null调整为not null default xxx, alter table slowtech.t1 modify name v ...

  3. EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性

    ---------------------目录-------------------------- EntityFramework 5.0 CodeFirst 教程03-数据结构的定义/列的属性 (2 ...

  4. mysql数据类型和列属性

    列属性: 定义一个字段时对该字段设置的额外的信息或约束 1.  关联操作:reference 2.  字段默认值:default value 3.  主索引和唯一索引:primary key 和uni ...

  5. MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性

    1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...

  6. mysql中列属性

    mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...

  7. MySQL之字段数据类型和列属性

    数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...

  8. 学习笔记:MySQL列属性

    列属性 a)         null|not null 缺省值是null,也就是允许为空,如果是not null而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值 b)         de ...

  9. PowerDesigner之PDM(物理概念模型)各种属性建立如PK,AK等

    一.PDM概述 PDM(物理数据模型),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库. PDM中涉及到的基本概念包括: 表: 列: 视图: 主键: 候选键: 外键: 存 ...

随机推荐

  1. [CF91B] Queue - 权值线段树

    有n个人在队列中等待.假如某个人前面有一个人年龄比他小,那他就会不高兴:定义他的"不高兴度"为他前面留他最远的年龄比他小的人与他的距离,求每个人的不高兴度. n<=10^5 ...

  2. 使用饿了么el-date-picker里及如何将后台给的时间戳js转化为时间格式

    首先代码是这个样子的,使用v-model <el-date-picker v-model="formData.createTime" :disabled="true ...

  3. Spring-JDBCTemplate介绍

        一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.c ...

  4. nginx启动时指定配置文件

    下载源文件方式安装nginx 会在/usr/local目录下安装nginx 此时虚拟机系统中会有两个nginx 如果启动的时候没有指定配置文件的位置,默认读取的配置文件就是/usr/local/ngi ...

  5. Mvc-WebAPI特性路由(自定义路由)Demo

    Demo由VS2017编写. 1.先建一个WebApi项目 2.WebApiConfig.cs需要注册特性路由,config.MapHttpAttributeRoutes(); 3.项目默认有2个Co ...

  6. Spring作用域和BeenFactory

    1.Spring Bean实例作用域: ① singleton:   IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例. ② prototype:   IOC容器可以创建多个 ...

  7. cookie和会话

    一.为什么要使用cookie和会话 HTTP是一种无状态技术,这意味着每个单独的HTNML页面都是一个无关的.当人们穿过站点时,HTTP 没有用于跟踪用户或保持变量的方法,尽管浏览器会跟踪你访问过的页 ...

  8. 图的最短路径算法-- Floyd算法

    Floyd算法求的是图的任意两点之间的最短距离 下面是Floyd算法的代码实现模板: ; ; // maxv为最大顶点数 int n, m; // n 为顶点数,m为边数 int dis[maxv][ ...

  9. 组合数取mod

    组合数取mod 条件mod是质数,inv 是逆元,fac是阶层: 用于n在10^5左右 maxn=100505: ll fact[maxn],inv[maxn]; ll Pow(ll x,ll n){ ...

  10. docker installation and usage

    From 一.环境配置的难题 软件开发最大的麻烦事之一,就是环境配置.用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件的安装.只有 ...