zoukankan      html  css  js  c++  java
  • MySQL学习笔记(三)

    --回顾

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

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

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

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

    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;

  • 相关阅读:
    C#序列化效率对比
    将聚合记录集逆时针和顺时针旋转90度(行列互换)
    Sql的行列转换
    log4net配置
    input框添加阴影效果
    WCF自定义地址路由映射(不用svc文件)
    Jquery对当前日期的操作(格式化当前日期)
    用JQuery获取输入框中的光标位置
    sublime text3安装后html:5+Tab不能快速生成html头部信息的解决办法
    js获取url传递参数,js获取url?号后面的参数
  • 原文地址:https://www.cnblogs.com/imweihao/p/7137186.html
Copyright © 2011-2022 走看看