SQL语句
mysql版本:针对mysql-5.6.36 版本
目录1.1 常用命令-查看 21.2 登录mysql 21.2.1 修改密码 21.2.2 忘记密码-怎么办 31.3 授权grant 31.3.1 grant 31.4 好用功能、快捷键 41.4.1 mysql客户端接口自带功能 41.5 增删改查-数据库SQL命令详解 51.5.1 数据库 51.5.2 表-table 51.5.3 插入、更新数据 71.5.4 查看数据-select 81.6 复杂查询 81.6.1 ORDER BY子句 81.6.2 LIMIT子句 81.6.3 子查询 91.6.4 连接查询 9
1.1 常用命令
# 查看数据库mysql> show databases;show databases like '%pres%'; #模糊查询# 查看表mysql> use xzymysql> show tables;#查看权限show grants for oldboy@'10.0.0.%';# 查看列mysql> use xzymysql> desc test;
1.2 登录mysql
常见的特定于客户机的连接选项-u或--host= -p -h 或--host= --protocol= -P 或--port= -S 或--socket=
1.2.1 修改密码
[root@db02 ~]# mysqladmin -uroot -p123 password 123456[root@db02 ~]# mysql -uroot -p123456mysql>
1.2.2 忘记密码-怎么办
#开启mysql (跳过授权表)#--skip-grant-tables 跳过授权表 --skip-networking禁止网络登录-即本地登录/application/mysql/bin/mysqld_safe --skip-grant-tables --skip-networking &#进入MySQL修改mysql.user表的内容mysql #直接登录(无需密码)#修改mysql.user表内容mysql> update mysql.user set password=PASSWORD('666666') where user='root' and host='localhost';mysql> flush privileges;#quit 退出即可用新密码666666登录注意:5.7版本的不同update mysql.user set authentication_string=PASSWORD('123456') where user='sys' and host='localhost'flush privileges;
1.3 授权grant
1.3.1 grant
格式grant 权限 on 权限范围(对象) to 用户 identified by '';权限(角色):select、update、delete、insert、drop、createALL 权限范围:*.* 所有数据库对象oldboy.* oldboy单库下所有对象oldboy.test 单表级别用户:repl@localhostrepl@'10.0.0.53'repl@'10.0.0.%'repl@'10.0.0.5%'-----要求:1、用户只能通过10网段访问,用户名为oldboy,密码为1232、只能对oldboy数据库下的对象进行增insert create、改update、查select#创建 grant select,insert,update,create on oldboy.* to oldboy@'10.0.0.%' identified by '123';#查看权限show grants for oldboy@'10.0.0.%';#收回权限revoke drop on oldboy.* from 'oldboy'@'10.0.0.%';#删除用户drop user oldboy@'10.0.0.%'注意:创建的权限信息,不在/data/下的数据库名目录下
1.4 好用功能、快捷键
1.4.1 mysql客户端接口自带功能
1、\h 或 help 或 ? 获取帮助2、\G 格式化输出(行转列)3、\T 或 tee 记录操作日志 tee /tmp/mysql.log4、\c 或 CTRL+c 退出mysql5、\s 或 status 查看数据库状态信息6、\. 或 source mysql> source /tmp/world.sql7、\u 或use use world show databases 看当前所有数据库的名字 show tables 查看当前use到的数据库所有的表 show tables from world 查看目标数据库下的表8、 ctrl +L 清屏
1.5 增删改查-数据库SQL命令详解
1.5.1 数据库
#创建库mysql> create database xzy character set utf8; #或缩写 charset utf8 (推荐)mysql> show create database xzy;+----------+--------------------------------------------------------------+| Database | Create Database |+----------+--------------------------------------------------------------+| xzy | CREATE DATABASE `xzy` /*!40100 DEFAULT CHARACTER SET utf8 */ |+----------+--------------------------------------------------------------+#修改库mysql> alter database xzy charset gbk;#删除库mysql> drop database xzy;
1.5.2 表-table
1.5.2.1 查看表
# 帮助:mysql> help create table;# 查看列mysql> use xzymysql> desc test;+-------+----------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | char(30) | YES | | NULL | |+-------+----------+------+-----+---------+-------+
1.5.2.2 操作表
# 创建表mysql> use xzymysql> create table test(id int,name char(30));# 完整:CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=UTF8;# 修改表名(两种方法)mysql> rename table test to test1; 或 mysql> alter table test1 rename to test;# 添加列结构 mysql> alter table people add addr char(40) NOT NULL; #默认添加到最后# 指定添加年龄列到name列后面的位置,示例如下:alter table people add age int(4) after name;# 通过下面的命令在第一列添加qq字段。alter table test add telnum int first;# 同时添加多个列定义:alter table people add id int first ,add sex char(4) after name ;# 删除表结构:alter table people drop sex;# 修改表定义alter table people modify name char(20);# 修改列名:alter table people change name people_name char(30) ;
1.5.3 插入、更新数据
# insert语句:create table test (id int,name varchar(20)); #创建表 testinsert into test values(1,'test'); #插入单个insert into test values(2,'yougboy'),(3,'youggilr'); #插入多个insert into test(name) values('xiaoming'); #插入指定列select * from test; #查看# 创建一模一样的表------------------------------------create table test like oldboy;insert into oldboy select * from oldboy;------------------------------------ # 修改(更新)数据 updateupdate(一定要有where条件)update test set name='oldboy1' WHERE id = 1;# 删除数据 deletedelete(一定要有where条件)delete from oldboy where id=1;
1.5.4 查看数据-select
select user,password ,host from mysql.user where user='sys';select user,password ,host from mysql.user where user like 'sy%';select * from oldboy.test;select id,name from test where id=2;select id,name from test where id>2 and id<4;
1.6 复杂查询
1.6.1 ORDER BY子句
ORDER BY子句用来排序行语法:SELECT expr FROM table[WHERE condition(s)][ORDER BY {column, expr, numeric_position} [Asc|DEsc]];其中:Asc:执行升序排序。默认值DEsc:执行降序排序ORDER BY子句一般在SELECT语句的最后面#两个排序条件SELECT * FROM city ORDER BY population,countrycode;
1.6.2 LIMIT子句
LIMIT子句是SELECT语句中的最后一个子句(在order by后面)。它用来表示从结果集中选取最前面或最后面的几行。语法:limit <获取的行数> [OFFSET <跳过的行数> ]或者limit [ <跳过的行数> ,] <获取的行数> SELECT * FROM city ORDER BY 5 DEsc LIMIT 4; 获取的行数> 跳过的行数> 跳过的行数> 获取的行数>
1.6.3 子查询
获取和100号球员性别相同并且居住在同一城市的球员号码。select playerno from players where (sex, town) = ( select sex, town from players where playerno = 100);
1.6.4 连接查询
#基础用法SELECT * FROM Student,Grade WHERE Student.sID = Grade.gID;#AS 别名SELECT ci.name AS city_name ,co.name AS country_name,co.`SurfaceArea` AS mianji FROM city AS ci ,country AS co WHERE ci.name='qingdao' AND ci.`CountryCode`= co.`CountryCode`;# NATURAL JOIN子句自动到两张表中查找所有同名同类型的列拿来做连接列,进行相等连接SELECT NAME,countrycode,LANGUAGE ,populationFROM city NATURAL JOIN countrylanguageWHERE population > 1000000ORDER BY population;# 使用using子句 (指定列连接)SELECT NAME,countrycode,LANGUAGE ,populationFROM city JOIN countrylanguageUSING(countrycode);