MySQL数据库常见操作

新手看了沉默,老手看了流泪,mysql竟然......

虽然有可视化的工具,但是看着这些熟悉的操作还是会有一丝奇异的感觉

一、数据库基本操作

net start mysql                                  -----开始MySQL服务
mysql -uroot -p+自己设置的密码      -----登录
mysql -uroot -p                                -----隐秘登录,回车后再输入密码
ctrl+z                                                -----退回到原目录
net stop mysql                                  -----退出MySQL服务
select current_user;                             -----查询当前的登录用户
select now();                                         -----查询当前的时间
select version();                                 -----检测MySQL安装版本


二、数据库库级相关操作
show databases;                         -----显示所有的数据库
create database 数据库名;             -----新建一个数据库(不区分大小写)
drop database 数据库名;                        -----删除一个数据库
drop database if exists 数据库名;          -----如果该库存在,则删除它
use 数据库名;                                 -----进入该库



三、数据库表级相关操作

1)建表
show tables;                                 -----显示该数据库里的所有的表
create table 表名(
        列名1 数据类型(位数) [完整性约束条件],
        列名2 数据类型(位数) [完整性约束条件],
        列名n 数据类型(位数) [完整性约束条件]
        )auto_increment=自增初始值;           
                                                     -----创建表,并且开始自增(需要在某一列设置自增的约束条件,再在分号前写auto_increment=初始值)
desc 表名;                                        -----查看该表
drop table if exists 表名;                        -----如果该表存在,则删除它
create table 表名1(tree int(3) references 表名2(two),
                                           -----使表名2里的two列与表名1里的tree列产生关联(外键约束)
PS:stuid char(8) not null  ,
        foreign key(stuid) REFERENCES student(stuid),


2)插入数据

【values后面括号里的内容只是为了告诉你字符串要用引号 -_-\】
insert into 表名(列名一,列名二,,,,,,列名n)values(列名一的int类型的值,"列名二的varchar类型的值",,,列表n的int类型的值);
                                         ---------单条插入


insert into 表名(列名1,列名2,,,,,,列名n)values(列名一下的int类型的值,"列名二的varchar类型的值",,,列表n的int类型的值),(列名一下的int类型的值,"列名二的varchar类型的值",,,列表n的int类型的值);
                                       ---------多条插入


insert into 表名 values(列名一下的int类型的值,"列名二的varchar类型的值",,,列表n的int类型的值);
                                        ---------省略列名插入


insert into 表名 values(列名一的int类型的值,"列名二的varchar类型的值",,,列表n的int类型的值),(列名一下的int类型的值,"列名二的varchar类型"的值,...,...,列表n的int类型的值);
                                       ---------多条插入


3)修改
update 表名 set 需修改的数据所在的列名(x轴)="新数据(这里是varchar类型的)",需修改的数据所在的列名(x轴)="新数据(这里是varchar类型的)" where 数据所属列名(y轴)="数据所属者"
                                        -----修改表内数据(虽然我一般不用这个)
PS:若无没有标注y轴,则x轴全改
       update table set name="张三",age=98 where id=3;
       修改table表里id列为3那一行的name列的数据为张三,id列的数据为98
update 表名 列1=新的值,列2=新的值,列3=新的值 where 条件;
                                        -----修改符合条件的,列1,列2,列3的值其实和上面那个很像只是没有set)


4)删除

delete from 表名 where 列名=需删除的数据的条件;
                                                                -----删除符合该条件的数据
delete from 表名;                            -----删除该表内所有数据
PS:delete from table where id=123;
       删除table表里id列为123的数据


5)查询
【where后面跟条件,多个条件可用and(和)或者or(或者)间隔,*是无差别查询,可用具体的列名替换】
select * from 表名;                                           -----查看表内数据信息
select 列名 from 表名;                                     -----查看表内该列的数据信息
select 列名1,列名2 from 表名;                      -----查看表内这几列的数据信息

select 列名1 as 别名1,列名2 as 别名2 from 表名;        -----给表内列名起别名
select 列名1 "别名1",列名2 "别名2" form 表名                   -----同上,法二
ps:select name as 姓名 form表名;
"姓名"就代表了name,具有同样的作用

