MySQL 基础命令
SQL语句
mysql版本:针对mysql-5.6.36 版本
目录 1.1 常用命令-查看 2 1.2 登录mysql 2 1.2.1 修改密码 2 1.2.2 忘记密码-怎么办 3 1.3 授权grant 3 1.3.1 grant 3 1.4 好用功能、快捷键 4 1.4.1 mysql客户端接口自带功能 4 1.5 增删改查-数据库SQL命令详解 5 1.5.1 数据库 5 1.5.2 表-table 5 1.5.3 插入、更新数据 7 1.5.4 查看数据-select 8 1.6 复杂查询 8 1.6.1 ORDER BY子句 8 1.6.2 LIMIT子句 8 1.6.3 子查询 9 1.6.4 连接查询 9
1.1 常用命令
# 查看数据库 mysql> show databases; show databases like '%pres%'; #模糊查询 # 查看表 mysql> use xzy mysql> show tables; #查看权限 show grants for oldboy@'10.0.0.%'; # 查看列 mysql> use xzy mysql> desc test;
1.2 登录mysql
常见的特定于客户机的连接选项
-u <user_name>或--host=<user_name>
-p <password>
-h <host_name>或--host=<host_name>
--protocol=<protocol_name>
-P <port_number> 或--port=<port_number>
-S <socket_name> 或--socket=<socket_name>
1.2.1 修改密码
[root@db02 ~]# mysqladmin -uroot -p123 password 123456 [root@db02 ~]# mysql -uroot -p123456 mysql>
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、create ALL 权限范围: *.* 所有数据库对象 oldboy.* oldboy单库下所有对象 oldboy.test 单表级别 用户: repl@localhost repl@'10.0.0.53' repl@'10.0.0.%' repl@'10.0.0.5%' ----- 要求: 1、用户只能通过10网段访问,用户名为oldboy,密码为123 2、只能对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.log 4、\c 或 CTRL+c 退出mysql 5、\s 或 status 查看数据库状态信息 6、\. 或 source mysql> source /tmp/world.sql 7、\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 xzy mysql> desc test; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | char(30) | YES | | NULL | | +-------+----------+------+-----+---------+-------+
1.5.2.2 操作表
# 创建表 mysql> use xzy mysql> 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)); #创建表 test insert 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; ------------------------------------ # 修改(更新)数据 update update(一定要有where条件) update test set name='oldboy1' WHERE id = 1; # 删除数据 delete delete(一定要有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 ,population FROM city NATURAL JOIN countrylanguage WHERE population > 1000000 ORDER BY population; # 使用using子句 (指定列连接) SELECT NAME,countrycode,LANGUAGE ,population FROM city JOIN countrylanguage USING(countrycode);