mysql学习总结03 — 列属性(字段属性)

mysql学习总结03 — 列属性(字段属性)

toc

mysql中的6个列属性:null,default,comment,primary key,unique key,auto_increment

1. NULL

代表字段为空。mysql的记录长度为65535字节,如果表中有字段允许为NULL,那么系统会设计保留1个字节来存储NULL,最终有效存储长度为65534字节

mysql> create table tbTest (
          name varchar(10) NOT NULL  -- 不能为空
       ) charset utf8;

2. default 默认值

mysql> create table tbTest (
          name varchar(10) NOT NULL
          age int default 18  -- 默认为18	
       ) charset utf8;
mysql> -- 两种方式触发默认值
mysql> insert into tbTest values('csxiaoyao');
mysql> insert into tbTest values('csxiaoyao', default);

3 comment 列描述

基本语法:comment '字段描述';

mysql> create table tbTest (
          name varchar(10) NOT NULL COMMENT '用户名不能为空'
       ) charset utf8;
mysql> -- 查看Comment必须通过查看表创建语句
mysql> show create table tbTest;

4 primary key 主键

4.1 创建主键

随表创建

mysql> -- 方法1,给字段增加 primary key 属性
mysql> create table tbTest (
          name varchar(10) primary key
       ) charset utf8;

mysql> -- 方法2,在所有字段之后增加 primary key 选项
mysql> create table tbTest (
          name varchar(10),
          primary key(name)
       ) charset utf8;

表后增加

基本语法:alter table <表名> add primary key(<字段>);

4.2 查看主键

mysql> -- 方案1:查看表结构
mysql> desc tbTest;
mysql> -- 方案2:查看建表语句
mysql> show create table tbTest;

4.3 删除主键

基本语法:alter table <表名> drop primary key;

4.4 复合主键

mysql> create table tbTest (
          student_no char(10),
          course_no char(10),
          score tinyint not null,
          primary key(student_no, course_no)
       ) charset utf8;

4.5 主键约束

  1. 主键数据不能为空
  2. 主键数据不能重复

4.6 主键分类

业务主键:主键所在的字段,具有业务意义(学生ID,课程ID)

逻辑主键:自然增长的整型(应用广泛)

5. unique key 唯一键

主键也可以用来保证字段数据唯一性,但一张表只有一个主键

  1. 唯一键在一张表中可以有多个。
  2. 唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较)

5.1 创建唯一键

随表创建

mysql> -- 方法1,给字段增加 unique[ key] 属性
mysql> create table tbTest (
          name varchar(10) unique
       ) charset utf8;

mysql> -- 方法2,在所有字段之后增加 unique key 选项
mysql> create table tbTest (
          name varchar(10),
          unique key(name)
       ) charset utf8;

表后增加

基本语法:

alter table <表名> add unique key(<字段1,字段2,...>);

5.2 查看唯一键

mysql> -- 方案1:查看表结构
mysql> desc tbTest;
mysql> -- 方案2:查看建表语句
mysql> show create table tbTest;
mysql> -- 系统会为唯一键自动创建一个名字(默认为字段名)

CREATE TABLE `tbTest` (
  `name` varchar(10) NOT NULL,
  PRIMARY KEY (`name`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

5.3 删除唯一键

基本语法:

alter table <表名> drop index < 唯一键名>;

5.4 修改唯一键

先删除后增加

5.5 复合唯一键

mysql> create table tbTest (
          student_no char(10),
          course_no char(10),
          score tinyint not null,
          unique key(student_no, course_no)
       ) charset utf8;

6. auto_increment 自动增长

通常自动增长用于逻辑主键,只适用于数值,sqlserver中使用identity(1,1)

6.1 自动增长原理

在系统中维护一组数据保存当前使用自动增长属性的字段,记住当前对应的数据值,再给定一个指定的步长

6.2 使用自动增长

mysql> create table tbTest2 (
          id int primary key auto_increment,
          name varchar(10)
       ) charset utf8;

6.3 修改自动增长

查看自增长:自增长触发使用后,会自动在表选项中增加一个选项 (一张表最多只能有一个自增长)

CREATE TABLE `tbTest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

可以通过修改表结构来修改自动增长

基本语法:

alter table <表名> auto_increment = <值>;

6.4 删除自动增长

删除自增长:修改自动增长的字段,字段属性之后不再保留 auto_increment 即可

6.5 初始设置

在系统中有一组变量维护自增长的初始值和步长

show variables like ‘auto_increment%’;

6.6 细节问题

  1. 一张表最多只有一个自增长,自增长会上升到表选项中
  2. 如果数据插入没有触发自增长(给定了数据),那么自增长不会表现,但是会根据当前用户设定的值初始化下一个值,例如当前id=1,插入数据给定id=3,则AUTO_INCREMENT=4
  3. 自增长修改时,值可以较大,但不能比当前已有的自增长字段的值小

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏13blog.site

Spring+SpringMVC+MyBatis+easyUI整合优化篇(十三)数据层优化-表规范、索引优化

本文提要 最近写的几篇文章都是关于数据层优化方面的,这几天也在想还有哪些地方可以优化改进,结合日志和项目代码发现,关于数据层的优化,还是有几个方面可以继续修改的...

3208
来自专栏Linyb极客之路

MYSQL性能优化

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事...

1173
来自专栏java一日一条

MySQL 性能优化的最佳 20+ 条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的...

442
来自专栏数据分析

[数据库基础]——编码标准之编码注意事项(持续更新)

前面已经介绍三篇关于数据库编码规范的博文,现在来一个收尾篇,在说一下代码时候应该注意的东西 1. 不要使用SELECT *,使用SELECT时一定要指定所需要的...

3026
来自专栏idba

死锁案例之九

死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想了解死锁的朋...

1033
来自专栏同步博客

MySQL查询优化

     一个好的web应用,最重要的一点是有着优秀的访问性能。数据库MySQL是web应用的组成部分,也是决定其性能的重要部分。所以提升MySQL的性能至关重...

1633
来自专栏Linyb极客之路

MySQL索引优化分析

为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及ex...

1254
来自专栏PHP实战技术

MySQL性能优化的最佳20+条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事...

34912
来自专栏搜云库

MySql常用30种SQL查询语句优化方法

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

44319
来自专栏微信公众号:Java团长

MySQL索引优化分析

为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及ex...

971

扫码关注云+社区