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)