mysql学习(列属性)

主键

主键:primary key,用来唯一约束该字段里的数据,不能重复。一张表中最多只能有一个主键。

增加主键

在sql中,有下面几种方式增加主键:

  • 在创建表的时候,直接在字段之后跟上primary key关键字,主键默认不能为空
-- 增加主键
create table my_primary1(
    number char(10) primary key comment ‘学好‘,
    name varchar(20) not null comment ‘姓名‘
)charset utf8;

 - 在创建表的时候, 在所有的字段之后使用primary key(主键字段列表)来创建主键(可以是复合主键).
-- 创建复合主键
create table my_primary2(
    number char(10) comment ‘学号‘,
    course char(10) comment ‘课程‘,
    score tinyint unsigned default 60 comment ‘成绩‘,
    primary key(number,course)
)charset utf8;

  • 当表已经创建好之后,再次额外增加主键,可以通过修改表字段属性,也可以直接追加。
alter table 表名 add primary key(字段列表);

-- 创建my_primary3表格
create table my_primary3(
    number char(10) comment ‘学号‘,
    course char(10) comment ‘课程‘
)charset utf8;

-- 额外添加主键
alter table my_primary3 add primary key(number,course);

可以看到,这里首先创建了一张表格,然后通过添加主键的方式来设置主键。

主键约束

主键对应的字段中的数据,不允许重复,一旦出现重复,数据操作失败。

删除主键

alter table 表名 drop primary key;

自动增长

自动增长:auto increment,自增长有如下特点:

  • 任何一个字段要做自增长,前提是该字段本身必须是一个索引(key有值)
  • 自增长必须是数字(整型)
  • 一张表最多只能有一个自增长
-- 自增长
create table my_auto(
    id int auto_increment comment ‘自动增长‘,
    name varchar(20)
)charset utf8;

可以看到,这里提示”自增长的类型必须是索引”。这里我们将其改为主键

-- 自增长
create table my_auto(
    id int primary key auto_increment comment ‘自动增长‘,
    name varchar(20)
)charset utf8;

修改自增长

自增长,如果涉及到字段改变,必须先删除自增长,后增加自增长(因为一张表里,只允许存在一个自增长)

  • 修改当前自增长的最大值
alter table 表名 auto_increment = 值

-- 修改自增长的值
alter table my_auto auto_increment=5;

  • 查看自增长变量
-- 查看自增长变量
show variables like ‘auto_increment%‘

可以修改变量实现不同的增长效果

-- 设置每次自增5
set auto_increment_increment=5;

删除自增长

自增长是字段的一个属性,可以通过modify来修改

alter table 表名 modify 字段 类型; 

-- 删除自增长
alter table my_auto modify id int;

唯一键

在一张表中,往往有很多字段不能重复,但是一张表中只能够有一个主键,此时可以使用唯一键(unique)来解决字段唯一性约束的问题。

  • 唯一键,允许字段为空

增加唯一键

  • 在创建表的时候,在字段后面直接跟上unique
-- 直接增加唯一键
create table my_unique(
    number varchar(10) unique comment ‘学号‘,
    name varchar(20) not null
)charset utf8;

  • 在字段后面添加unique key(字段列表)
create table my_unique2(
    number int comment ‘学号‘,
    name varchar(20),
    unique key(number)
)charset utf8;

  • 在创建表之后,增加唯一键
create table my_unique3(
    number int not null,
    name varchar(20)
)charset utf8;

-- 在创建表之后,增加唯一键
alter table my_unique3 add unique key(number);

更新唯一键

  • 删除唯一键
-- 删除唯一键
alter table 表名 drop index 索引名字  -- 唯一键默认使用字段名称作为索引名称

alter table my_unique3 drop index number;

索引

索引:系统根据某种算法,将已有的数据,单独建立一个文件,能够实现快速的匹配数据,并且能够快速的找到对应表中的记录。

  • 提升查询效率
  • 约束数据的有效性

    如果某一个字段,需要作为查询的条件经常使用,那么可以使用索引。

mysql中提供了多种索引,如下:

  • 主键索引: primary key
  • 唯一索引: unique key
  • 全文索引: fulltext index(针对文章内部的关键字,进行索引)
  • 普通索引: index

关系

将实体与实体的关系,反映到最终数据库表的设计上来,分三种:一对一,一对多,多对多。

一对一

一对一:一张表中的一条记录,只能与另外一张表中的一条记录进行对应。

学生表:姓名,性别,年龄,身高,体重,籍贯,住址

id 姓名 性别 年龄 住址 身高 体重 籍贯

以上表格中,姓名,性别,年龄,住址是常用的数据,但是身高,体重,籍贯是不常用的数据,如果每次都查询所有数据,不常用的数据就会影响查询效率,此时可以使用一对一来设计该表格。

  • 常用数据
id 姓名 性别 年龄 住址

- 不常用数据

id 身高 体重 籍贯

可以看到这里的都是一样的,可以根据当前的id去不常用的表格中查找对应的数据。

一对多

一对多:一张表中的一条记录,可以对应另外一张表的多条记录,但是反过来,另一张表的一条记录,只能对应第一张表的一条记录。

妈妈与孩子:

  • 妈妈表:
mother_id 姓名 年龄 身高

- 孩子表:

child_id 姓名 年龄 性别 mother_id

一个妈妈可以对应一个或者多个孩子,但是一个孩子只能够对应一个妈妈。上面的表的设计,在孩子表中,增加了一个mother_id字段指向妈妈表中的一条记录。

多对多

多对多:一张表(A表)中的一条记录,可以对应另外一张表(B表)的多条记录,同时(B表)的一条记录也能够对应(A表)的多条记录。

