mysql 表设计,约束条件,索引

1.约束条件:

create table `jn_01`(
    `id` int unsigned not null auto_increment primary key,
    `name`  varchar(255) unique not null,
    `like` set('football','basketball'),
    `sex` enum('0','1','2')  default '2'
)engine = innodb default charset=utf8;

--登录名,最大长度255,不能为空且唯一

int 整型
unsigned 无符号
not null 不能为空
unique 标记该字段必须唯一,如,帐户登录名
aoto_incremnt 自增
primary key 主键
    标记对应数据的唯一性
    必须配合自增使用
    配合整型

insert into `jn_01`(`name`,`like`,`sex`) values('卡牌','football','1');

--not null 如果带有不能为空的约束性,会报wanrnings
insert into `jn_01`(`like` ,`sex` ) values('basketball','1');

--null 如果设置不能为空,则不插入数据,插入的类型就是null 类型
--not null的字段必须赋值,可以是''空值,但是不能为NULL
insert into `jn_01`(`name` ,`sex`) values('很好','0');

--default 默认值     如果没有插入数据,就取默认值
insert into `jn_01` (`name`) values('sb'); 

set names gbk;

2.表设计与修改表结构

--建表
create table `jn_user`(
    `id` int unsigned not null auto_increment primary key,
    `name` varchar(255) not null,
    `sex` enum('0','1','2') not null default '2',
    `age` int unsigned not null,
    `tel` char(11) not null ,
    `email` varchar(155) not null,
    `major` varchar(255) not null,
    `marry` enum('0','1') not null default '1',
    `department` varchar(255) not null ,
    `grade` enum('0','1','2','3') not null default 3 ,
    `status` enum('0','1','2','3') not null default '0',
    `addtime` int unsigned not null
)engine=innodb default charset=utf8;

insert into `jn_user`(`name`,`sex`,`age`,`tel`,`email`,`major`,`marry`,`department`,`grade`,`status`,`addtime`) values
('大勇7','1','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()),
('提莫','0','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()),
('提莫6','0','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()),
('提莫1','0','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()),
('提莫2','0','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()),
('提莫3','0','22','12345678901','1234@qq.com','养猪专业','0','老板办公室',3,1,unix_timestamp()); 

查看表结构:
    show create table `jn_user`;

修改表名: rename
    alter table `jn_user` rename to `em_user`;
    alter table `em_user` rename `jn_user`;
修改字段的类型 modify
    `marry` enum('0','1') not null default '1',
    alter table `jn_user` modify `marry` tinyint not null default '1';

    如果修改了数据类型,会破坏原有数据,在修改,安全起见,请将数据库先备份!!
    在修改之前,表中已经存在数据,当修改表结构时,该列的数据,也会相应地转换为与该列数据类型一致的!!

修改字段名
    alter table `jn_user` change `marry` `new_marry` enum('0','1') not null default '1' first;
    --first 放到第一位

    alter table `jn_user` change `new_marry` `marry` enum('0','1') not null default '1' after `major`;
    --after 放到什么的之后

增加字段 add
    默认情况下排列在最后
    alter table `jn_user` add `address` varchar(255) not null;

    alter table `jn_user` add `address` varchar(255) not null first;

    alter table `jn_user` add `address` varchar(255) not null after `name`;

删除字段   drop
    alter table `jn_user` drop `address`;

修改位置
    alter table `jn_user` add `address` varchar(255) not null;

    alter table `jn_user` modify `address` varchar(255) NOT NULL after `addtime`;

查看表引擎
show create table `表名`;
show create table `jn_user`;

修改储存引擎
    alter table `jn_user` engine=MyISAM;
    alter table `jn_user` engine=innodb;

3.索引

创建索引的目的:
    由于数据性能上的瓶颈,为了快速查找数据

1.primary key 
        主键索引
            1.标记数据的唯一
            2.最常用
            3.每张表必须设置(效率高),每张表只能设置一个
            4.效率最高的索引
            5.最准确,快捷

2.unique
        唯一索引
            同一张表可以设置多个
3.index
        普通索引或常规索引
            1.缺点减慢插入,删除
            2.多占空间

        index索引,使用在经常查询的字段当中

4.fultext 全文索引
        不支持中文

索引合适就可以

create table `jn01`(
    `id`  int,
    `name` varchar(255),
    `tel` char(11)
)engine=innodb default charset=utf8;    

添加删除索引

-- 建表时,添加索引
create table if not exists `pj_user`(
    `id` int unsigned not null auto_increment,
    primary key(`id`) ,

    `name` varchar(255) not null ,
    unique un_name(`name`), 

    `tel` char(11)  not null ,
     index in_tel(`tel`),
     `addtime` int unsigned not null default 1
)engine=innodb default charset=utf8;

    唯一索引,可以有多个
    普通索引,可以有多个
    主键只能有一个

    -- 查看索引
        show indexes from `pi_user`;

    -- 删除索引

    -- 删除普通索引
    drop index `in_tel` on `pj_user`;
    -- 删除唯一索引
    drop index `un_name` on `pj_user`;

    -- 删除主键(极少删除主键)
        1.去除自增属性(修改表结构)
            alter table `pj_user` modify `id` int(10) unsigned not null comment '删除自增';
        2.删除主键
            alter table `pj_user` drop primary key;


    添加主键的两步:
            1.添加主键
                    alter table `jn01` add primary key(`id`);
            2.添加自增
                    alter table `jn01` add modify `id` unsigned not null auto_increment;

    添加唯一索引:
    alter table `pj_user` add unique un_name(`name`) comment '将name字段设置为唯一';

    添加普通索引:
        alter table `pj_user` add index in_tel(`tel`) comment '将tel字段设置为普通索引';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值