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的基本语法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL基本语法

mysql基本语法

MySQL笔记--MySQL基本语法和查询

Mysql之索引的基本概念语法

MySql数据库基本介绍和基本语法

mysql基本语法