Mysql基础语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql基础语句相关的知识,希望对你有一定的参考价值。
mysql数据库这个表示的是一个软件,然后软件里面可以有好多database,这表示的就是库也可以认为是实例,然后每一个实
例里面有好多张表
sql语句结构
对表里面的数据进行操作动作:select insert update delete 查增改删
对实例数据库或是表进行操作动作:create drop alter show
进入数据库对库里面的实例进行查看
show databases;
进入某个实例
use mysql
查看实例里面的所有的表格
show tables;
查看当前所在哪个实例查看自己在哪里数据库
select database();
在系统中进行数据库的操作,主要用于shell脚本上的使用,直接在系统外面进行操作,而不需要登录到数据库里面进行操作
,主要用户shell脚本处,此处的e是execute的意思
mysql -e ‘show databases‘ -uroot -p123456
mysql -e ‘select * from mysql.user \G‘ -uroot -p123456
创建数据库
create database zyg; 创建了一个名为zyg的数据库名称,数据库取名称不能带特殊符号,如果非要取需要使用反引号进行
涵盖起来,如下所示
create database `zyg-1`;
show create database zyg;能够看到后台会带上反引号
select now(),user(),database(); 查看系统当前时间,当前哪个用户和当前所在的数据库
删除数据库
drop database `zyg-1`;
删除数据库的文件可以通过drop这个database来删除数据库,也可以通过查询配置文件datadir这个文件的目录,然后进入这
个目录,查找到这个目录所在文件的位置来对这个数据库进行删除,这样删除也是可以的,当然反过来对这个数据库进行备
份,我们也可以通过对这个文件的进行备份
rm -rf /data/zyg-1
通过if exists来判断库是否存在,然后在做删除,主要用于shell脚本处的使用,比如说执行某个删除数据库的脚本,当发
现这个数据库不存在,那个执行的时候就会打断执行过程,这个时候shell执行过程就中断了,那么通过if exists 这种条件
判断语句来进行执行的时候就不会出现日志,这样就不会将脚本进行打断
drop database if exists `zyg-1`; 这样执行脚本的时候就不会出现错误的日志信息将脚本打断
反过来也是一样的
create database if not exists HA ;
use HA 进入数据库,然后在数据库里面创建表,如下所示
create table student (id int(20),name char(40),age int(10)); 创建一个表,这几个值表示的是表的列,这里表示这
个表有三列
int默认补全是11,char默认补全是1
drop table student; 删除一个表
show tables; 查看这个库中所有的表格
desc student; 查看表结构
也可以使用下面的方式来查看表结构情况
explain mysql.user;
show columns from mysql.user;
show fields from mysql.user;
show columns from mysql.user like ‘%user‘;
like表示的是模糊匹配,下面的表示模糊匹配的不同用法
user:完整匹配user展示
%user:以user结尾的
user%:以user开头的
%user%:user可能会出现在任何地方
查看建表执行了哪些命令
show create table student \G 其实就是查看建表的一个过程
show create database HA \G 查看建库的一个过程
create table student2(id int(20),name char(40),age int)ENGINE=MyISAM DEFAULT CHARSET=utf8; 可以通过创建表格
的时候指定存储引擎和字符集
drop table student2; 删除student2这个表格
performance_schema 有预读功能,但是第一次进行读写的时候会消耗性能,所以一般都是建议关闭这个预读功能
mysql -usystem -p123456 -A 进入数据库的时候带上-A 这个选项将预读功能进行关闭
修改表使用alter
修改表名
语法:alter table 表名rename 新表名 这个表示的意思是将一个表改成另外一个名称
alter table class rename classes; 把class这个表名改成classes这个名字
修改表中字段名字
语法:alter table 表名 modify 要修改的字段名 要修改的类型
alter table classes modify bj int(10);
alter table classes modify xh int(15);
将字段原有的类型进行修改或是字段长度进行修改,也可以将原有的int改成char,或是将原有的int(10)改成int(20)等
等
修改表中的字段类型和字段名称
语法:alter table 表名 change 原字段名 新字段名 新字段类型
alter table classes change xh xuehao char(10);将classes这个表里面的xh列名改成学号,然后字段类型也进行修改为
char(10)
注:change和modify的区别
change能够对列名和列的类型进行更改
modify只能更改列的类型,不能更改列名
在表中添加字段
语法:alter table 表名 add 字段名 字段类型;
alter table classes add sex enum(‘M‘,‘W‘); 在表中的列新增一个sex的列,记住这里是新增列。这个新增列是默认新增
到最后一列的,如果需要将新增列不进行新增到最后一列,则使用下面的方式进行新增
alter table classes add uid int(10) first; 新增列到第一行
alter table classes add address char(40) after xuehao; 这个表示在学号的后面进行新增一列
在表中字段进行存储的顺序可以随意的进行存储,这个没有关系的,因为查询展示出来的字段可以不按照表里面的存储顺序
进行展示,这个展示完全是可以根据select查询的顺序来进行展示的
select stname,sex,age from classes;这样展示的话就是完全按照这个方式进行展示的,所以不用纠结于原表存储的一
个顺序的
删除表中字段
语法:alter table 表名 drop 字段名;
alter table classes drop address; 删除classes表中的address字段
drop 使用到删数据库,表,字段等等
针对表里面数据进行操作
插入字段的操作
语法:insert into 表名 values (字段1,字段2,字段3);
insert into classes values(2,1,‘zhangsan‘,‘M‘); 把下面的字段进行插入到classes表中,记住英文字母使用‘‘进行包
含,这个表示的是将所有的列都要有数值才能够进行插入数据进表格里面的,这样就需要将所有的数值都填满,直接就导致
了有的时候会有不合理的地方
insert into classes(bj,xs,sex) values(5,‘wangwu‘,‘M‘); 指定哪几列进行插入进表格中
这样没有指定的列则是按照默认的形式进行显示,如果默认的是null,那么显示的时候如果没有指定,那么就显示的是null
查询
select * from classes;这个是对整张表进行查询
select sx,sname from classes;这个是对单个列进行查询的
select name from classes;
这个查询的顺序可以自由组合,任意组合进行显示想要的查询结果,这个查询出来显示结果和表中存储的顺序没有关系。
删除
语法:delete from 表名 条件
delete from classes; 这个表示将classes这个表里面的所有数据进行删除,直接执行到表里面。
delete from classes where xs=‘lisi‘; 这个表示将classes表中xs字段是lisi的这条记录进行删除
mysql在执行delete的时候默认是直接进行删除的,不会出现一个commit提交在将表中的数据进行删除的,当然自动提交功能
是可以直接进行关闭
where语句修饰限定前面条件的范围
delete from classes where age is null;删除年龄为空的列
一般都是先通过限定条件进行查询出来,然后查看查询的结果是否是需要进行删除的项,如果查询结果是需要进行删除的项
,那么在通过将查询的结果进行删除就行,这样能够保证删除这种危险的动作不会误删除。
set autocommit=0 关闭自动提交功能,默认是打开的,需要将这个功能进行关闭才能设置成不自动进行提交
比如说
set autocommit=0;
delete from classes where id=1;
select * from classes;
通过查询中可以看到id=1的字段确实被删除了,但是可以通过rollback这个命令将删除的东西进行找回来
rollback;
select * from classes; 进行查看可以发现删除的东西又回来了。
如果确定了可以进行删除则
commit;
这样可以发现即使通过rollback也不能将数据进行找回来了,数据是直接全部丢失了。
更新记录
语法:update from 表名 条件
update classes set bj=9; 这个表示将classes表中的bj这个列的所有数据都改成9;
update classes set bj=10 where xs=‘zhangsan‘; 这个表示将classes中的xs=zhangsan的这行数据中的bj改成10;
update classes set bj=10,age=23 where xs=‘zhangsan‘; 这个表示一次性同时更改两个列的数据。
update classes set uid=3,sex=‘W‘ where xs=‘lisi‘; 通过set然后用,进行隔开,一次性对表中的两个列进行修改的结果
。
查询
select name,age from classes; 查询的时候需要看到什么就直接定义好需要查询的选项。
去重复查询DISTINCT
select distinct uid,xs from classes where sex=‘M‘;
使用AND 和 OR 进行多条件查询
select * from classes where uid>4 and uid<6; 表示查询uid=5的行,这个表示全部都满足的查进行查询出来
select * from classes where uid>4 or uid>6; 这个表示满足其中一个条件的就查询出来
mysql默认不区分大小写
select * from classes where xs=‘FF‘; 通过查询可以发现mysql默认是不区分大小写的一种查询;
通过是用binary 这个二进制来进行处理,这样就能够进行区分大小写了,将字符直接转换成ASCII编码来进行处理,这样得
出的这个编码是不一样的,这样就能够区分大小写
select * from classes where binary xs=‘FF‘;
select * from classes where binary xs=‘ff‘;
上面两个查询的结果是不一样的,主要是通过binary这个对查询的条件进行了装换
mysql查询排序
语法:select distinct 字段1,字段2 from 表名 order by 字段名;
默认为升序 asc
select * from classes order by bj; 查询出来的结果通过按照bj升序进行排序的方式进行排序,从小到大进行排序
select * from classes order by bj desc; 查询出来的结果通过降序的方式进行排序,从大到小进行排序
mysql命令帮助
语法:help + 下级的关键字
如
help show
help select
help delete
等等等。。。。
以上是关于Mysql基础语句的主要内容,如果未能解决你的问题,请参考以下文章