--回顾

字段类型(列类型):数值型,时间日期型和字符串类型

数值型:整型和小数型(浮点型和定点型)

时间日期型:datetime,date,time,timestamp,year

字符串类型:定长,变长,文本字符串(text和blob),枚举和集合

Mysql记录长度:65535 个字节,varchar达不到理论长度,null 占用一个字节,text文本不占用记录长度(但是本身占用十个字节)

字段属性:主键,唯一键和自增长。

字段的属性

--主键:唯一键和自增长。

主键:primary key,主要的键,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据,不能重复,这种称之为主键,一张表只能有最多一个主键

增加主键:

sql操作中有多种方式可以给表增加主键:分为三种方法

方案1:在创建表的时候,直接在字段之后,跟primary key 关键字(主键默认不允许
为空)

mysql> create table my_pri1(name varchar(20) not null comment '姓名',number char(10) primary key comment '学号:itcast + 0000,不能重复') charset utf8;

优点非常直接,缺点是只能使用一个字段作为主键

方案2:在创建表的时,在所有的字段之后,使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,可以是复合主键)

mysql> create table my_pri2(number char(10) comment '学号:itcast + 0000',course char(10) comment '课程代码:3901 + 0000',score tinyint unsigned default 60 comment '成绩',primary key(number,course)) charset utf8;

方案3:当表已经创建好之后
,额外追加属性:可以通过修改表字段属性,也可直接追加

mysql> altar table [表名] add primary key(字段列表);

mysql> create table my_pri3(course char(10) not null comment '课程编号:3901 + 000',name varchar(10) not null comment '课程名字'); #创建无主键新表

mysql> alter table my_pri3 modify course char(10) primary key comment '课程编号:3901 + 000'; #方法1:追加主键

mysql> alter table my_pri3 add primary key(course); 方法2:添加主键

方法2前提:表中字段对应的数据本身是独立的(不重复)

1.1主键约束

主键对应的字段中的数据不允许重复,一旦重复数据操作失败(增和改)

向pri1表中插入数据

mysql> insert into my_pri1 values('古学星','itcast0001'),('蔡仁湾','itcast0002');

mysql> insert into my_pri2 values('itcast0001','39010001',90),('itcast0001','39010002',85),('itcast0002','39010001',92);

接下来实验下主键冲突(重复)

mysql> insert into my_pri1 values('刘辉','itcast0022'); #不可以,主键冲突

mysql> insert into my_pri2 values('itcast0001','39010001',100); #不可以,冲突

1.2更新,删除主键

没有办法更新主键,主键需先删除才能增加

alter table [表名] drop primary key;

mysql> alter table my_pri3 drop primary key;

1.3主键的分类

再实际创建表的过程中,很少使用真是业务操作数据作为主键字段(业务主键,如学号,课程号)大部分的时候使用逻辑性的字段(字段没有业务含义,值没有含义),通常将这种字段主键称为逻辑主键

mysql> create table my_student (id int primary key auto_increnment comment '逻辑主键:自增长',number char(10) not null comment '学号',name varchar(10) not null);

自动增长:当对应的字段不给值,或者说给默认值或者给null的时候,会自动的被系统触发,系统会从当前字段中已有的最大值再进行+1操作,得到一个新的再不同的字段

自增长通常是和主键搭配使用

自增长特点:auto_increment

1.4新增自增长

1.任何一个字段要做自增长必要前提是本身是一个索引(key 一栏有值)

mysql> create table my_auto(id int auto_increment comment '自增长',name varchar(10) not null) charset utf8;

2.自增长字段必须是数字,而且是整型,一张表最多只能有自增长

mysql> create table my_auto(id varchar(1) primary key auto_increment comment '自增长',name varchar(10) not null) charset utf8;

3.一张表最多只能有一个自增长

mysql> create table my_auto(id int primary key auto_increment comment '自增长',name varchar(10) not null) charset utf8;

1.5自增长的使用

当自动增长被给定的值为null 或者默认值的时候会触发自动增长。

mysql> inster into my_auto(name) values('邓立军');

mysql> inster into my_auto(name) values(null,'龚森');

mysql> inster into my_auto(name) values(default,'张涛');

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

1.6指定数据

mysql> insert into my_auto values(6,'何思华');

mysql> insert into my_auto values(null,'陈少炼');

如何确定下次是什么自增长呢?可以通过表查看创建语句

mysql> show create table my_auto;

1.7修改自增长

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

修改当前自增长已经存在的值:修改只能比当前已有的自增长大,不能小(小会不生效) alter table [表名] auto_increment = 值;

修改表选项的值

mysql> alter table my_auto auto_increment = 4; #向下修改,不生效

mysql> alter table my_auto auto_increment = 10; #向上修改

思考:为什么自增长是从1开始?为什么每次是自增长1?

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

查看自增长对应的变量;mysql> show variables like 'auto_increment%';

可以修改变量实现不同的效果;修改是对整个数据库修改,而不是单张表(修改是会话级)

1.8修改自增长步长

mysql> set auto_increment_increment = 5; #修改步长为5

查看是否修改成功:mysql> show variables like 'auto_increment%';

插入记录:测试效果:自动使用自增长

mysql> insert into my_auto values(null,'刘阳');

mysql> insert into my_auto values(null,'邓贤师');

1.9删除自增长

自增长是字段的属性:可以通过modify来进行修改(保证字段没有auto_increment即可

) alter table [表名] modify 字段
类型;

