mysql数据库表的简单管理


      从逻辑上讲,表是由行列组成的结构,从物理上将,表就是文件
      表空间:是比表大,比数据库小的物理单位
      一个表只能属于一个数据库,而一个数据库可以有很多表

     首先进入mysql模式,mysql模式是以mysql>开头的
     在这个模式下有几个命令:
        show databases;   ############查看mysql的数据库
        use database ##########是进入某个特定的数据库  进入数据库后就可以
创建表了
     创建表:创建表用create命令,大概模式如下:
        create table [if not exists] table_name (); ########[]内的内容可有可无
()中是表的一些组成部分:如id  name  age  gender 等等,可以很多,
表的一些索引也是在()中定义的,如:index_score(score),意思就是在score字段上创建
索引, 创建索引后怎么查看索引里?    show indexs from ···
       下面给出一个创建表的实例
注意在添加的不同字段之间要用;隔开
mysql>create  table  users (
       ->id  int  unsigned  not null  auto_increment primary key,
       ->name  varchar (30) not null,
       ->age tinyint  unsigned not null
       ->gender enum('f','m') not null default 'm',
       ->score  float);

这样就创建了一个名为users的表 ,users表有id name age gender score 几个字段组成
每个字段后边的是这些字段的属性
属性包括 type  null key default extra
type一般指数值类型   null表示所属的字段是否为空   key 键的类型···

     将了如何创建表,那么建成了表后,如何让从表中查询数据了?
我们一般用select语句  形式是select 指定字段 from table_name  :意思就是
从表中查询指定的字段并把指定字段的相关信息显示出来
我们举些例子:

   select * from users; #########显示users表的所有信息
   select * from users where rid>=2; ##########显示users表中,rid大于等于2的内容
   select * from users where name like '%user%'; #########显示users表中含有user的name

order by 是指以哪个字段为准进行排序   liru:
   select * from users order by rid desc;#########将users表中的rid以降序排列显示
出来         desc 降序排列    asc  升序排列  默认是升序
   select * from users order  by  name;将user表的name字段按默认方式排序并显示出来

limit  n  表示显示前n行  例如:
   select * from users limit 2;#############显示suers表的前2行
我们想想一个表中肯定有很多重复想这么一种 情况 ,那么我们怎么能够消除
重复的项 并显示出来里? 使用distinct  例如:
   select distinct zone from users; 在users表中取消重复的行

group bye  表示以哪个字段为标准的行显示出来
   select zone,count(*)from mytb;
   select zone,count(*)from mytb group by zone;
    


      修改表结构:对于修改表结构可以有添加,删除,修改字段等等
alter table table_name ····
      add  添加新的字段,如果不明确说明添加的是什么 ,那么添加的就是字段
例如:alter table knight add master tinyint unsigned; ######给knight添加master
字段 这个字段的数值类型是小整型,无标记的
      after col_name #######在某个字段后添加新的字段
      first 添加为第一段   如果 添加字段时什么
      修改字段:有change 和modify两种
      cahnge不但可以改变字段,还可以改变字段的名字
change old_name new_name col_defination 例如:
alter table knight change gender genders enum('f','m') NOT NULL  DEFAULT 'M';
      modify 修改某个字段在表中的定义
alter table knight modify gender enum('f','m') NOT NULL  DEFAULT 'M'; 将空变为非空
      添加索引     add index|key 索引在哪些字段上
alter table knight add index (age); 给age字段添加索引
show indexs from knight 查看表中的索引
      放弃某个字段或索引  drop ····
删除字段 drop col_name
删除键 drop primary key
删除索引  drop (index|key) index_name
       给表重命名  rename to
alter table knight rename to knights 把表名重命名
rename table knights to knight  名字重命名回来
       删除表
drop table [if exists] table_name
      

       向表中插入数据
insert  into  table_anme 字段 values
insert into knight (name) value ('yangguo');向knight这个表中的name字段汇总插入yangguo
insrt into knight set name='wei xiaobao';
insrt into knight (name)value (‘yangguo’,‘guojing’··);这样可以省略字段把所有
值插到naem字段里面
insert into knight (name) values ('qiao feng'),('xuzhu'); 属于p处理的插入方式,一下插入多个name

       在表中修改数据
update  table_name set···· where ···
update knight set age=21,couseID=4 where id=1;把表knight中id=1的age改为1 ,couseID改为4
       在表中删除数据
delete from table ··· 删除的是一行的
delete from knight where uid=5; 删除knight表中 uid=5的行
truncate是清空表的   truncate table_name 清空表,并初始化表
    

   以上的表的查询都是在一个表中查询的,下我们将要看看怎么在多表中进行查询
我们主要以两个表键的查询为例:
join 将多张表链接起来再进行查询
链接的类型有:交叉连接  
               内连接 又称为对称链接,等值条件在两边都要出现
如:select * from knight,juexue where knight.xid=juexue.yid;
               外连接又称为非对称连接  其又包含三种连接
        左外连接: 用left join····on显示出的内容包含左表的全部内容;即左表有的,而右表没有的,照样会将左表有的
显示出来如:select k.name,j.cname from knight as k left join juexue as j on k.couseid = j.cid;
        右外连接
select k.name,j.cname from knight as k right join juexue as j on k.couseid = j.cid;
        全外连接


        两外一个是自连接 union
如:select k1.name,k2.name from knight as k1,knight as k2 where k1.tuter=k2.uid;
      union  将两张表的执行结果合成一个
>select uid as id ,name as NAME from knight
->union
->select cid as id ,cname as NAME FROM juexue;