老师和学生:

  • 老师表
teacher_id 姓名 年龄 性别

学生表

student_id 姓名 年龄 性别

老师_学生表:

学生表

student_id teacher_id

主键冲突

当进行插入操作时候,此时如果需要插入的记录的主键在表中的记录已经存在,即主键冲突,此时可以选择性的进行处理,更新和替换。

更新操作

insert into 表名 (字段列表,需要包含主键) values(值列表) on duplicate key update 字段=新值

-- 插入数据
insert into my_student (studentid,number,name) values(1,‘001‘,‘shangsan‘);

-- 插入主键为1的数据
insert into my_student (studentid,number,name) values(1,‘001‘,‘lisi‘);

-- 主键冲突:更新
insert into my_student values(1,‘001‘,‘testname‘) on duplicate key update name=‘testname‘;

可以看到,上面这种通过更新的方法是可以解决该问题,但是如果需要更新的字段非常的多的话,就需要书写好多的字段。

替换操作

replace into 表名 (字段列表:需要包含主键) values(值列表)

-- 主键冲突:替换
replace into my_student values(2,‘002‘,‘facebook‘);

蠕虫复制

蠕虫复制:从已有数据中获取数据,然后将数据又进行新增操作(先查出数据,然后将查出的数据新增一遍).

  • 表创建高级操作:

    从已有表创建新表(复制表结构)

create table 表名 like 数据库.表名

insert into 表名(字段列表) select 字段列表/* from 表名;

时间: 2024-10-17 19:15:54

mysql学习(列属性)的相关文章

mysql学习——列类型,建表语句和增删改查

建表语句 create table 表名( 列名称 列类型 [列属性] [默认值], ... )engine 引擎名 charset 字符集: mysql学习--列类型,建表语句和增删改查

学习笔记:MySQL列属性

列属性 a)         null|not null 缺省值是null,也就是允许为空,如果是not null而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值 b)         default: 给一个字段一个默认值,如果没有给该字段填充数据,就用该默认值来代替,通常就是配合not null一起使用 c)         primary key: 主键,唯一可区别其他记录的字段,一个表中只能有一个主键,也可以很多个字段组合成一个组合主键,而且不允许为空! d)        

20141230 mysql数值类型和列属性一

枚举字符串 枚举字符串指的是在定义之初就确定要存放的字符串有哪些,然后在数据进行存储的时候就只能存储已经定义过的字符串,只能使用任意的一个字符串.(单选框) 语法:enum 字段名 enum(字符串1,字符串2,-); 枚举采用最多2个字节保存数据,最多能存65535个数据 枚举的意义 1. 规范数据:没有进行维护的数据不能插入 2. 节省空间:实际存储的数据是数字 虽然SQL是一种强类型语言,但是SQL能够自动转换数据类型(与php一样) select有一个特点:后面可以跟任意表达式 证明枚举

mysql字符串类型、列属性及外键

字符串类型 Char 和varchar 在定义char 跟varchar时,都需要设置长度. 语法: char(M); 最大长度为255 varchar(M); 最大长度为65532 不同编码长度不同 GBK最大为:32767 utf8最大为:21845 M为长度! 两者区别: Char的M是固定的,即使输入的字符长度小于M值,该字符长度也会被定义为M值: 效率更快,使用一些固定字符长度的时候可以使用,例:电话号码.身份证号码等! Varchar的M是范围性值,只要不超过M,输入的值长度为多少即

MySql学习 (一) —— 基本数据库操作语句、三大列类型

在使用MySql的时候,基本都是用图形化工具,如navicat.最近发现连最基本的创建表的语法都快忘了... 所以,想要重新系统性的学习下MySql,为后面学习MySql的一些高级查询,MySql性能和SQL语句的优化等打个基础. 用博客来记录下学习的过程,方便以后查阅和加强记忆.有错误的地方还请指出! 一.MySql的基本操作命令 注: <>表示参数.[]表示可选项 连接数据库:mysql> mysql -u<username> -p<password>; 显示

MySQL:列属性(列约束)

1. 是否允许为空(Null/not Null) 规定一个字段的值是否可以是null.默认是可以为空. 此时,插入值a = 10 , b 为空,发现可以正确插入: 若试图插入值b = 11,而a 不做处理,发现不能正确插入,提示 a 没有默认值. 即当对某个字段未输入信息时,列属性趋向于先查找有无默认值. tip: NULL与空字符串不同,Null会占用空间,需要表示某些字段可以为NULL. 2. 设置默认值(default value) 当插入数据中,有空字段时,会尝试查找该字段有没有设置默认

MySQL列属性约束及存储引擎

列属性约束,保证表的结构和数据的正确性和稳定性. 总的来说有五种:唯一性和主键约束.外键约束.检查约束.空值约束.默认值约束. 五大关键词:UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT 是否为空 规定一个字段的值,是否可以是null. null(默认) 或 not null Null表示没有值.与任何数据不同.表示什么都没有. 如果一个列不允许为空,但是在赋值时,没有为该字段赋值,则会出现问题. Mysql的每条记录,如果存在

MySQL数据库8(八)列属性

列属性 列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长. null属性 NULL属性代表字段为空 如果对应的值为YES,表示该字段可以为NULL. 注意: 1.在设计表的时候,尽量不要让数据为空. 2.MySQL的记录长度为65535字节,如果有一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节. 默认值 default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数据

09、MySQL—列属性

列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长 1.Null属性 NULL属性:代表字段为空 如果对应的值为YES表示该字段可以为NULL 注意: (1) 在设计表的时候,尽量不要让数据为空 (2) Mysql的记录长度为65535个字节,如果一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节. 2.默认值 Default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数