select * form 表名 as 别名;                                   -----给表起别名
select 表名1.列名1,表名1.列名2 form 表名1 as 该表的别名    -----查看哪两个列的信息(as可以省略)
select 列名1*列名2 form 表名;                    -----查看两个列相乘后的信息
select 列名1*列名2 as 别名 form 表名;            -----查看两个列相乘后的信息并用别名显示
select 列名1*列名2 as 别名,列名3 as 别名3 form 表名;    -----查看两个列相乘后的信息并用别名显示,并查看列名3所代表的的列的信息,列名3用别名3显示


5.1)条件查询-分组查询-排序
select * from 表名 where 列名和条件;                -----查看表内符合条件的数据
select * from 表名 where 列名 between 值一 and 值二;    -----查看表内列名里由值一~值二的数据(大于值一且小于值二)
select * from 表名 order by 列名 desc;            -----查看表内按  列名  的信息降序排序(desc),升序(asc)
select * from 表名 limit 数字;                        -----查看前 数字 条信息
select * from 表名 limit 数字1,数字2;            -----从 数字1 之后开始查看,共查看  数字2  条数据
select * from 表名 order by 列名 desc limit 数字;        -----以降序(升序asc)排序后前 数字 条数据
select distinct 列名 from 表名;                            -----不重复的查看列名内的信息
select * from 表名 where 列名 like '%三%';        -----表内该列带有三的数据
select * from 表名 where 列名 like '_三%';        -----表内该列第二位为三的数据(一个下划线)
select * from 表名 where 列名 like '___三%';        -----表内该列第四位为三的数据(3个下划线)
select * from 表名 where 列名 like '%三_';        -----表内该列倒数第二位为三的数据
select * from 表名 where 列名 like '_三_';        -----表内该列第二位为三的数据且只有3位
【"%"表示通配符     "_"表示占位符】
select sum(列名) from 表名;            -----该表该列求和
          avg()                                                求平均值
          min()                                              求最小值
         max()                                                求最大值
        count()                                求该列数据的总数(空值不计算)
select * from 表名 group by 列名1;                    -----显示该表以该列进行分组
select 列名1 from 表名 group by 列名1;            -----显示该表该列的分组(相同数据分为一组)
select * from 表名 group by 列名1 having 条件;    -----显示该表以列名1分组后符合条件的组    
select 列名1 from 表名 group by 列名1 having count(列名2)>数字1;

                                    ------显示该表列1 分组后符合组内信息条大于数字1的条件数据的组


5.2)多表联查

SELECT * FROM 表1
LEFT JOIN 表2 ON 连接的关系
LEFT JOIN 表3 ON 连接的关系;
select  * from 表1 inner join  表2 on 表1.外键连接的列名=表2.外联;        -----表内连接查询(查询交叉的部分)
select  * from 表1 left join  表2 on 表1.外键连接的列名=表2.外联;        -----表左外连接查询(以表1为主体,表1有的全显示)
select  列1,列2,列3,列n  from 表1 left join  表2 on 表1.外键连接的列名表2.外联;-----显示连接后的列1,列2,列3,列n,的数据
PS:如果有一个列名在两个表里都有,语法为表名.该列名,表名可以用别名
select  * from 表1 right  join  表2 on 表1.外键连接的列名=表2.外联;        -----表右外连接查询(以表2为主体,表2有的全显示)
select * form 表1 cross join 表2;                                   -----表交叉连接,表1数据分别与表2数据匹配
PS:表1有3条数据,表2有6条数据,那么交叉连接后有18条数据
【其实用where也能达到该效果】
select * from 表1 ,表2  where 表1.列名=表2.列名;(数据有联系的列名)【比较喜欢用这个】


6)函数
6.1)数值型函数
abs 绝对值
sqrt  求二次方根
mod  求余数
ceil(x)和ceiling   功能相同都是返回不小于参数的最小整数,即向上取整(变大)
floor  向下取整,返回值转化为一个bigint(变小)
rand  生成一个0~1之间的随机数,传入整数参数,用来产生重复序列
round(x,y)  数值截取,返回数值x截取y位小数的结果(四舍五入)
truncate(x,y)数值截取,返回数值x截取y位小数的结果(不四舍五入)
sign 返回参数的符号
pow和power  所传参数的次方的结果值
sin 求正弦值
asin  求反正弦值
cos
acos
...

...


6.2)字符串函数

