一:数据库字段管理。
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;