mysql的基本语法
Posted 幼儿园里的扛把子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的基本语法相关的知识,希望对你有一定的参考价值。
数据库是每位从事it行业必备的一项技能,这里简单的介绍下数据库的基本用法,至于下载安装卸载教程,网上一大片,这边就不做多余的介绍了。首先我们安装好数据库后这个时候有两种建库建表的方法。1.使用dos窗口操作数据库。2.使用可视化工具navica操作
一.使用dos窗口操作数据库
首先我们需要win+r数据cmd打开命令窗口,找到mysql安卓的路径,进入bin目录下
语法:cd C:\\Program File\\MySQL\\MySQL Server5.5\\bin
进入bin目录下后输入 mysql -hlocalhost -uroot -proot进入mysql命令,这个时候就可以操作数据库了
1.操作库
查看当前数据数据库 show databases;
创建数据库 create database 库名;
删除库 drop database 库名;
修改库名 库名不能直接修改,可以把原来库里面的表结构及数据导出来后在新建一个库,把数据导进去就可以了
使用库(进入库)use 库名;
2.操作表
查询库下面所有的表 show tables;
查询表数据 select *from 表名;
查看建表过程 show create table 表名;
修改表名 alter table 源表名 rename 修改后表名
删除表 drop table 表名
修改表中字段名 alter table newli change 原字段 修改后字段 类型;
删除表中字段名 alter table 表名 drop column 字段;
增加字段 alter table 表名 add 字段名 类型 ;(可与first,after一起用)
清空表数据 delete from 表名
查看表结构 describe 表名(或:show columns from 表名);
创建表 create table 表名 (表字段)
例:create table newli(
id int(10) primary key not null auto_increment,
name varchar(20) not null,
age int(3) not null default 18,
st enum(\'男\',\'女\')
)default charset=utf8;
创建和另一张表一样的结构:create table li as select *from lihongao where 1=0
增加数据 insert into 表名 values(1,\'李四\',45,1)或 insert into 表名 (name,age,st)values(’12‘,15,1);
清空表中所有数据 delete from 表名 ;
清空指定的表数据 delete from 表名 where 字段=’‘;
修改表中数据 update 表名 set 修改的字段1=’‘,修改的字段2=’‘ where 原字段=’‘;
查询表全部数据 select *from 表名
查询表字段数据 select 字段 from 表名
根据条件查血 select *from 表名 字段=’‘;
3.主键(主键只能添加,不能修改,要是修改需要把原先的主键删除在添加)
添加主键:alter table 表名 add primary key(字段名);
删除主键:alter table 表名 drop primary key;
添加双主键:alter table 表名 add primary key(字段1,字段2);
4.limit用法
查看查询出来的前N条信息:select *from 表名 limit n;
查询截取的一段信息:select *from 表名 limit n,m;(注意下标从0开始的,即截取的范围从n+1开始的后m条信息)
5.between and 用法
查询字段范围在n-m之间的信息:select *from 表名 where 字段 between n and m;(n,m为数字,查询的内容包括n和m);
6.substr用法
截取需要的内容:select substr(\'我是一个帅哥啦\',n,m) from dual;(下标从1开始,即截取的范围从n开始的后m条信息)
7.is null和is not null
查询字段为空的信息:select *from 表名 where 字段 is null;
查询字段不为空的信息:select *from 表名 where 字段 is not null;
8.not,and,or,in的用法
not表示相反的意思
如:查询id不等于1的信息:select *from 表名 where not id=1;
and表示和,左右两侧的条件需同时满足
如:查询id等于3且name等于li的信息:select *from 表名 where id=3 and name=‘li’;
or表示或,左右两侧的条件满足一个
如:查询id等于3或name等于li的信息:select *from 表名 where id=3 or name=‘li’;
in一个字段满足多个值
如:查询id等于2或者等于3再或者等于4.......:select *from 表名 where id in(值1,值2,值3...................)
9.order by .... desc和order by .... asc
desc表示按照某一字段进行倒序排列:select *from 表名 order by 字段 desc;
asc表示按照某一字段进行正序排列:select *from 表名 order by 字段 asc;
两者也可同时拥在一起:select *from 表名 order by 字段2 asc,字段2 desc;
10.timediff和time_to_sec
time_to_sec把时间换算成秒:select time_to_sec (\'15:35:45\') from dual;
timediff用于时间相减:select timediff(\'2021-12-30 15:30:00\',2021-12-30 15:29:00);
11.union和union all
union把两条查询的结果放在一起去重,前提两条查询语句查询出来的列数相等:
select id from student union select name from student
union all把两条查询的结果放在一起不去重,前提两条查询语句查询出来的列数相等:
select id from student union all select name from student
12.like
like表示查询有些结果中包括一些内容
如:查询学生中姓李的学生:select *from student where name like ‘李%’
如:查询学生中名字最后面一个字是刚的学生:select *from student where name like ‘%刚’
如:查询学生中包含明的学生:select *from student where name like ‘%李%’
如:查询学生即姓李,名字又包含刚的学生:select *from student where name like ‘李%’ and name like ‘%刚%’
如:查询学生即姓李或者名字又包含刚的学生:select *from student where name like ‘李%’ or name like ‘%刚%’
13.group by ....having和concat
group by表示分组having表示分组后的条件筛选:
select *from student group by name having name like \'%l%\' limit 1;
也可对两个字段进行分组:
select *from student group by name having name,id like \'%l%\' limit 1;
concat表示拼接的意思:
select concat(1,2)from dual;得到的结果为12
优先级:select from where group by having like order by limit
14.聚集函数min(),max(),count(),avg(),sum()
min(字段)表示最小值
max(字段)表示最大值
count(字段)表示个数总和
avg(字段)表示平均值
sum(字段)求和
16.子查询,一条查询出来的值作为另一条查询语句的条件
如:select *from 表名 where name=(select name from 表名 )
17.内连接(inner join)和外连接(left join,right join,full join)
inner join查询两个表中同时满足条件的信息:
select student.*,student1.* from student inner join student1 on student.scrove=student1.id;
left join以左边的表为基础,右表没有的数据置为空: select student.*,student1.* from student left join student1 on student.scrove=student1.id;
right join以右边的表为基础,左表没有的数据置为空: select student.*,student1.* from student right join student1 on student.scrove=student1.id;
full join查询两表中全部的数据:select student.*,student1.* from student full join student1 on student.scrove=student1.id;
18.存储过程(利用存储过程可以向数据库批量添加数据)
创建一个存储过程
create procedure a32(in a int,b int,c values(20))
begin
declare i int default 1;
while i<=num DO
insert into c1 (s_no,c_name) values (\'111\',\'数学\');
set i=i+1;
end WHILE;
end;
查询存储过程,即调用运行:call a32(负值)
删除存储过程:drop procedure if exists a32
查看建的全部存储:show procedure status;
19.视图(用来查询)
创建视图:create view a as select *from 表名
修改视图:create view a as ..................
查看视图:select *from 视图名;
清空视图 delete from 视图名;
删除视图:drop view 视图名;
查看所有的view:show tables;
20.存储引擎(innodb,MyISAM)
innodb引擎建表默认是:事务(原子性,隔离性,持久性,一致性)安全的储存引擎,执行insert和update,应该使用innodb,支持外键,主键范围大是myisam2倍,不支持索引
myisam:不支持事务,外键,支持全文索引
修改表存储引擎:alter table 表名 engine=‘MyISAM’(注意大小写)
21.if,ifnull和case when then else end用法
if:若id=1时查询结果为man,若不等于1时查询结果为nv: select if(id=1,\'man\',\'nv\') from student;
ifnull:若name为null的话,查询出来的结果显示nv: select ifnull(name,\'nv\') from student;
case when then else end:
select (case when scrove<2 then \'你咋是1\' when scrove<5 then \'你在2和5之间\' else \'最后其他\' end) from student;
22.索引(普通,唯一,主键)
创建普通索引:create index username on mytable(username);
创建唯一索引:create unique index age on mytable(age)唯一索引和主键索引与普通索引的区别是唯一,不重复。但是唯一索引可以有空值
创建主键索引:alter table mytable add primary key(id)不可以有空值
删除索引:drop index 索引名字 on 索引的表
多个字段创建一个唯一索引:alter table lihongao add unique index 索引名(name,age)
查看索引:show index from mytable
以上是关于mysql的基本语法的主要内容,如果未能解决你的问题,请参考以下文章