MySQL常用的操作命令
Client表示客户端 ,MySQL是客户端的工具
凡是能操作MySQL的地方都叫做客户端,例如shell
客户端的作用是帮助我们与MySQL建立连接
service表示服务端,最终数据储存在service
MySQL数据库服务器、数据库和表的关系:
步骤:登录数据库 => 创建数据库 => 切换到指定数据库 => 创建表 => 使用表
mysql –u用户名 –p密码(DOS窗口作为client)
关系:数据库服务器 => 数据库 => 表,从左到右为一对多的关系。
数据库最小单位:行
一、常用命令
登录MySQL
mysql -uroot -p
查看有哪些数据库(末尾分号务必加上),默认有4个数据库
show databases;
切换数据库(在使用某个数据库之前必须先切换)
use 数据库名;
查看某个数据库下的所有的表
show tables;
查看某张表中的所有数据(最简单的SQL)
select*from 表名;
如果数据较多的话,使用关键字limit来指定显示多少行
select*from 表名 limit n;
创建数据库
creat database (if not exists) 数据库名;
查看所创建的数据库
show create database 数据库名;
查看当前使用的数据库
select database();
创建表(创建表的时候建议借助其他的编辑器来编辑好,然后复制粘贴到mysql中)
语法:
create table 表名(
列名1 类型
,列名2 类型
,列名3 类型
...
)
举例:创建一张学生表(student),包含id、name、age
create table stu(
id int
,name varchar(20) //在MySQL中字符串类型用varchar(),需要加入参数
,age int
);
查看所创建的表
方法一:
show create table 表名;
方法二:
desc 表名;//查看的是表的内部结构
删除表
drop table 表名;
删除数据库
drop database (if exists) 数据库名;
Ctrl + U
清楚正在输入时光标左侧的所有指令
二、SQL分类
SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
DDL
数据定义语言 - Data Definition Language
用来定义数据库的对象,如数据表、视图、索引等
DML
数据处理语言 - Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update, insert, delete
DCL
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如 grant(授权),revoke,if…else,while,begin transaction
DQL
数据查询语言 – Data Query Language
select
1、数据定义语言DDL----操作数据库、表、视图的语句
操作数据库、表、视图的语句,包括创建、修改、删除
create database------创建库
create table---------创建表
alter table----------修改表
drop table-----------删除表
create view----------创建视图
alter view-----------修改视图
drop view------------删除视图
truncate table-------清空表
(1)创建、查看、删除数据库
创建数据库:
create database (if not exists) 数据库名;
查看有哪些数据库(默认有4个数据库):
show databases;
查看创建的数据库:
show create database 数据库名;
删除数据库:
drop database (if exists) 数据库名;
(2)使用数据库
切换数据库(在使用某个数据库之前必须先切换):
use 数据库名;
查看当前使用的数据库:
select database();
(3)mysql不允许修改数据库名!
只能删除重建
mysql数据类型
1、mysql基本数据类型
2、日期时间类型和字符串类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR
类型(字节) 大小范围 格式 用途
DATE 3 YYYY-MM-DD 日期值
TIME 3 HH:MM:SS 时间值或持续时间
YEAR 1 YYYY 年份值
DATETIME 8 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
字符串类型 主要是:varchar和char
在定义字符串的时候需要指定长度,例如:varchar(8),char(8)
varchar是可变的字符串,长度可以修改;
char是固定的字符串,一旦定义后,长度不可修改;
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
MySQL的基本语句
1、创建表的基本语句
create table if not exists `runoob_tbl1`(
`runoob_id` int unsigned auto_increment comment '主键id',
`runoob_title` varchar(100) not null default '' comment '标题',
`runoob_author` varchar(40) not null,
`submission_date` date,
primary key ( `runoob_id` )
)comment 'runoob' engine=innodb default charset=utf8;
unsigned:无符号的
auto_increment定义列为自增的属性,一般用于主键,数值会自动加1
如果不想字段(列)为null,可以设置字段的属性为not null,
设置后,如果操作数据表时如果输入该字段的数据为null,就会报错
default设置字段的默认值
primary key()关键字用于定义列为主键,您可以使用多列来定义主键,列间以逗号分隔
engine设置存储引擎,charset设置编码
comment对表或表的字段添加注释
2、修改表以及表中的数据
修改表的前提是已经创建了表
(1)修改表
修改表名:
rename table 原表名 to 新表名;
删除表:
truncate table 表名; //不可逆,谨慎!
(2)修改表中的数据
追加字段(列):
alter table 表名 add(字段名称 字段类型() not null default '');
举例:
alter table stu add(gender varchar(1) not null default '男');
修改字段名称:
alter table 表名 change 原字段名称 新字段名称 新字段类型();
修改字段类型的参数:
alter table 表名 modify 字段名称 字段类型(填想要修改的数值);
举例:
alter table stu modify age int(15);
删除字段:
alter table 表名 drop 字段名称;
3、修改字符集
修改表的编码:
alter table 表名 character set '新编码';
修改数据库的编码:
alter database 数据库名 character set '新编码';
举例:
alter database db1 character set 'utf8';
前面说到,当想要操作数据库中的表,必须先切换到该数据库,实际上不切换到该数据库,仍然有另外一种方式来操作数据库中的表:数据库名.表名
修改字段的编码:
alter table 数据库名.表名 modify column 原字段名 原字段类型() character set '新编码';
2、数据处理语言DML----操作表中的数据(插入、更新、删除)
数据在数据库中的存储方式
所谓创建表,其实我们在声明定义列,也叫字段。定义完成之后直接往表中插入数据即可
(1)插入----将数据插入表
insert into 表名(列名1,列名2,列名3..) values(列名1对应的值,列名2对应的值,列名3对应的值..);
insert into向表里插入字符类型,字符要加上单引号或者双引号
insert into一次只能插入一行数据,当再次插入第二行时,(列名1,列名2,列名3..)可省略不写
举例:
insert into stu(id,name,age) values(1,'张三',25);
insert into stu values(2,'李四',28);
注意:
(1)插入的数据应与字段的数据类型相同
(2)数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
(3)在values中列出的数据位置必须与被加入的列的排列位置相对应。
(4)字符和日期型数据应包含在单引号中
(5)插入空值时:不指定或者直接写insert into table value(null)
例如:
(2)更新----更新表中的数据
更新某字段下的的所有值(更新后的值都一样)
update 表名 set 表达式;
举例:
update stu set age=20; //更新后,所有的age的值都变成了20
更新指定的字段下的值,需要加个条件
update 表名 set 表达式1 where 表达式2;
举例:
update stu set age=22 where name='李四'; //将李四的年龄更新为22
update stu set age=age+2 where id<=3; //将id<=3的年龄都加2
注意:
(1)update语法可以用新值更新原有表行中的各列
(2)set子句指示要修改哪些列和要给予哪些值
(3)where子句指定应更新哪些行;如没有where子句,则更新所有的行
(3)删除----删除表中的数据
delete from 表名 where 表达式;
注意:
(1)如果不使用where子句,将删除表中所有数据
(2)delete语句不能删除某一列的值(可使用update)
(3)使用delete语句仅删除表内的数据,不删除表本身。如要删除表,使用drop table语句
(4)删除表中的所有数据也可使用truncate table语句
3、数据查询语言DQL
查询的语法:
select column_name,column_name
from table_name
[where clause]
[limit n][offect m]
注意:
查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件
SELECT 命令可以读取一条或者多条记录
可以使用星号(*)SELECT语句会返回表的所有字段数据
可以使用 WHERE 语句来包含任何条件。
可以使用 LIMIT 属性来设定返回的记录数。
可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
查看该表中的所有数据
显示n行:
select*from 表名 limit n;
从第n+1行开始显示,显示m行 (n,m]
select*from 表名 limit n m;
select*from 表名 limit n offset m;
从第m+1行开始显示,显示n行
查询特定的列对应的数据:
select 列名1,列名2.. from 表名 limit n;
想给列名1更换一个名字(取个别名)
select 列名1 as ‘新列名1’,列名2,.. from 表名 limit n;
想给列名1、列名2都更换一个名字(取个别名),第2个as可省略
select 列名1 as ‘新列名1’,列名2 ‘新列名2’,列名3,.. from 表名 limit n;
电脑中有一个sql文件,如何在mysql中使用
方法一步骤:
①将电脑已有的sql文件添加到Xftp中
[root@master ~]# pwd查询sql文件的绝对路径
②切换到mysql中,使用一个数据库
③执行该sql文件(末尾无分号):
source /sql文件的绝对路径/sql文件名
③执行完sql文件后,相当于将sql文件导入在了数据库中
这时候可以查看导入的sql文件了
查看该表中的所有数据(如果数据较多,使用limit控制显示的行数)
select*from 表名 limit 行数;
方法二步骤:
①将电脑已有的sql文件添加到Xftp中
②将sql文件导入mysql的数据库
[root@master ~]# mysql -uroot -p 数据库名 < sql文件名
③查看该表中的所有数据(如果数据较多,使用limit)
select*from 表名 limit 行数;
where子句----用于筛选过滤
比较运算符 | > < <= >= = <> != | 大于、小于、小于等于、大于等于、不等于、不等于 |
between ...and... | 显示在某一区间的值(左闭右闭) | |
in(set) | 显示在in列表中的值,例:in(100,200) | |
like '张_' | 模糊查询 使用% 和 _ | |
Is null | 判断是否为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(expection>10000); |
in(set)的用法
查询指定的数据
select*from 表名 where 列名 in(指定该列下的值);
举例:
查看id为112,113,114的所有数据
select*from stu where id in(112,113,114);
like '张_'的用法
查询姓张的所有人的信息
select*from stu where name like '张%';
查询姓张的所有人的信息(名字要是三个字就要用两个下划线'张__')
select*from stu where name like '张_';
Select语句
基本select语句
查询所有
select [distinct] * from table;
查询指定
select [distinct] column1, column2. column3.. from table;
distinct:去重。查询的结果去除重复的
加入distinct,会根据所给的字段进行比较,如果有一个字段下的信息不一样,则不会去重
注意:
select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。大数据查询一般不使用。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
在select语句中可使用表达式对查询的列进行运算
select *|{column1|expression, column2|expression,..} from table;
select *|{column1|expression, column2|expression,..} from table;
在select语句中可使用as语句:
给字段起的别名
select column as 别名 from 表名;
在表格中加入一列,字段为一百,数据全部为100
select id,name,age,100 '一百' from stu limit 10;
做判断、常量使用
再加入一列,字段为1=0,false为0,true为1
select id,name,age,100 '一百',1=0 from stu limit 10;