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;