我的Linux生涯之Mysql:Day02[Mysql的基本管理]

一、修改表结构
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,如何删除表中字段的索引

 

 

 

你可能感兴趣的:(mysql,linux)