Mysql 数据库表如何增删更查
发布时间:2022-01-14 13:27:57 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关Mysql 数据库表如何增删改查,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、表操作 1、【增加】 create table DBname.table_name(id int, namevarchar(255))engine=My
这篇文章将为大家详细讲解有关Mysql 数据库表如何增删改查,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 一、表操作 1、【增加】 create table DBname.table_name(id int, namevarchar(255))engine=MyISAM charset=gbk; 2、【删除】 删除表 drop table table_name; 3、【修改】 修改表选项 alter table table_name engine=myisamcharset=utf8;//修改字符集 rename table Old_tablename to new_tablename;//修改表名 4、【查询】 show tables like '%_name'; //查看表 show create table table_name //查看建表语句 desc table_name //查看表结构 (describe) show variables like 'character_set%';//展示以character_set开头变量 二、表字段操作 1、【增加】 增加表字段 alter table table_name add column 字段定义 //增加字段 alter table table_name add column heightint after name;//增加一个字height字段在name之后 alter table table_name add column snvarchar(10) first;//在最形始增加sn字段、使用关键字first 2、【删除】 删除字段 alter table table_name drop columncolumn_name; alter table table_name drop columnheight;//删除表table_name中height字段 3、【修改】 修改已有字段(修改字段定义) alter table table_name modify columncolumn_name 新的定义; alter table table_name modify column sn intafter name; //修改sn字段 修改字段 alter table table_name change column 原字段名 新字段名 新字段定义; alter table table_name change column snnew_sn varchar(30) after age;//修改字段 4、【查询】 查看表和表结构 show tables like '%_name'; //查看表 show create table table_name //查看建表语句 desc table_name //查看表结构 (describe) 三、表数据操作 1、【增加】 insert into 表名(字段列表) values(与字段相对的值列表); insert into table_name('name','age','height')values(ssw,22,180); 2、【删除】 delete from 表名 where 条件;(删除是不可逆的) delete 时、支持order by 和limit来限制删除数据记录 delete from table_name where id>2; delete from tb_student order by height desc limit 3; truncate tb_student;//清空表 3、【修改】 update 表名 set 字段=新值,字段n=新值n where 条件;(也可用order by 和limit限制) update table_name set name='php' where id=3; 4、【查询】 select [字段表达式列表] from 表名 [where 子句] [group by子句] [having 子句] [order by子句] [limit 子句] select 字段列表 from 表名 [where 条件表达式] (*表示所有字段) select * from table_name where id>6; select name from table_name where id>2; select 加法逻辑关系别名(as)//select 运算 select 1+1; select 10>20; select 1 or 0;select 1+1 as a; select * from tb1,tb2;//多表查询 select tb1.id as s_id, tb2.* from tb1,tb2;//字段别名多表查询 select tb1.id as s_ id, s.class_name, c.* from tb1 as s, tb2 as c;//表别名 where子句、查询条件子句: 关系:> >= < <= != = Like:模糊查询、like ‘模式匹配符%和_’;(%任意字符,_表示一个字符) Notlike: 是like取反 Betweennum1 and num2: 在某个区间、闭区间。 In(元素列表): 在某个集合之内 Notin(元素列表): 不在某个集合之内 Null判断、is null 或者is not null 事例:selsect * from tb1where class_name like ‘%22’; selsect * from tb1 where class_name like ‘_22’; select * from tb1 where id between 11 and 40; select * from tb1 where id >=11 and id<=40; select * from tb1 where id not in(11,30); select * from tb1 where id in (11,20); group by 字段:分组查询 对查询结果(已经通过where子句过滤之后的数据),按照某个字段,进行分组! 合计函数: count(): 统计记录数、可以是*和字段名 sum(字段表达式): 统让和、对某个字段求和、 avg(): 平均值 max(字段表达式):最大值 min(字段表达式):最小值 group_concat(字段表达式):组内连接字符串 select count(*),id from tb1 where 1 groub by id; select sum(money),class_id from tb1 groub by class_id; select avg(money),class_id from tb1 groub by class_id; select concat(‘It’ ,’is’,’test’); 分组排序: ASC: 升序 DESC:降序 Select count(*),class_id from tb1 group by class_id; 多字段分组: Select count(*),class_id,class_name from tb1 groub by class_id,class_name; Having子句:条件子句、功能和where类似 Select * from tb1 where money>300; Select * from tb1 having money>300; Having和where区别:having的结果一定是 where 已经过滤之后的结果!having对结果进行二次处理 Select avg(age),class_id from tb1 where 1 group by class_id having avg(age)>16; Order by 排序子句 Order by 字段名 [asc|desc],[字段名[asc|desc],]//对结果进行排序的语句!可对多个字段排序 Select * from tb1 order by class_id desc, age asc; 原则是,先按照第一个字段进行排序,如果字段值相同,则采用第二个,以此类推 Select class_id from tb1 group by class_id asc order by class_id desc; Limit 子句:限制结果记录的子句、limit start (起始位置), size(记录数); Select * from tb1 limit 1,3; 执行顺序:字段表达式,from子句,where子句,group by子句,having子句,order by子句,limit子句 子查询语句: select max(height) from tb1; select * from tb1 where height=170; select * from tb1 where height=(select max(height) from tb1); 子查询的两种分类依据: 依据子查询出现的位置! where型子查询, 出现在where子句内! from 型子查询, 出现在from子句内! 依据子查询的返回数据的格式! 标量子查询,返回值是一个数据,称之为标量子查询! 列子查询,返回一个列, 行子查询,返回一个行, 表子查询,返回的是一个二维表 Select * from tb1 where height=(selectmax(height) from tb1); //where型 需要,先用一个查询,得到身高排序结果,再将该结果分组 Select* from (select * from tb1 order byheight desc) group by class_id;//from型 Select* from (select * from tb1 order byheight desc) as tmp group by class_id; 列子查询: Select * from tb1 where sex=’girl’ and class_id in(select class_id from tb1 where sex=’body’ group byclass_id); //找到班级内有女同学的男学生信息 Select * from tb1 where (height,money)=(selectmax(height),max(money) from tb1); //找到,高富,最高并且最有钱! exists型子查询: select * from tb1 where exists(select * from tb2 where tb1.class_id = tb2.id); 连接查询,join: 连接多个表记录之间的连接!from 表名1 join 表名2 on 连接条件 Select name,class_id,age from tb_xue join tb_ban on tb_xue.class_id=tb_ban.id; 需要不单从 学生表获取数据,还需要从 班级表获得数据 内连接,inner join mysql默认的连接就是 inner join select stu_name,class_id,class_name fromselect_student inner join select_class onselect_student.class_id=select_class.id;(可省略inner) 外连接,left join,right join Select stu_name,class_id,class_name from select_student left join select_classon select_student.class_id = select_class.id; join关键字前面的(左边的)左表,join关键字后边的(右边的)右表! 左外:如果出现左表记录连接不上右表记录的,左表记录会出现正在最终的连接结果内!而右表记录相应设置成NULL。 右外:如果出现右表记录连接不上左表记录的,右表记录会出现正在最终的连接结果内!而左表记录相应设置成NULL。 交叉连接,cross join: 相当于是 没有条件的内连接 自然连接,natural join: mysql,自动判断连接条件,帮助我们完成连接! Select stu_name,class_name from select_class natural join select_student; 而自然连接也分内连接与外连接! 自然内连接:natural join 自然左外:natural left join 自然右外:natual right join 总结: 最终的效果只有:内,左外,右外! 交叉,特殊的内! 自然,相当于自动判断连接条件,完成内,左外,右外! 连接条件,on,using: on,后面使用一个连接条件表达式! using(连接字段),要求使用同名字段进行连接! Select class_name,stu_name from tb_class inner join tb_student on tb_class.class_id=tb_student.class_id; Select class_name,stu_name from tb_class inner join tb_student using(class_id); union查询,联合查询: 将多个查询的结果,并列到一个结果集合内! (select stu_name,height from tb_student where sex=’girl’ order by height asc limit 1000) union(select stu_name ,height from tb_student where sex=’box’ order by height desc limit 1000 ); union 的连接的两个子句,不要求实同表,只要求,列的数量相同! union会在联合时:主动去掉相同的记录:此时,可以使用 all关键字加以修正: select 1=1 union all select 2; select语句的选项: distinct,取消相同的记录 select class_id from tb_student; select all class_id from tb_student; select distinct class_id from tb_student; 四、编码 1、建库,建表,建字段 设置(数据库中的数据的编码) 2、PHP作为mysql服务器的客户端,设置的客户端编码和连接编码(set names gbk/utf8) 3、设置php返回给浏览器数据的编码,(Content-Type,header(),<meta>) 4、PHP文件本身保存的编码(文件编码,通过文本编辑器设置) (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |