一、客户端命令
1.1 mysql接口自带的命令
\h 或 help 或? 查看帮助\G 格式化查看数据(key:value)\T 或 tee 记录日志\c(5.7可以ctrl+c) 结束命令\s 或 status 查看状态信息\. 或 source 导入SQL数据\u或 use 使用数据库\q 或 exit 或 quit 退出
help命令的使用
mysql> help statusmysql> help show
source命令的使用
#在MySQL中处理输入文件:#如果这些文件包含SQL语句则称为:#1.脚本文件#2.批处理文件mysql> SOURCE /data/mysql/world.sql#或者使用非交互式mysql</data/mysql/world.sql
1.2 mysqladmin命令的使用
#查看MySQL存活状态[root@db01 ~]# mysqladmin -uroot -p123 ping#查看MySQL状态信息[root@db01 ~]# mysqladmin -uroot -p123 status#关闭MySQL进程[root@db01 ~]# mysqladmin -uroot -p123 shutdown#查看MySQL参数[root@db01 ~]# mysqladmin -uroot -p123 variables#删除数据库[root@db01 ~]# mysqladmin -uroot -p123 drop wyf#创建数据库[root@db01 ~]# mysqladmin -uroot -p123 create wyf#刷新日志[root@db01 ~]# mysqladmin -uroot -p123 flush-log#刷新缓存主机,重载授权表[root@db01 ~]# mysqladmin -uroot -p123 reload#修改口令[root@db01 ~]# mysqladmin -uroot -p123 password
二、SQL语句
2.1 SQL介绍
结构化查询语言5.7 以后符合SQL92严格模式通过sql_mode参数来控制
2.2 常用SQL分类
DDL:数据定义语言DCL:数据控制语言DML:数据操作语言DQL:数据的查询语言
2.3 DDL:数据定义语言
2.3.1 库对象
库名字、库属性
创建库:create database
#创建oldboy数据库mysql> create database oldboy;#查看数据库mysql> show databases;#查看oldboy的创建语句(DQL)mysql> show create database oldboy;#查看创建数据库语句帮助mysql> help create database#创建oldboy数据库添加属性mysql> create database testa charset utf8;
查看有那些库 show databases
mysql> show databases;
删库:drop database
#删除oldboy数据库mysql> drop database oldboy;
修改定义库:alter database
#修改oldboy数据库属性mysql> alter database oldboy charset utf8;#查看oldboy的创建语句(DQL)mysql> show create database oldboy;
查询所在库
#查询当前所在库select database (DQL)mysql>select database();
2.3.2 表对象
列名、列属性、约束
数据类型&数据属性
数据类型
int: 整数 -231 ~ 231 -1
varchar:字符类型 (变长)
char: 字符类型 (定长)
tinyint: 整数 -128 ~ 128
enum: 枚举类型
datetime: 时间类型 年月日时分秒
数据属性
not null: 非空
primary key: 主键(唯一且非空的)
auto_increment: 自增(此列必须是:primary key或者unique key)
unique key: 单独的唯一的
default: 默认值
unsigned: 非负数
comment: 注释
创建表:create table
#查看创建表语句帮助mysql> help create table#创建表mysql> create table student(sid INT,sname VARCHAR(20),sage TINYINT,sgender ENUM('m','f'),cometime DATETIME);
##创建表加其他属性##mysql> create table student(sid INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ‘学号’,sname VARCHAR(20) NOT NULL COMMENT ‘学生姓名’,sage TINYINT UNSIGNED COMMENT ‘学生年龄’,sgender ENUM('m','f') NOT NULL DEFAULT ‘m’ COMMENT ‘学生性别’,cometime DATETIME NOT NULL COMMENT ‘入学时间’)chatset utf8 engine innodb;##查看建表语句##mysql> show create table student;##查看表##mysql> show tables;##查看表中列的定义信息##mysql> desc student;
查看表中列的定义信息 desc
mysql> desc student;
删除表 drop table
#删除表mysql> drop table student;
修改表定义:alter table
#修改表名mysql> alter table student rename stu;#添加列和列定义mysql> alter table stu add age int;#添加多个列mysql> alter table stu add test varchar(20),add qq int;#指定位置进行添加列(表首)mysql> alter table stu add classid varchar(20) first;#指定位置进行添加列(指定列)mysql> alter table stu add phone int after age;#删除指定的列及定义mysql> alter table stu drop qq;#修改列及定义(列属性)mysql> alter table stu modify sid varchar(20);#修改列及定义(列名及属性)mysql> alter table stu change phone telphone char(20);
2.4 DCL:数据控制语言
针对权限进行控制
授权 grant
#授权root@10.0.0.51用户所有权限(非超级管理员)mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123';#怎么去授权一个超级管理员呢?mysql> grant all on *.* to root@'10.0.0.51' identified by 'oldboy123' with grant option;#其他参数(扩展)max_queries_per_hour:一个用户每小时可发出的查询数量max_updates_per_hour:一个用户每小时可发出的更新数量max_connections_per_hour:一个用户每小时可连接到服务器的次数max_user_connections:允许同时连接数量
回收权限 revoke
#查看权限mysql> show grants for root@'10.0.0.51';#收回select权限mysql> revoke select on *.* from root@'10.0.0.51';
2.4 DML:数据操作语言
插入表数据 insert
#基础用法,插入数据mysql> insert into stu values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);#规范用法,插入数据mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);#插入多条数据mysql> insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456),('linux02',2,NOW(),'zhangsi',21,'f',NOW(),111,1234567);
修改表数据 update
#不规范mysql> update student set sgender='f';#规范update修改mysql> update student set sgender='f' where sid=1;#如果非要全表修改mysql> update student set sgender='f' where 1=1;
删除表数据 delete
#不规范mysql> delete from student;#规范删除(危险)mysql> delete from student where sid=3;#DDL删除表mysql> truncate table student;
伪删除 update
使用update代替delete
1)额外添加一个状态列
mysql> alter table student add status enum(1,0) default 1;
2)使用update
mysql> update student set status='0' where sid=1;
3)应用查询存在的数据
mysql> select * from student where status=1;
2.5 DQL:数据查询语言
基础查询 select
#常用用法mysql> select countrycode,district from city;#查询单列mysql> select countrycode from city;#行级查询mysql>select countrycode,district from city limit 2;mysql> select id,countrycode,district from city limit 2,2;#条件查询mysql> select name,population from city where countrycode='CHN';#多条件查询mysql> select name,population from city where countrycode='CHN' and district='heilongjiang';#模糊查询mysql> select name,population,countrycode from city where countrycode like '%H%' limit 10;#排序查询(顺序)mysql> select id,name,population,countrycode from city order by countrycode limit 10;#排序查询(倒叙)mysql> select id,name,population,countrycode from city order by countrycode desc limit 10;#范围查询(>,<,>=,<=,<>)mysql> select * from city where population>=1410000;#范围查询OR语句mysql> select * from city where countrycode='CHN' or countrycode='USA';#范围查询IN语句mysql> select * from city where countrycode in ('CHN','USA');
高级用法 select
例:根据两张表的内容查出张三的成绩
select t1.sname,t2.mark from t1,t2 where t1.sid=t2.sid and t1.sname=’zhang3’;
1.1传统连接(只能内连接,只能取交集)
#世界上小于100人的人口城市是哪个国家的?select city.name,city.countrycode,country.namefrom city,countrywhere city.countrycode=country.codeand city.population<100;
1.2 NATURAL JOIN(自连接的表要有共同的列名字)
SELECT city.name,city.countrycode ,countrylanguage.language ,city.populationFROM city NATURAL JOIN countrylanguageWHERE population > 1000000ORDER BY population;
1.3企业中多表连接查询(内连接)
select city.name,city.countrycode,country.namefrom city join country on city.countrycode=country.codewhere city.population<100;
建议:使用join语句时,小表在前,大表在后。
1.4外连接
select city.name,city.countrycode,country.namefrom city left join countryon city.countrycode=country.codeand city.population<100;
1.5 UNION(合并查询)
#范围查询OR语句mysql> select * from city where countrycode='CHN' or countrycode='USA';#范围查询IN语句mysql> select * from city where countrycode in ('CHN','USA');替换为:mysql> select * from city where countrycode='CHN'union allselect * from city where countrycode='USA' limit 10
union:去重复合并
union all :不去重复
使用情况:union<union all