mysql> alter table my_auto modify id int primary key; #错误,主键理论是单独存在

mysql> alter table my_auto modify id; #有主键的时候不要再加主键

--唯一键

一张表往往有很多字段需要具有唯一性,数据不能重复,但是一张表中只能有一个主键

:唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题。

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

1.1增加唯一键

基本与主键差不多:三种方案

方案1:再创建表的时候,字段之后直接跟unique / unique key

mysql> create table my_unique1(number char(10) unique comment '学号:唯一,但是允许为空',name varchar(20) not null) charset utf8;

方案2:在所有的字段之后增加 unique key(字段列表); #复合唯一键

mysql> create table my_unique2(number char(10) not null comment '学号:',name varchar(20) not null);

mysql> unique key (number) charset utf8;

方案3:在创建表之后增加唯一键:

mysql> create table my_unique3(id int primary key auto_increment,number char(10) not null,name varchar(20) not null) charset utf8;

2.2追加唯一键:

mysql> alter table my_unique3 add unique key(number);

2.3唯一键的约束

插入数据

mysql> insert into my_unique1 values(null,'曽光'),('itcast0001','晁松'),(null,'李帅');

mysql> insert into my_unique1 values('itcast0001','周江');

如果唯一键也不允许为空:那么主键约束的作用是一致的

--更新唯一键和删除唯一键(唯一键可以有多个,可以不删除)

删除唯一键

alter table [表名] drop unique key; #唯一键有多个

alter table [表名] drop index [索引名]; #唯一键默认使用字段名做索引名字

mysql> alter table my_unique3 drop index number;

MySQL学习笔记(三)的更多相关文章

  1. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  2. MySql学习笔记三

    MySql学习笔记三 4.DML(数据操作语言) 插入:insert 修改:update 删除:delete 4.1.插入语句 语法: insert into 表名 (列名1,列名2,...) val ...

  3. mysql学习笔记三 —— 数据恢复与备份

    要点: 1.存储引擎2.导入导出3.备份与恢复 查看当前数据库中的所有表use db1:show tables: 1.存储引擎 不同的发动机(引擎)适用的汽车类型不一样. 存储和处理的不同方式.不同的 ...

  4. MySQL学习笔记三:库和表的管理

    1.MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql: ...

  5. mysql基本数据类型(mysql学习笔记三)

    Mysql数据类型 小数: 浮点:小数位可以变化 Float单精度默认精度6位左右 Double 双精度默认精度16位左右 支持,控制数值范围 Type(M,D) M表示所有数值位数(不包括小数点和符 ...

  6. MySQL学习笔记(三)—索引

    一.概述 1.基本概念       在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经 ...

  7. MySQL学习笔记(三):常用函数

    一:字符串函数 需要注意的几个细节: 1.cancat中有一个字符串为null,则结果为null. 2.left(str,x) 和 right(str,x)中x为null,则不返回任何字符串,不是nu ...

  8. mysql学习笔记(三)

    -- 主键冲突(duplicate key) ,'xujian','anhui'); ,'xiewei','anhui'); ,'luyang','anhui');-- 主键冲突了 -- 可以选择性的 ...

  9. MySql学习笔记(三) —— 聚集函数的使用

    1.AVG() 求平均数 select avg(prod_price) as avg_price from products; --返回商品价格的平均值 ; --返回生产商id为1003的商品价格平均 ...

  10. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

随机推荐

  1. bytes与str

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str ...

  2. OpenCV探索之路(十六):图像矫正技术深入探讨

    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正.哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧! 那什么是图像的矫正呢?举个例子就好明白了. 我的好朋友小明给我拍了这几张 ...

  3. promise知识点汇总

    Promise对象被写进ES6的规范当中,提供的是另外一种更加友好的对于异步编程的解决方案,在这之前大多使用的是回调函数和事件来实现异步编程. 怎么来理解Promise对象呢?对于这个ES6新加入的小 ...

  4. 基于binlog来分析mysql的行记录修改情况(python脚本分析)

          最近写完mysql flashback,突然发现还有有这种使用场景:有些情况下,可能会统计在某个时间段内,MySQL修改了多少数据量?发生了多少事务?主要是哪些表格发生变动?变动的数量是怎 ...

  5. c++概括

    c++到底是什么样的语言 在过去的几十年,计算机技术的发展令人吃惊,当前的笔记本电脑的计算速度和存储信息的能力超过了20世纪60年代的大型机.20世纪七十年代,C和Pascal语言引领人们进入结构化编 ...

  6. spring.handlers、spring.schemas、spring.tooling被覆盖的三种解决方式

    在用到spring时,本地IDE里面跑的很正常,但是打jar包后在集群上运行时报错. 查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,每个包都有自己的spring.schemas文 ...

  7. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  8. 在Quo.js下Tap和singleTap的区别

    前两天上网搜开发手机页面的JS,看到了Quo.js下载下来后来看了一下,支持的触屏手势挺多的,在一般的开发中应该够用了,更让我喜欢它的一点是它跟JQ差不多(虽然功能不如JQ强大但是语法基本一致).这就 ...

  9. Promise,Async,await简介

    Promise 对象 转载:http://wiki.jikexueyuan.com/project/es6/promise.html 基本用法 ES6 原生提供了 Promise 对象.所谓 Prom ...

  10. WAF指纹探测及识别技术

    Web应用防护系统(也称:网站应用级入侵防御系统.英文:Web Application Firewall,简称: WAF).利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HT ...