mysql常用操作

操作环境为windows下mysql57

windows下mysql开启与关闭:

net start mysql57
net stop mysql57

卸载与安装服务:


卸载服务
	mysqld –remove
安装
	mysql –install

登录与退出:

mysql -uroot -p

exit; quit;  \q

显示数据库

show databases;
use database;
show tables;

查看表结构

desc table;


创建数据库:

create databases test;

查看建表语句:

show create table t_proj_type;

创建表:

create table teacher(
	id int(10) not null unique auto_increment,
	name varchar(20) not null,
	primary key (id)
)engine=innodb;


create table test(
	id int not null auto_increment,
	username varchar(20) not null,
	userpasswd varchar(32) not null,
	primary key (id)
)engine=innodb;

查看当前使用的是哪个数据库


select database();

查看某个数据库下的所有表

show tables from mysql;  /*mysql为数据库名*/

#创建表:通过其他表来创建
内容与原表一致,但是没有主键约束

create table if not exists stu2 as select * from stu;

#通过like方式创建后与原表结构一致,没有原表数据,有主键约束

create table stu3 like stu;

#查看警告信息

show warnings;

查看某个表建表语句

show create table stu3;

查看表结构

desc stu3;
show columns from stu3;

#指定默认值 default

查看帮助信息

help show columns;
help create table;

建表后添加列:

alter table stu3 add column address varchar(40) null default '' comment '地址';

删除列

alter table stu3 drop column address;

添加到最前面

alter tablestu3 add column a_id int first;

添加到class列后面

alter tablestu3 add column test int after class;

#修改列的属性

alter table stu3 modify address varchar(50) not null;

#修改列名

alter table stu3 change address addr  varchar(50) not null;

#修改表名

alter table stu3 rename  to stu4;

#删除表

drop table atu3;

插入数据

insert into stu(name,age) values('赵六',32);
insert into stu(name,age) values('赵六',32),('wangwu',32);

#查看最近成功插入的一条数据的id

select last_insert_id() as id;

#修改数据,如果没有条件,修改的就是全部数据

update stu set age='1',name='11' where id=1;

#删除数据

delete from stu where id=7;

#删除全部数据

delete from stu;
/*比delete更高效,truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。*/
/*不能有where子句,外键*/
truncate stu;  

#排序
desc逆序,asc顺序,默认是asc

select * from stu order by id desc;

#字符串排序是根据字典顺序排序

#组合排序,先按照name,name相同时再按照age

select * from stu order by name asc,age asc;

#查询

select count(*) as total from stu;
select max(age) from stu;

select id,count(*) from stu group by age;

select id,avg(age) from stu group by age;

select id,age from stu group by age having id<10;

#过滤 不等于:<>  >= <=

select * from stu where id <> 10;

#多个条件用and连接

select * from stu where age='10' and id='10';

select * from stu where test is null;  /*不能写成=null*/

select * from stu where test is not null; /*不为空*/

#in 在...范围之内的数据


select * from stu where id in (1,2,3);


#not in 不在...范围之内的数据
#通配符 like ,%匹配任意个字符
#参考:https://www.w3cschool.cn/mysql/mysql-jlvd2oyc.html

#正则匹配

select * from stu where name like '%张%';
select * from stu where name like '张_';

#"_"匹配单个字符,"\_" 匹配"_"

#连接符  concat,相当于字符串连接


select concat(name,age) from stu;
select concat('姓名:',name,'年龄:',age) as 学生信息 from stu;

#as表示别名

#运算符 + - * %

select id+age from stu;

#聚合函数

max,min,avg,count,sum

select min(age) from stu;  /*不会计算null,计算的是有值的最小值*/

#分页

select * from stu limit 0,5;  /*从5开始获取5条*/

#去重查询

select distinct name from stu;

#区间查询

select * from stu where id between 1 and 10;
select * from stu where id>1 and id<10;

#多条件查询 and  or

select * from stu where id >4 or age>20;
select * from stu where id >4 and age>20;
select * from stu where (age=21 or age=40) and id>4;


#in 和or区别:所在列有索引或主键时,in和or没有区别,执行的事件几乎一样
#如果查询的列没有索引,随着查询的数据量越多,in的效率不会有明显下降,or会随着数据量增大效率受影响较大

