zoukankan      html  css  js  c++  java
  • 字段约束,索引,主外键

                                                        第   字段约束,索引,主外键

    字段约束条件

    1.1作用:限制如何给字段赋值的

    1.2包括内容有:NULL Key Default Extra

    NULL是否允许给字段赋null

    null默认允许赋null

    not null不允许赋null

    key键值类型:普通索引唯一索引全文索引主键外键

    Default默认值作用:当不被字段赋值时,使用默认值给字段赋值

    不设置默认值是系统定义的是null

    default

    Extra额外设置,字段是否设置为自动增加,默认没有自动增长功能

    案例:

    1)建库

    Mysql>create database db2;

    2)进库

    use db2;

    3)建表

    Mysql>create table t2(

    >name char(3),

    >level int(3)zerofill

    );

    Mysql>create table t5(

    >classroom char(7)default"nsd1801",

    >name char(5)not null,

    >age tinyint(2)unsigned zerofill default 18,

    >sex enum("boy","girl")not null default"boy"

    );

    4)表里建值

    insert into db2.t1 values("bob",1);

    insert into db2.t1 values("bob",99);

    insert into db2.t1 values("bob",218);

    insert into db2.t1 values("bob",7218);

    insert into t5(name)values("lucy");

    insert into t5 values("nsd1802","alice",31,"girl");

    修改表结构

    mysql>alter table.表执行动作;

    添加新字段add字段名类型(宽度)[约束条件]

    删除已有字段drop字段名

    修改已有字段的类型宽度及约束条件

    ***划重点****修改时不能与已经存储的数据矛盾的话不允许修改

    修改字段名

    modify字段名类型(宽度)[约束条件]

    change源字段名新字段名类型(宽度)[约束条件]

    修改表名alter table源表名rename[to]新表名;

    案例:

    1)修改

    alter table studb.t1 add name char(15)first;

    alter table studb.t1 add addrhome varchar(50)default"beijing";

    2)修改

    alter table studb.t1 add sex enum("boy","girl")not null

    Default"boy"after name;

    3)查看表结构

    desc studb.t1;

    4)查看表数据

    select*from studb1;

    5)修改

    mysql>alter table studb.t1 drop sex,drop name;

    mysql>alter table t1 modify addrhome char(10)default"beijing";

    mysql>alter table t1 modify level smallint(6)not null;

    mysql>alter table t1 modify age tinyint(4)first;

    mysql>alter table t1 change addrhome home char(10)default"beijing";

    mysql>alter table t1 rename dogperson;

    *************************************************************************

    mysql键值

    设置在表中字段上的,作用是约束如何给字段赋值。同时会给字段做索引。

    索引介绍:树状目录结构类似与书的目录

    优点:加快查询表记录的速度

    缺点:会减慢编辑表记录的速度,且占用磁盘的物理存储空间

    (delete insert update)

    键值:普通索引唯一索引全文索引主键外键

    普通索引的使用(index)

    1)使用规则?

    查看

    desc表名;

    show index from表名;

    Table:t2

    Key_name:aaa

    Column_name:age

    Index_type:BTREE(二叉树)

    2)创建

    3)在已有表创建

    create index索引名on表名(字段名);

    1create index aaa on studb.t2(age);

    2mysql>show index from studb.t2G;

    Key_name:aaa#索引名

    Column_name:age#字段名

    Index_type:BTREE(二叉树)Hash#索引类型

    4)建表是时创建索引类型

    Mysql>create table表名(

    >字段列表,

    >index(字段名)

    >index(字段名)

    );

    1mysql>create table studb.t21(

    >classroom char(7)default"nsd1801",

    >age tinyint(2)unsigned zerofill default 18,

    >sex enum("boy","girl")not null default"boy",

    >index(name),

    >index(age),

    >index(classroom)

    );

    6)查看索引列表

    desc studb.t21;

    show index from studb.t21G;

    7)删除

    drop index索引名on表名;

    mysql>drop index aaa on t2;

    mysql>desc t2;

    mysql>show index from t2;

     

    主键primary key

    (普通主键复合主键主键+auto_increment

    1)使用规则?

    查看desc表;key---->PRI

    2)创建

    在已有表创建alter tableadd primary key(字段名)

    3)建表时创建

    Mysql>reate table表名(

    >primary key(字段名)

    );

    创建复合主键的使用:多个字段一起做主键,插入记录时,只要做主键字段的

    值不同时重复,就可以插入记录。

    desc mysql.db;

    desc mysql.user;

    4)主键primary key通常和auto_increment连用。

    让字段的值自动增长i++

    数值类型i=i+1

    5)删除主键

    mysql>alter table表drop primary key;

     

    已有表创建主键

    1)创建主键

    mysql>alter table t21 add stu_id char(9)first;

    mysql>alter table t21 add primary key(stu_id);

    2)查看表结构

    mysql>desc t21;

    3)键值

    insert into t21 values(null,"nsd1801","lxd",18,"boy");报错

    insert into t21 values("nsd180101","nsd1801","lxd",18,"boy");可以

    insert into t21 values("nsd180101","nsd1801","gxh",18,"boy");报错

    insert into t21 values("nsd180118","nsd1858","gxh",18,"boy");可以

    4)查看数剧

    select*from t21;

    5)删除主键

    alter tabledrop primary key

    desc t21;

    6)再次建值

    insert into t21 values("nsd180101","nsd1801","gxh",18,"boy");可以了

     

    建表时创建主

    使用格式

    Mysql>create table表名(

    >字段列表,

    >primary key(字段名)

    );

    Mysql>create table表名(

    >字段类型(宽度)primary key

    >......

    >);

    1)建表

    Mysql>create table studb.t22(

    >person_id char(18),

    >name char(10),

    >age tinyint(2)unsigned,

    >primary key(person_id)

    );

    Mysql>create table studb.t24(

    >person_id char(18)primary key,

    >name char(10),

    >age tinyint(2)unsigned

    );

    2)查看表结构

    desc studb.t22;

    desc studb.t24;

    3)建值

    insert into studb.t22 values(null,"bob",21);错误

    insert into studb.t22 values("xxxxxx","bob",21);可以了

    insert into studb.t22 values("xxxxxx","lucy",19);错误

    insert into studb.t22 values("Fxxxxx","lucy",19);可以了

     

    创建复合主键

    作用:多个字段一起做主键,插入记录时,只要做复合主键字段的值

    不同时重复,就可以插入记录。

    1)建表

    mysql>create table studb.t23(

    ->clientip char(15),

    ->port smallint(2),

    ->status enum("allow","deny"),

    ->primary key(clientip,port)

    ->);

    2)查看表结构

    mysql>desc studb.t23

    3)建值

    insert into studb.t23 values("1.1.1.1",22,"allow");可以

    insert into studb.t23 values("1.1.1.1",22,"deny");报错

    insert into studb.t23 values("2.1.1.1",22,"deny");可以

    主键primary key通常和auto_increment连用。

    1)建表

    Mysql>create table studb.t27(

    >stu_id int(2)zerofill primary key auto_increment,

    >name char(10),

    >age tinyint(2)unsigned,

    >sex enum("boy","girl")

    );

    2)建值

    insert into studb.t27(name,age,sex)values("bob",19,"girl");

    insert into studb.t27(name,age,sex)values("bob",19,"girl");

    3)产看表结构

    select*from t27;

    4)添加主键

    向已有表中添加记录编号字段id并使其字段的值自动增长方式赋值

    mysql>alter table dogperson add id int(2)primary key

    >auto_increment first;

    5)查看表数据

    select*from dogperson;

    select*from dogperson where id=3;

    6)添加主键

    alter table studb.t22 add primary key(name);


     外键(作用限制如何给字段赋值的)

    给当前表中字段赋值时,值只能在其他表的指定字段值的范围里选择。

    作用:实现同步管理,删除,更新

    使用规则?

    创建外键foreign key的命令格式:

    Mysql>create table表(

    字段名列表,

    foreign key(字段名)references表名(字段名)

    on update cascade on delete cascade

    engine=innodb;

    缴费表

    use studb;

    1)建表

    Mysql>create table jfb(

    >jfb_id int(2)primary key auto_increment,

    >name char(15),

    >pay float(7,2)

    >)engine=innodb;

    2)建值

    insert into jfb(name,pay)values("bob",26800);

    insert into jfb(name,pay)values("tom",26000);

    3)查看数据

    select*from jfb;

    班级表

    1)建表

    Mysql>create table bjb(

    >bjb_id int(2),

    >name char(15),

    >foreign key(bjb_id)references jfb(jfb_id)

    >on update cascade on delete cascade

    >)engine=innodb;

    2)建值

    insert into bjb values(3,"lucy");

    insert into bjb values(1,"bob");

    insert into bjb values(2,"tom");

    3)查看数据

    select*from bjb;

    4)同步更改和删除

    mysql>update jfb set jfb_id=9 where name="bob";

    mysql>delete from jfb where jfb_id=2;

    5)查看数据

    select*from jfb;

    select*from bjb;

    6)查看mysql>show create table表名;

    7)删除外键

    alter table表名drop foreign key外键名;

    alter table bjb drop foreign key bjb_ibfk_1;

    8)在已有表创建

    mysql>delete from bjb;

    mysql>alter table bjb add foreign key(bjb_id)references jfb

    (jfb_id)on update cascade on delete cascade;

    ###########################################


    内容总结:

    索引的类型:三类型

    B+tree

    hash

    Btree二叉树(一般选择)

    ##############################################

    键值类型

    index:普通索引

    unique:唯一索引

    fulltext:全文索引

    primary key:主键

    foreign kry:外建

    索引的作用:

    •索引是什么?

    –索引是对记录集的多个字段进行排序的方法。

    –类似于书的目录

    –索引类型包括:BtreeB+treehash

    •索引优点

    –通过创建唯一性索引,可以保证数据库表中每一行数

    据的唯一性

    –可以加快数据的检索速度

    •索引缺点

    –当对表中的数据进行增加、删除和修改的时候,索引

    也要动态的维护,降低了数据的维护速度

    –索引需要占物理空间

    •使用说明

    –一个表中可以有多个INDEX字段

    –字段的值允许有重复,切可以赋NULL

    –经常把做查询条件的字段设置为INDEX字段

    INDEX字段的KEY标志是MUL

  • 相关阅读:
    Java 数组的浅拷贝和深拷贝
    Java 传递可变参数和方法重载
    Java 数组排序
    Java 一维数组作为参数和返回值
    Java 运算符及优先级
    MySQL 由 5.7 升级为 8.0 之后,Laravel 的配置改动
    Lavarel
    Laravel框架中Blade模板的用法
    php-fpm 配置文件检测
    Laravel Blade 模板 @section/endsection 与 @section/show, @yield 的区别
  • 原文地址:https://www.cnblogs.com/qingbai/p/12015014.html
Copyright © 2011-2022 走看看