length  计算字符串长度函数,返回字符串的字节长度
concat(stri,str2,str3...)   合并字符串函数,返回结果为连接参数产生的字符串参数可以将多个字符串合并成一个
insert   替换字符串函数
lower(x) 将字符串中的字母转换成小写
upper(x)  将字符串中的字母转换成大写
left  从左侧截取字符串,返回字符串左侧的若干个字符
right  从右侧截取字符串,返回字符串右侧的若干个字符
trim   删除字符串左右两侧的空格
replace   字符串替换函数,返回替换后的新字符串
substr和substring    截取字符串,返回从指定位置开始指定长度的字符
reverse(x)   字符串反转(逆序)函数,返回与原来字符串顺序相反的字符串


6.3)日期函数(一些常用的)
curdate()  返回当前日期(只有年月日)
now()  返回当前日期时间
year(date)   从日期中选择出年份
date_format(date,"%Y-%m-%d")   把日期格式改为年-月-日的格式(引号内可换)


6.4)流程控制函数
select if(id=2,true,flase) from table  where name="小明";
if(v,t,f)  若v真则返回t,否则返回f
ifnull(v1,v2)  若v1不为空返回v1,否则返回v2
case when v then v1 end  如果v为真返回v1


6.5)数据库类函数
insert into books(bname,author) values (md5("西游记"),"吴承恩");插入一条 西游记 为加密的数据
database()  返回当前数据库名称
version()   返回当前数据库版本
md5(s)  返回md5加密值


7)MySQL视图(总)
create view ABC
as
select  student.stuid 学生号,name 姓名,sex 性别 from student,course, where student.stuid=chocourse.stuid;
建立一个名为ABC的视图,内容为student表和chocourse表里的student.stuid,name,sex列,并用学生号,姓名,性别显示

create view 视图名            -----建立视图
as
select 语句            -----里面是具体的内容

个人理解
【就是建立一个表,表的内容是刚刚  select语句   的内容,用法与表相同,但不是一个概念】


alter view 视图名            -----修改视图要三行
as 
select 语句            -----修改后的语句
查询语法和表相同
drop view 视图名            -----删除视图
drop table if exists 视图名


【以下内容好像很少用到】

看看就行可能有错的

8)MySQL储存过程
delimiter 新的结尾标识符        -----修改结尾的标识符(默认是;)
create procedure 储存名称(参数名称)       -----创建若无参无返()内为空,有参无返就是int,有返无参out;
begin 储存操作的语句块            -----比如说这个就是以;结尾的
end 新的结尾标识符            -----其他的语句还需要以;结尾
call 储存名称            -----调用(这个也是;)
PS:
有参无返
delimiter //
create procedure asd(int www float,int eee float)    ---创建一个 名为asd的储存过程
begin
select * from books where price between www and eee;
end//
call asd(23,33);            -----调用有参数的储存()里的是键入的参数值
无参有返
delimiter //
create procedure asd(out www float)
select avg(列名) into www from 表名;    -----求该列的平均值(可以看出,这个并不是直接用的select语句)
end//
call asd(@www);            -----调用
select @www;            -----查看调用的结果

show procedure status;        -----查看所有的储存过程
drop procedure 储存名;        -----删除
drop procedure if exists 储存名;    -----如果存在就删除
参数名称
in 给参数传入值,定义的参数就得到了值
in 参数名+表中字段的类型
out   返回值
out 参数名+要返回的数据的类型

9)触发器
create trigger 触发器名称 {befor|after}{insert|update|delete} on 表名  ----befor,语句块执行之前,after之后;insert插入的时候;update更新更新的时候;delete删除的时候
for each row
begin
  执行的语句块
end
PS:
创建insert触发器。当在card表中新增加一个借阅用户的时候,显示“新增用户成功”。
DELIMITER //
create trigger tri_ins_card  after insert  on card
for each row
begin
    select "新增用户成功" into @result;
end

insert into card (name,class)values("张三","幼儿园大班");
select @result;        ---查看result(看到的应该是“新增用户成功”)

show trigger;----查看
drop                 -----删除【手懒不想打了】
----


10)引擎

show engines;        ------查看引擎
show create table 表名;    ------查看当前表的存储引擎
alter table 表名 engines=新的存储引擎;    -----修改当前表的存储引擎
                -----创建表的时候指定引擎
create table 表名(
        列名1 数据类型(位数) [完整性约束条件],
        列名2 数据类型(位数) [完整性约束条件],
        列名n 数据类型(位数) [完整性约束条件]
        )engines=innodb
                     -----创建表,并且以innodb引擎存储

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值