#多表关联查询


create table dingdan(
	id int not null auto_increment,
    num int,
    s_id int,
    dingdan_desc varchar(50),
    primary key(id)
)engine=innodb;

show tables;
desc dingdan;



select name,num,dingdan_desc 
from dingdan d,stu s 
where d.s_id=s.id;

# 用查询结果集作为关联表


create table contect(
	id int(10) auto_increment,
    s_id int(10) default null,
    tel varchar(20) default null,
    address varchar(20) default null,
    primary key(id)

)engine=innodb auto_increment=3 default charset=utf8;


create table dingdan(
	id int(10)  auto_increment,
    num int(11) default null,
    s_id int(11) default null,
    `desc` varchar(50) default null,
    primary key(id)

)engine=innodb auto_increment=4 default charset=utf8;



SELECT b.name,c.tel,c.address,b.num,b.`desc`
FROM contect c,
(SELECT s.name,d.num,d.`desc`,s.id
FROM dingdan d, stu s 
WHERE d.s_id = s.id) b
WHERE c.`s_id` = b.id;

写建表语句时出现mysql的关键字报错,加上``
如create table `desc`

 

#日期函数

select now();
select date_format(now(),'%y年%m月%d日 %H时:%i分%s秒');

#自定义函数:简称UDF 对mysql扩展的一种途径
#参数:0个或多个
#返回值只能有一个

#不带参数  returns:返回值+返回值类型

create function ftime() returns varchar(30)
	return date_format(now(),'%y年%m月%d日 %H时:%i分%s秒');

select ftime();  /*调用*/

#删除函数

drop function if exists ftime;


#创建带参数函数

create function favg(a int unsigned,b int unsigned) returns float(10,2)
	return (a+b)/2;
    
    
select favg(2,3);  /*调用*/
select favg(2,-3);  /*报错*/
#unsigned代表无符号

#改变执行sql语句结尾符号
#将delimiter语句与创建函数的语句一起执行

delimiter ..  /*MYSQL的结束符设置为..*/
CREATE FUNCTION addStu (username VARCHAR(20))
RETURNS int UNSIGNED
BEGIN
insert stu(name) values(username);
return LAST_INSERT_ID();
END..
delimiter ;  /*使用delimiter之后再改为;*/

/*
“DELIMITER //”语句的作用是将MYSQL的结束符设置为//,因为MYSQL默认的语句结束符为分号;,
为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER 改变存储过程的结束符,并以“END //”结束存储过程。
*/
alter table 表名 auto_increment=1;  /*重置id自增*/


#存储过程
#mysql执行命令的流程:
#sql命令 mysql引擎 分析是否正确 语法正确-->可执行命令 执行,返回结果给客户端

#IN 表示该参数的值必须在调用存储过程时指定
#OUT表示该参数可以被存储过程改变,并且可以返回
#INOUT 表示该参数在调用时指定,并且可以被改变和返回


#创建不带参数的存储过程

create procedure get_version()
	select version();

    
call get_version;  /*调用存储过程使用call,call get_version()也可以*/
/*如果存储过程没有参数,可以不写括号*/


delimiter ..
create procedure delById(IN id int unsigned) 
begin
	delete from stu where id=id;  /*这样写有问题,id都被换成了传入的值,sql注入,如40=40*/
end..
delimiter ;

#修改

delimiter ..
create procedure delById(IN a_id int unsigned) 
begin
	delete from stu where id=a_id; /*或者写成stu.id=id*/
end..
delimiter ;


call delById(3);  /*调用*/

#有返回值

delimiter ..
create procedure deleteReturnNum(IN s_id int unsigned,OUT s_num int unsigned)
begin
	delete from stu where id=s_id;
    select count(id) from stu into s_num;   /*使用into赋值给返回值*/
end..
delimiter ;

call deleteReturnNum(4,@num);  /*@+变量名接收返回值*/
select @num;  /*显示返回值*/

扩展阅读:https://www.cnblogs.com/gavin110-lgy/p/5772577.html


select	row_count();  /*受影响的行数*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值