zoukankan      html  css  js  c++  java
  • MYSQL1.2(字段管理,索引类型)

    一:数据库字段管理。

    alter table hcytime add email varchar(50) default "student@163.com";
    添加一个字段。
    alter table hcy77 add age tinyint not null default 21 after godyear;
    添加一个字段,指定在godyear后面,且约束条件。
    alter table hcy77 add stu_id char(9) first;
    添加字段,指定在第一列。
    alter table hcy77 add ipone char(11) after age,add homeaddr vachar(100);
    一次性添加两个字段。
    alter table hcy77 drop sex,drop email;
    一次性删除两个字段。
    alter table hcy77 change stu_id stu_num char(10);
    在改名的同时,修改它的类型。
    **********************************************************************
    DBA:参与表结构的设计,优化性能。程序员写代码。
    mysql>alter table 库.表 执行动作;
    添加字段: add 字段名称 类型(宽度) 约束条件 ( 位置:after first);
    删除字段: drop 字段名;
    修改类型: modify 字段名 类型(宽度) 约束条件;
    修改段名: 字段名 change 源字段名 新字段名 类型(宽度) 约束条件;
    修改表名: 源表名 rename to 新表名;
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    数值类型的宽度和字符类型的宽度
    它们宽度的区别:
    数值类型的宽度是显示宽度。
    不能限制字段的赋值,字段值的大小由类型决定。
    如果不做设置int(2)那么默认显示宽度是11位。
    int(3)合理设置,越少越好,节省存储空间。如果值设置为10
    那么它会过滤不够10位以空格填补,浪费存储空间。

    二,Mysql键值。(设置在字段上)
    1.1普通索引 index * 使用规则 查看 创建 删除
    1.2主键 primary key* 使用规则 查看 创建 删除
    1.3外键 foreign key* 使用规则 查看 创建 删除
    1.4唯一索引 unique
    1.5全文索引 fulltext

    1.1普通索引index
    什么是索引?
    :相当于书的目录:为字段的值去排队。
    索引的优缺点?
    优点:加快查询速度 缺点:占据存储空间。增加编辑时间。
    为经常被查询的数据去设置索引,加快查询速度。
    使用规则?
    查看 desc 表名称;
    如果key标志为MUL。那么证明该为index字段。
    或者:show index from 表名;
    show index from a13G 按列显示。
    默认算法:Index_type: BTREE(二叉树,B+Tree,Hash
    例如: 1-10
    1-5 6-10
    1-2.5 2.6-5 6-7.5 7.6-10

    创建:create index 索引名 on 表名(字段名);
    删除:drop index 索引名 on 表名;
    直接在创建表的时候设置index:
    create table 库.表名(
    字段列表
    ...
    index(字段名),
    index(字段名)
    );
    查询:select * from a221 where name="zhangsan";
    如果name有做索引那么直接从name的值去找,增加查询速度。
    如果name没有索引那么会从表里面逐行查找,查询速度偏低。
    *********************************************************************
    1.2主键primary key 使用规则:查看 创建 删除
    建表时创建主键:
    create table 库.表( 或者:create table 库.表(
    ->name char(3) primary key, ->name char(3),
    ->level int(2) ->level int(2),
    ); ->primary key(name)
    ->);
    注:设置了为主键的字段,它的值不允许重复,且不能空值!!!
    删除主键:
    alter table 库.表 drop primary key;
    在已有表建主键:
    alter table 库.表 add primary key(字段名);
    前提要求字段里面的值不允许由空值和重复值!!!
    复合主键的使用:
    表中一个以上的字段做主键,复合主键字段值只要不同时重复就可以。
    create table fh(
    ->name char(15),
    ->class char(10), 这种创建才是标准的复合主键,
    _>pay enum("yes","no"),
    ->primary key(name,class)
    ->); 例如该表:赋值时只有name和class的值没有重复才能赋予。

    primary key 与 auto_increment 连用
    可以实现自动增长 id=id+1
    前提id的字段要是主键.
    create table t23(
    ->id int(2)primary key auto_increment,
    ->name char(20),
    ->age tinyint(2) unsigned,
    ->class char(7) default "nsd1712"
    ->);
    在已有表里添加一个记录编号字段:
    alter table a12 add id int(2) primary key auto_increment first;
    ********************************************************************
    1.3,unique唯一索引的使用:使用规则 查看 创建 删除
    一个表可以多unique字段
    key标志是UNI,字段不允许重复。
    字段值允许为NULL,如果修改为不允许NULL,那么它和主键一样。
    --------------------------------------------------------
    删除unique唯一索引:
    drop index sf_id on t24;(默认索引名和字段名同名)
    在已有表里面创建唯一索引:
    create unique index sf_id(索引名) on t25(sf_id字段名);
    满足条件:字段不允许有重复的值。
    --------------------------------------------------------
    创建表的时候设置unique:
    create table t24(
    ->name char(15),
    ->sf_id char(4),
    ->hz_id char(4),
    ->jsz_id char(4) not null,
    ->unique(sf_id),unique(hz_id),unique(jsz_id)
    ->);
    注:如果设置了不允许空值,那么显示就是主键,
    但是不能用主键的方法删除。可以alter table 表 modify 改回来。
    ****************************************************************
    1.4外键foreign key* 使用规则 查看 创建 删除
    什么是外键?
    让当前表字段的值在另外一个表中字段值的范围选择。
    满足条件:1,存储引擎必须是innodb
    2,字段类型一致
    3,被参考字段必须要是索引类型的一种(primary key)
    创建外键的参考表:
    create table ygtab(
    _>yg_id int(2) primary key auto_increment,
    ->name char(15)
    ->)engine=innodb;
    为外键父表赋值:
    insert into ygtab(name) values("cs"),("hc'),("ss");
    创建外键表,并且参考父表的表字段
    create table gztab(
    ->gz_id int(2),
    ->name char(15),
    ->pay float(7,2),
    ->foreign key(gz_id) references ygtab(yg_id)
    ->on update cascade on delete cascade
    ->)engine=innodb;
    得出结果是:
    当需要往外键赋值时,参考父表字段,赋值需求与父表字段值相同。
    -------------------------------------------------------------
    创建表时设置:
    create table 库.表(
    字段列表,
    foreign key(字段名) references 表名(字段名)
    up update cascade on delete cascade
    )engine=innodb;
    同步更新
    update yg1 set yg_id=8 where name="bob";
    同步删除
    delete from yg1 where yg_id=1;
    注意事项:1,不要delete from yg1;
    2,被参考表和字段不能drop;
    3,外键表允许空值且能重复,
    因为参考文件没有约束条件。解决方案(为外键设主键!)
    删除外键
    show create table gz1;
    alter table gz1 drop foreign key gz_ibfk_1;

  • 相关阅读:
    Pycharm使用
    解决TortoiseGit下载代码每次要输入用户名、密码
    GitLab创建项目
    【编码格式错误】SyntaxError: Non-UTF-8 code starting with
    C 位段,位域
    跳跃表 -- 随机平衡原理
    PHP 中的新语法 new static 是个啥意思?
    位运算之——按位与(&)操作——(快速取模算法)
    Redis Scan迭代器遍历操作原理(一)
    Redis Scan迭代器遍历操作原理(二)
  • 原文地址:https://www.cnblogs.com/yunsshcy/p/8674235.html
Copyright © 2011-2022 走看看