mysql-列属性
列属性
- 列属性是真正约束字段的数据类型,但是数据类型的约束很单一,需要有一些额外的约束来确保数据的合法性
- NULL/NOT NULL、default、primary key、unique key、auto_increment、comment等
空属性
- NULL、NOT NULL两个值
- 虽然数据库基本上字段都是默认的为空,但是实际上需要尽可能的保证所有数据都不应该为空,空数据没有任何意义,也没有办法参加与运算
-- 创建表
create table my_class(
name varchar(20) not null,
room varchar(20) null -- 代表允许为空: 不写默认就是允许为空
)charset utf8;
列描述
- 列描述comment,是对字段进行注释备注,方便理解说明字段的功能和意义
- 使用 comment '列描述' 进行定义
-- 创建表
create table if not exists my_teacher(
name varchar(20) not null comment '姓名',
money decimal(10,2) not null comment '工资'
)charset utf8;
默认值
- 如果某一中数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要使用真实数据的时候,可以选择性的使用默认值
- 使用 default '具体的值' 进行定义
- 想要使用默认值,可以不一定去指定列表,故意不使用字段列表: 可以使用default关键字代替值
-- 创建表
create table if not exists my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女','保密') default '男'
)charset utf8;
-- 插入数据
insert into my_default (name) values('王耀');
insert into my_default values('李四',18,default);
主键
- 主键:primary key,一张表
只能有一个字段
可以设置为主键,用来唯一的约束该字段里面的数据,不能重复 - 主键本身是不允许为空的
- 在创建表的时候直接在字段之后跟primary key 关键字进行设置主键,这种方式非常直接,但是只能使用一个字段作为主键,不能使用复合主键
-- 直接跟primary key关键字
create table if not exists my_pri1(
name varchar(20) not null comment 'username',
number char(10) primary key comment '编号,不能重复'
)charset utf8;
- 在创建表的时候,在所有的字段都设置完之后,使用primary key(主键字段列表)来创建主键,如若是使用多个字段作为主键,这就是复合主键
-- 使用复合主键
create table if not exists my_pri2(
number char(10) comment 'username',
course char(10) comment '课程',
score tinyint unsigned default 60 comment '分数',
primary key(number,course) -- 复合主键,增加主键限制,number 和 course组合一起具有唯一性
)charset utf8;
- 当表已经创建好之后,额外追加主键,前提是表中字段对应的数据本身是独立的不能重复
create table if not exists my_pri3(
number char(10) comment 'username',
course char(10) comment '课程',
score tinyint unsigned default 60 comment '分数'
)charset utf8;
- 通过修改表字段属性
alter table my_pri3 modify course char(10) primary key comment '课程';
- 直接追加
-- 需要先删除 再测试
alter table my_pri3 drop primary key;
-- 直接增加主键
alter table my_pri3 add primary key(course);
主键约束
- 主键对应字段中的数据是不允许重复的,一旦重复,数据进行增和改操作会失败
-- 向pri1表插入数据
insert into my_pri1 values('古学星','0001'),('蔡仁湾','0002');
insert into my_pri2 values('0001','39010001',90),('0001','39010002',85),('0002','39010001',92);
-- 主键冲突(重复)
insert into my_pri1 values('刘辉','0002'); -- 不可以: 主键冲突
insert into my_pri2 values('0001','39010001',100); -- 不可以:冲突
更新、删除主键
- 主键是没有办法更新的,只有删除之后才能增加
-- 删除主键
alter table my_pri3 drop primary key;
-- 只有删除主键之后才能增加新的主键
alter table my_pri3 add primary key(course);
主键分类
- 在创建表的过程中,应该尽量不要使用真实业务数据作为主键字段,应该尽量使用逻辑性的字段作为主键字段
- 业务主键: 主键字段是真实的业务数据,如学号、姓名等
- 逻辑主键:主键没有实际的业务含义,字段值为什么并没有什么关系,也没有什么影响,
-- 使用逻辑主键
create table my_student(
id int primary key auto_increment comment ‘逻辑主键: 自增长’, -- 逻辑主键
number char(10) not null comment ‘学号’,
name varchar(10) not null
)charset utf8;
自增长
- 自增长:当某个字段设置自增长,不给值或者给默认值或者NULL的时候,会自动被系统触发,系统会从当前字段中
已有的最大值+1
操作,得到一个新的唯一的字段 - 自增长一般会搭配主键进行使用
特点
- 任何一个字段要做自增长必须当前字段本身是一个所有(就是desc的时候,key一栏必须有值),否则不能添加自增长属性
- 自增长子弹必须是数字(整型)
- 一张表最多只能存在一个自增长字段
-- 自增长
create table my_auto(
id int primary key auto_increment comment '自动增长',
name varchar(10) not null
)charset utf8;
使用
- 当自增长被给定的值为NULL或者默认值的时候会触发自动增长
-- 触发自增长
insert into my_auto(name) values('张三');
insert into my_auto values(null,'李四');
insert into my_auto values(default,'王五');
- 自增长如果对应的字段输入了值,那么自增长失效: 但是下一次还是能够正确的自增长(从最大值+1)e
-- 指定数据
insert into my_auto values(6,'王六');
insert into my_auto values(null,'李七'); -- id会从当前表中找到最大值然后加1
- 可以通过查看表创建语句看到下一次自增长的值
show create table my_auto;
修改自增长
- 自增长如果涉及到字段改变,必须先删除自增长,后增加,因为一张表最多只能存在一个自增长
- 修改当前自增长已经存在的值,修改的值只能比当前已有的自增长耳朵最大值大,若是小则不生效
-- 修改表选项的值
alter table my_auto auto_increment = 4; -- 向下修改(小),不生效
alter table my_auto auto_increment = 10; -- 向上修改
- 所有的系统变量(字符集、校对集等)都是由系统内部的变量进行控制的,那么就可以产看以及修改,虽然有些修改并无实际意义也无必要
-- 查看自增长对应的变量
show variables like 'auto_increment%';
-- 修改自增长步长,可以修改变量实现不同的效果: 修改是对整个数据修改,而不是单张表: (修改是会话级)
set auto_increment_increment = 5;
-- 插入记录: 使用自增长,这时候自增长的步长是5
insert into my_auto values(null,'王大');
insert into my_auto values(null,'王二');
删除自增长
- 自增长是字段的一个属性,可以通过modify来进行修改(只要保证字段没有auto_increment就可以了)
-- alter table 表名 modify 字段 类型
-- 删除自增长
alter table my_auto modify id int primary key; -- 错误: 主键理论是单独存在
alter table my_auto modify id int; -- 有主键的时候,千万不要再加主键
唯一键
- 基本与主键差不多
- 在创建表的时候,直接在字段跟unique/unique key
create table my_unique1(
number char(10) unique comment '学号: 唯一,允许为空',
name varchar(20) not null
)charset utf8;
- 在所有的字段之后增加 unique key(字段列表),复合唯一键
number char(10) not null comment '学号',
name varchar(20) not null,
-- 增加唯一键
unique key(number)
)charset utf8;
- 在创建表之后增加唯一键
create table my_unique3(
id int primary key auto_increment,
number char(10) not null,
name varchar(20) not null
)charset utf8;
-- 追加唯一键
alter table my_unique3 add unique key(number);
唯一键约束
- 唯一键和主键本质基本相同,唯一区别就是唯一键默认是允许为空的,而且是多个为空
- 若是唯一键也不允许为空,那么唯一键和主键的约束作用是一致的
-- 插入数据,唯一键可以为空
insert into my_unique1 values(null,'王大'),('0001','王二'),(null,'王三');
insert into my_unique1 values('0001','王四');
更新、删除唯一键
- 因为唯一键是可以有多个的,所以可以不先删除后新增
- 删除唯一键
-- alter table 表名 drop unique key 索引名字
-- 删除唯一键, unique key后面必须跟索引名字
alter table my_unique3 drop index number;
mysql-列属性的更多相关文章
- 09、MySQL—列属性
列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长 1.Null属性 NULL属性:代表字段为空 如果对应的值为YES表示该字段可以为NULL 注意 ...
- Mysql列属性
列属性又称之为字段属性在mysql中一共有6个属性:null,默认值(default),列描述(comment),主键(primary key),唯一键(unique key)和自动增长 修改数据库字 ...
- 学习笔记:MySQL列属性
列属性 a) null|not null 缺省值是null,也就是允许为空,如果是not null而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值 b) de ...
- 面试官问我,为什么老司机建议MySQL列属性尽量用 NOT NULL ?
本文阅读时间大约6分钟. 其实写这篇文章,也是来自一个知识星球读者的提问,他在二面的过程中被问到了,由于他简历中写道有 MySQL 调优经验,但这个问题没有回答好,二面被刷了. 其实我们刚学习 C 语 ...
- mysql列属性操作(转载)
1.mysql中修改字段长度: ALTER TABLE tb_article MODIFY COLUMN NAME VARCHAR(50); 这里的tb_article为表名,NAME为字段名,50为 ...
- mysql列属性auto(mysql笔记四)
常见的的是一个字段不为null存在默认值 没值得时候才去找默认值,可以插入一个null到 可以为null的行里 主键:可以唯一标识某条记录的字段或者字段的集合 主键设置 主键不可为null,声明时自动 ...
- mysql中列属性
mysql列属性包括:NULL .default.comment.primary key.unique key 一.NULL定义方式:NULL(默认) NOT NULL 空属性有2个值,mysql数据 ...
- MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性
1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...
- mysql 增加列,修改列名、列属性,删除列语句
mysql增加列,修改列名.列属性,删除列语句 mysql修改表名,列名,列类型,添加表列,删除表列 alter table test rename test1; --修改表名 alter t ...
- MySQL之字段数据类型和列属性
数据类型: 对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类:数值类型.字符串类型.时间日期类型. 数值型: 数值型数据: ...
随机推荐
- python类定义
在我的收藏中有一篇特别详细的类讲解 此处部分内容引自:http://blog.sina.com.cn/s/blog_59b6af690101bfem.html class myclass: 'this ...
- 【leetcode73】经典算法-Guess Number Higher or Lower
题目描述: 从1-n中,随便的拿出一个数字,你来猜测. 提示 提供一个guess(int num)的api,针对猜测的数字,返回三个数值.0,-1,1 0;猜中返回num -1:比猜测的数值小 1:比 ...
- 大多数时候是软件的Bug,但是... 有时候的确是硬件的问题!
在我们性能最好的服务器中,有一台是从之前的64位测试项目中遗留下来的.那台机器配有皓龙250双核处理器,内存有8 GB.服役了一年之后,那种配置仍然是相当不错的.它还有贴心的升级方案可选:它的泰安Th ...
- matlab下K-means Cluster 算法实现
一.概念介绍 K-means算法是硬聚类算法,是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则.K-means算法以欧 ...
- ant的设置properties
特点 大小写敏感: 不可改变,先到先得,谁先设定,之后的都不能改变. 怎样设置 1 .设置 name 和 value 属性值,比如: <property name="srcdir&qu ...
- Mahout 算法
Mahout 包括协同过滤,基于User和Item的推荐:kmeans.Fuzzy-kmeans .Mean shift .Dirichlet process .LDA聚类:奇异值分解:并行频繁项集挖 ...
- 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com
博客是安装在阿里云的服务器上. 小结 : -- 进入数据库命令 :mysql -uroot -p123456 ; -- 检查nginx配置语法 :.../nginx/sbin/nginx -t; -- ...
- 网络小白之WAN与LAN的区别
剑指Offer--网络小白之WAN与LAN的区别 基本作用 wan接口是外网接口,是用来连接互联网或局域网等外部网络的. lan接口是内网接口,是用来连接计算机终端或其他路由器等终端设备的. 举例 w ...
- android 常用方法集合
private static Contextcontext; privatestatic Displaydisplay; private static String TAG = "MyToo ...
- Android Studio 1.2.2设置显示行号
Android Studio设置显示行号的方法与Eclipse有少许差别,直接在代码中右键,弹出右键菜单是没有显示行号功能的. 在Android Studio中设置方法有二: 1.临时显示行号 在单个 ...