一、修改表结构
Intert into
修改表结构会影响表中已有的纪录,一般会在写入纪录之前,备份一下,或者是在表结构修改好之后,再写入表纪录。
Alter table 数据库.表名 [ 处理动作 ];
//处理动作:
添加新字段 add
[ add 字段名 字段类型(宽度) 约束条件 first; ]
[ add 字段名 字段类型(宽度) 约束条件 after; ]
默认新添加的字段追加在已有字段末尾
First 把新添加的字段添加所有字段的上方
After 字段名 把新字段添加在指定字段名的下方
删除字段: drop
Drop 字段名;
Drop 字段名, drop字段名;
修改字段类型 modify
[ mydify 字段名1 新字段类型(宽度) 约束条件; ]
[ mydify 字段名2 新字段类型(宽度) 约束条件; ]
[ mydify 字段名3 新字段类型(宽度) 约束条件; ]
更改字段名 change
[ Change 源字段名1 新字段名1 字段类型 约束条件, ]
[ Change 源字段名2 新字段名2 字段类型 约束条件, ]
[ Change 源字段名3 新字段名3 字段类型 约束条件; ]
修改表名
Alter table 源表名 rename to 新表名;
#这里修改表名之后,/var/lib/mysql对就的目录/文件也会跟着改变。
//alter table 表名 add sex enum(“man”,”woman”) not null default “man” after age;
添加在age字段的下面
改类型
[ alter table 表 modify 纪录名 tinyint(2) unasigned,]
[ modify 纪录名 tinyint(2) unasigned; ]
//改类型时将不改变的类型原样写下来。
复制表:
[ create table newtablename SQL查询语句; ]
[ create table newname select * from mysql.user; ]
//复制表时,如果源表的Key字段有标识时,则新表不会有key属性,就是说不会被复制过去的。
查询指定字段的值:
[ select host,user,passwd from mysql.user; ]
//查询host user passwd这三个类型,其它的不看。
复制源表的表结构
[ Select * from 表名 where 字段=”所有值”; ]
没有所指纪录,则只剩下空表,及表结构。
[ create table newtablename SQL没有查询结果的语句; ]
//查询到的没有结果,那么只会有表结构,复制即可。
二、Mysql索引类型
表中的索引,由Key来显示。
1,什么是索引 //相当与书的目录
写入慢,读取快。
索引算法:排列的方式。
2,索引的优缺点
优点:加快查询表记录的速度
缺点:会减慢对表记录写(insert update delete)的速度。
索引会占用磁盘空间。
默认情况下会将索引信息存储在
tablename.MYI 保存表索引信息文件
tablename.MYD 存放表内的记录,即数据
Tablename.frm 存放表结构
3,怎么查看表里是否有索引字段
[ desc tablename; ]
KEY字段。
4,怎么查看索引信息
[ show idex from dataname.tablename ]
索引类型 索引字段 索引算法(BTREE)default
(B+TREE) hash
BTREE(二叉数据算法)
100
1~50 51~100
1~25 26~50
1~12.5 12.6~25
5,Mysql支持哪些索引
普通索引 index //掌握
唯一索引 unique
主 键 primary key //掌握
外 键 foreign key //掌握
全文索引 fulltext
创建普通索引字段
1、一个表中可以把多个字段设置为了INDEX字段
2、INDEX字段值可以重复
3、把经常做查询条件的字段设置为INDEX字段
4、INDEX字段的KEY标志是MUL
//select 字段,字段,字段 from 表名 where 字段=“XXX”
建表时就创建INDEX字段;
Create table 表名(
Name varchar(10),
Age int(2),
Sex enum(“doy”,”gril”) default(“boy”
Index (name)
//如果要两个索引字段,则再在此处加上即可。也可以”index(name,ID)”
);
在已有的表内添加INDEX字段。
Create index 索引名 on 表名(字段名列表);
//索引名一般为字段名。 表名,字段列表则要把那个字段做为INDEX字段。
MUL = index
查看索引名
// show index from 表名;
...
KEY name
...
删除索引
Drop index 索引名 on 表名;
创建唯一索引
一个表中可以有多个unique字段
Unique字段值不可以重复
Unique字段key标志是UNI
Unique字段值允许为NULL,当修改为不允许为NULL时字段限制与主键相同
在已有的表中设置unique字段
Create unique index 索引名字 on 表名(字段名)
Create unique index 索引名字 on 表名
创建主键字段-primarykey
字段的值不可以重复
一个表中只可以有一个primarykey字段
当多个字段都做primarykey字段时,叫复合主键,要在建表时一起创建
在复合主键的字段,只要字段值不同时重复就可以
Primarykey通常与auto_increment连用
//不是主键,不能设置auto_increment功能。要想删除主键功能,则先删除auto_increment。
Primarykey字段标志位为PRI
删除字段的空值:
[ Delete from 表名 where 字段 is null; ]
修改t30表的stu_id做主键
[ alter table t30 add primary key(stud_id); ]
//想让多个字段做主键字段,叫复合主键,只能在建表时一起创建。
指定当前值自动增长值+1
[ Alter table t50 modify id int(2) not null auto_increment; ]
//即使用字段被删除了,还会接着之前的编号。
[ Alter table t40 drop primary key; ]
//删除主键功能,(没有自动增长功能)
[ Alter table t50 modify id int(2) not null; ]
[ Alter table t50 drop primary key; ]
//先取消自动增长,再删除主键功能
重复主键:
两个主键的内容不完全一样,就可以写进记录。
//创建重复主键
mysql> create table sername(
-> ip varchar(15),
-> port varchar(5),
-> sername varchar(10),
-> status enum("deny","allow") default "deny",
-> primary key(ip,port)
-> );
普通索引 index
唯一索引 unique
主 键 primary key
创建 查看 删除 使用
外 键
使用外键 foreign key
多个表中的字段产生关联关系。
创建外键字段:
Foreign key(当前表里的字段名) references 别一个表名(表名里的字段名)
on update cascade //同步更新
on delete cascade //同步删除
使用外键的条件:
1、表使用的存储引擎要是innodb存储引擎。
2、外键字段的类型要匹配
//两个表内的字段要关联的
3、被参照的字段要有明确的索引(index primary key)
6,如何在表里设置索引字段。
7,如何删除表中字段的索引