mysql基础知识
mysql常用命令:众多关系型数据库中的一种 用来存数据的 进入mysql命令行: mysql -uroot -p123456 show databases;查看所有数据库 create database zxp charset utf8;创建数据库 drop database zxp; 删除数据库 use zxp; 选择数据库 数据库: 查看 show databases; 创建 create database zxp charset utf8; 删除 drop database zxp; 选择数据库 use zxp; 表: 约束: #自增长 auto_increment #非空 not null #默认值 default 'xxxx' #唯一约束: unique #charset 指定字符集 #主键 primary key 具有唯一性,不能为空 #外键 用来关联表 增 #score create table score( id int auto_increment primary key, s_id int not null, grade float not null ) create table zxp( id int auto_increment primary key, name varchar(10) not null, sex varchar(2) default '男', addr varchar(50) , phone int not null unique, ); 删: drop table zxp 改: alter table zxp rename stu; #改表名 alter table zxp modify name varchar(20);#修改字段的数据类型 alter table zxp change name stu_name varvhar(30); alter table zxp add money float not null after stu_name;#新增一个字段,放在哪个位置 alter table zxp drop addr;#删除某个字段 查: show create table tablename;#查看建表语句 desc tablename;查看表结构 show tables;#查看所有的表 数据: 增: insert into zxp(stu_name,money,sex,phone)values('赵晓静',100000,'女',110); insert into zxp(stu_name,money,phone)values('赵静',100000,,110); #指定字段 #不指定字段 insert into zxp values('','小明',10000,'女',109999); #指定字段的话,插入的值和字段对应 #不指定的话,要把所有的字段值都写全 insert into zxp(stu_name,money,phone)values('赵静1',100000,,110),('赵静2',100000,,110),('赵静3',100000,,110); #同时插入多条 删: truncate tablename;#删除整个表里的数据 delete from zxp;#删除整个表里的数据 #delete清空的表自增长id还会继续增长 #truncate清空得到表自增长id从1开始,truncate速度比delete要快,因为truncate是从磁盘中删除,数据不可恢复 delete from zxp where stu__name='赵晓静';#删除指定数据 改: update zxp set money=80;#如果不指定条件得到话,修改的是整个表的数据 update zxp set money=90 where stu_name='赵晓静';#修改指定的数据 update zxp set money=90,phone=10000 where stu_name='赵晓静';#修改多个字段 查: select stu_name,sex,money,phone from zxp;#指定查询的字段 select * from zxp; select * from zxp where sex='男' and money>100;#多个条件,必须同时满足; select * from zxp where sex='男' or sex='未知';#多个条件,有一个条件满足即可; elect * from zxp where sex !='男';#<>也是不等于 ALTER table zxp add addr varchar(50); select * from zxp where addr like '%东京%';#模糊匹配,%代表的是通配符,必须得用like select * from zxp a where a.stu_name like '姚_'#下划线通配符表示任意一个单字符 select a.stu_name,a.phone from zxp as a where a.stu_name='遥远';#给表起别名,as可以去省略掉 select * from zxp a where a.stu_name in('林倩','遥远','阿香') and a.money>100 #in select *from zxp a where a.money between 1000 and 10000 #between... and 把1000到10000之间的查出来,包含 1000和10000,只能用数值类型 select * from zxp order by id asc;#升序,默认是升序 select * from zxp order by id desc;#降序 select * from zxp where id=3 order by money desc; select * from zxp a where a.addr='' or a.addr is null; select distinct a.money from zxp a;去重 select count(*) 学生人数 from zxp wheer sex='女';统计行数 select max(a.money) 钱最多, a.stu_name 名字 from zxp a; select min(money) 钱最少, stu_name 名字 from zxp; select avg(a.money) 平均多少钱, a.stu_name 名字 from zxp a; select sum(a.money) 总共多少钱, a.stu_name 名字 from zxp a; select *,count(*) 人数 from zxp group by sex; select sex 性别,count(*) 人数 from zxp group by sex;#分组 select sex 性别,count(*) 人数 from zxp a where a.money>300 group by a.sex;#分组 分组之后不能加where,只能在前面加 select sex 性别,count(*) 人数,a.stu_name from zxp a where a.money>300 group by a.id having a.stu_name like '姚%';#分组 分组之后还想加条件,使用having,having子句里面用到的字段必须出现在select后面(比如a.stu_name),如果group by 和order by 一起用的话,order by必须放在group by后面 select * from zxp group by sex,class;#按照多个字段来进行分组 select * ,count(*) from zxp group by sex,class; select * from user a,accounts b where a.id=b.user_id and a.username='niuhy';#多表关联 select a.username 用户名,b.money 账户余额.c,id 订单id from 'user' a,accounts b,'order' c where a.id=b.user_id and a.username='niuhy' and a.id=c.user_id; select a.username 用户名,b.money 账户余额 from 'user' a,acounts b,where a.id=b.user_id and username='nhy2'; select * from zxp a left join score b on a.id=b.s_id;#left join 会把左边表的所有数据都查出来,右边表有匹配的就查出来 select * from zxp a right join score b on a.id=b.s_id;#right join 会把右边表的所有数据都查出来,左边表有匹配的就查出来 select * from zxp a inner join score b on a.id=b.s_id;#inner join 两边表里都匹配的数据才查到 子查询:把一条sql的结果,作为另一条sql的条件 ; select * from score a where a.s_id=(select * from blk where stu_name='阿翔'); select a.grade 成绩,b.stu_name 学生名称,b.id 学号 from score a,(select id,stu_name from blk where stu_name='阿翔') b where a.s_id=b.id;#把子查询当成一个表 select a.stu_name,a.money,b.grade from blk a,score b where a.id=b.s_id and a.stu_name='阿翔'; select a.stu_name,a.money,b.grade from blk a,(select s_id,grade from score) b where a.id=b.s_id and stu_name='阿翔'; select * from blk limit 3;#限制取几行 select * from blk limit 1,5;#限定从第几条开始,再查询下面的x条,不包含开始的那一条 select id,stu_name from blk union select id,t_name from teacher;#union 用来合并两条select语句的结果,两条select语句字段的数量要一致,并且数据类型也要一致 union和union all 的区别就是一个会去重一个不会 update user set password=password('123456') where user ='root'#修改用户密码 存储过程: 批量的造数据 delimiter $$; #为了改结束符 create procedure big_data(num int) #代表要造多少条数据 begin declare i int; set i=0; while i<num do insert into blk (stu_name,money) values('hehe',20000); set i=i+1; end while; end $$; delimiter; select count(*) from blk; call big_data(500);#调用上面造数据的函数 delimiter $$; #为了改结束符 create procedure big_data1(num int) #代表要造多少条数据 begin declare i int; set i=0; while i<num do insert into blk (stu_name,money) values(concat('小明',i),20000);#concat拼接不同类型的数据:名字依次为,小明1,小明2。。。。 set i=i+1; end while; end $$; delimiter; call big_data1(500) 备份数据库: mysqldump -uroot -p123456 db > db.sql mysqldump -uroot -p123456 -A > all.sql 恢复数据: mysql -uroot -p123456 db < db.sql 3.环境搭建 1.下载依赖软件,安装好 2.获取源代码(打包) 根据语言的不同来看是否需要编译,打包 3.导入基础数据 4.修改配置文件 5.启动(tomcat,weblogic,jetty,resin,ws)