MYSQL1.2(字段管理,索引类型)

Wesley13
• 阅读 562

一:数据库字段管理。

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 a13\G 按列显示。
默认算法: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;

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这