MYSQL常用命令总结

一、用户权限管理

1、  连接数据库与退出

²  连接数据库的格式为:

mysql -h主机地址 -u用户名 -p用户密码;

其中,-h主机地址可以省略

---------------------------------------------

²  退出的命令为:

mysql>exit或quit;.

²  查看当前用户的命令为:

mysql>select User();

---------------------------------------------

2、  修改密码

mysqladmin -u用户名 -p旧密码 password 新密码

---------------------------------------------

3、  用户管理

在刚安装好的mysql里包含一个含空密码的root帐号和一个匿名帐号,这是一个很大的安全隐患,我们应该为root帐号设置密码和删除匿名账号。

其中,MYSQL里面的系统数据库mysql包含一个user表,我们可以通过对user表操作来完成帐户的设置,因此可以使用以下命令:

use mysql;
delete from User where User="";
update User set Password=PASSWORD('newpassword') where User='root';

flush privileges  //立即更新

---------------------------------------------

用户的管理是通过操作User表来实现的,添加新用户的方法有两个:一是在User表中插入相应的行,同时设置权限;二是通过GRANT命令创建相应权限的用户,其中GRANT命令格式如下:

grant 权限1,权限2,…,权限n on 数据库名.表名 to 用户名@连接地址 identified by ‘连接口令’;

grant all on mydb.* to NewUserName@HostName identified by "password" ;
grant usage on *.* to NewUserName@HostName identified by "password";
grant select,insert,update on mydb.* to NewUserName@HostName identified by "password";
grant update,delete on mydb.TestTable to NewUserName@HostName identified by "password";

---------------------------------------------
对于插入User表添加的用户,密码password字段要用PASSWORD()函数进入加密;

全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
Alter: 修改已存在的数据表(例如增加/删除列)和索引。
Create: 建立新的数据库或数据表。
Delete: 删除表的记录。
Drop: 删除数据表或数据库。
INDEX: 建立或删除索引。
Insert: 增加表的记录。
Select: 显示/搜索表的记录。
Update: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录--其它什么也不允许做。

---------------------------------------------

二、数据库操作

1、  导出导入数据库

²  导出数据库命令:

mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1)

²  导出数据表命令:

mysqldump -u 用户名 -p 数据库名 表名 > 导出的文件名

²  导入数据库命令:

法一:mysql>source sql脚本,如:source my.sql;

法二:mysqldump -u username -p dbname < filename.sql;

法三:mysql -u username -p -D dbname < filename.sql;

---------------------------------------------

2、  显示和使用数据库

显示所有数据库:mysql>show databases;

使用指定数据库:mysql>use <数据库名>;

查看当前数据库:mysql>select database();

查看数据库的表:mysql>show tables;

3、  删除数据库

命令:mysql>drop database <数据库名>
---------------------------------------------

三、数据表操作

1、  创建表与删除表

²  建表命令:

create table <表名> ( <字段名1> <类型1> [,..<字段名n> <类型n>]);

mysql> create table MyClass(
> id int(4) not null primary key auto_increment,
> name char(20) not null,
> sex int(4) not null default '0',
> degree double(16,2));

²  查看表结构命令:

mysql>describe <表名>;

mysql>desc <表名>;

mysql>show columns from <表名>;

²  删除数据表命令:

mysql> drop table <表名>;

²  修改字段命令:

mysql>Alter table <表名> add column <字段名> <字段类型>[<其它>];

mysql>Alter table <表名> drop <字段名>;

mysql>Alter table <表名> add primary key(<字段名>);

mysql>Alter table <表名> drop primary key(<字段名>);

mysql>Alter table <表名> change <原字段名> <新字段名> <字段类型>;

²  修改表名:

mysql>rename table <原表名> to <新表名>;

2、  增删改操作

²  插入数据

insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]

²  更新数据

mysql>update <表名> set <字段>=新值,… where 条件

²  删除数据

mysql>delete from <表名> where 条件

3、  查询数据表记录

一、Select的基本语法

SELECT [ ALL | DISTINCT | DISTINCTROW | TOP ] 
{* | talbe.* | [table.]field1[AS alias1] [,[table.]field2[AS alias2] [,…]]} 
FROM tableexpression[,…] [IN externaldatabase] 
[WHERE…] 
[GROUP BY…] 
[HAVING…] 
[ORDER BY…] 
[WITH OWNERACCESS OPTION] 

---------------------------------------------
说明: 
用中括号([])括起来的部分表示是可选的,用大括号({})括起来的部分是表示必须从中选择其中的一个。 
1 FROM子句 
FROM 子句指定了SELECT语句中字段的来源。FROM子句后面是包含一个或多个的表达式(由逗号分开),其中的表达式可为单一表名称、已保存的查询或由 INNER JOIN、LEFT JOIN 或 RIGHT JOIN 得到的复合结果。如果表或查询存储在外部数据库,在IN 子句之后指明其完整路径。 
例:下列SQL语句返回所有有定单的客户: 
SELECT OrderID,Customer.customerID 
FROM Orders Customers 
WHERE Orders.CustomerID=Customers.CustomeersID

2 ALL、DISTINCT、DISTINCTROW、TOP谓词 
(1) ALL 返回满足SQL语句条件的所有记录。如果没有指明这个谓词,默认为ALL。 
例:SELECT ALL FirstName,LastName 
FROM Employees 
(2) DISTINCT 如果有多个记录的选择字段的数据相同,只返回一个。 
(3) DISTINCTROW 如果有重复的记录,只返回一个 
(4) TOP显示查询头尾若干记录。也可返回记录的百分比,这是要用 TOP N PERCENT子句(其中N 表示百分比) 
例:返回5%定货额最大的定单 
SELECT TOP 5 PERCENT* 
FROM [ Order Details] 
ORDER BY UnitPrice*Quantity*(1-Discount) DESC

3 用 AS 子句为字段取别名 
如果想为返回的列取一个新的标题,或者,经过对字段的计算或总结之后,产生了一个新的值,希望把它放到一个新的列里显示,则用AS保留。 
例:返回FirstName字段取别名为NickName 
SELECT FirstName AS NickName ,LastName ,City 
FROM Employees 
例:返回新的一列显示库存价值 
SELECT ProductName ,UnitPrice ,UnitsInStock ,UnitPrice*UnitsInStock AS valueInStock 
FROM Products

二 .WHERE 子句指定查询条件

1 比较运算符 
比较运算符 含义 
= 等于 
> 大于 
< 小于 
>= 大于等于 
<= 小于等于 
<> 不等于 
!> 不大于 
!< 不小于 
例:返回96年1月的定单 
SELECT OrderID, CustomerID, OrderDate 
FROM Orders 
WHERE OrderDate>#1/1/96# AND OrderDate<#1/30/96# 
注意: 
Mcirosoft JET SQL 中,日期用‘#’定界。日期也可以用Datevalue()函数来代替。在比较字符型的数据时,要加上单引号’’,尾空格在比较中被忽略。 
例: 
WHERE OrderDate>#96-1-1# 
也可以表示为: 
WHERE OrderDate>Datevalue(‘1/1/96’) 
使用 NOT 表达式求反。 
例:查看96年1月1日以后的定单 
WHERE Not OrderDate<=#1/1/96# 
2 范围(BETWEEN 和 NOT BETWEEN) 
BETWEEN …AND…运算符指定了要搜索的一个闭区间。 
例:返回96年1月到96年2月的定单。 
WHERE OrderDate Between #1/1/96# And #2/1/96# 
3 列表(IN ,NOT IN) 
IN 运算符用来匹配列表中的任何一个值。IN子句可以代替用OR子句连接的一连串的条件。 
例:要找出住在 London、Paris或Berlin的所有客户 
SELECT CustomerID, CompanyName, ContactName, City 
FROM Customers 
WHERE City In(‘London’,’ Paris’,’ Berlin’) 
4 模式匹配(LIKE) 
LIKE运算符检验一个包含字符串数据的字段值是否匹配一指定模式。 
LIKE运算符里使用的通配符 
通配符 含义 
? 任何一个单一的字符 
* 任意长度的字符 
# 0~9之间的单一数字 
[字符列表] 在字符列表里的任一值 
[!字符列表] 不在字符列表里的任一值 
- 指定字符范围,两边的值分别为其上下限 
例:返回邮政编码在(171)555-0000到(171)555-9999之间的客户 
SELECT CustomerID ,CompanyName,City,Phone 
FROM Customers 
WHERE Phone Like ‘(171)555-####’ 
LIKE运算符的一些样式及含义 
样式 含义 不符合 
LIKE ‘A*’ A后跟任意长度的字符 Bc,c255 
LIKE’5[*]’ 5*5 555 
LIKE’5?5’ 5与5之间有任意一个字符 55,5wer5 
LIKE’5##5’ 5235,5005 5kd5,5346 
LIKE’[a-z]’ a-z间的任意一个字符 5,% 
LIKE’[!0-9]’ 非0-9间的任意一个字符 0,1 
LIKE’[[]’ 1,* 

三 .用ORDER BY子句排序结果 

ORDER子句按一个或多个(最多16个)字段排序查询结果,可以是升序(ASC)也可以是降序(DESC),缺省是升序。ORDER子句通常放在SQL语句的最后。 
ORDER子句中定义了多个字段,则按照字段的先后顺序排序。 
例: 
SELECT ProductName,UnitPrice, UnitInStock 
FROM Products 
ORDER BY UnitInStock DESC , UnitPrice DESC, ProductName 
ORDER BY 子句中可以用字段在选择列表中的位置号代替字段名,可以混合字段名和位置号。 
例:下面的语句产生与上列相同的效果。 
SELECT ProductName,UnitPrice, UnitInStock 
FROM Products 
ORDER BY 1 DESC , 2 DESC,3 

四 .运用连接关系实现多表查询 
                   从数据显示的方式来讲,主要有:内部连接和外部连接:

²  内部连接—只返回满足条件的数据
FROM table1 INNER JOIN table2 ON table1.field1 comparision table2.field2 
其中comparision 就是前面WHERE子句用到的比较运算符,其中,在一个JOIN语句中连接多个ON子句 ,

²  外部连接—除了返回满足条件的记录外,还返回左(右)表中不满足条件的记录,称为左(右)连接

左连接:FROM table1 LEFT JOIN table2 ON table1.field1 comparision table2.field2 
右连接:FROM table1 RIGHT JOIN table2 ON table1.field1 comparision table2.field2 
全连接:FROM table1 FULL JOIN table2 ON table1.field1 comparision table2.field2 

²  自然连接—以两个表具有相同的字段的所有列为基础,选择两个表中那些在所有匹配的列中的值相等的行,如果列具有相同的名称,但数据类型不同,则会报错。

FROM table1 NATURAL JOIN table2 ON table1.field1 comparision table2.field2 ;

五. 分组和总结查询结果 

在SQL的语法里,GROUP BY和HAVING子句用来对数据进行汇总。GROUP BY子句指明了按照哪几个字段来分组,而将记录分组后,用HAVING子句过滤这些记录。 
GROUP BY 子句的语法 
SELECT fidldlist 
FROM table 
WHERE criteria 
[GROUP BY groupfieldlist [HAVING groupcriteria]] 
注:Microsoft Jet数据库 Jet 不能对备注或OLE对象字段分组。 
GROUP BY字段中的Null值以备分组但是不能被省略。 
在任何SQL合计函数中不计算Null值。 
GROUP BY子句后最多可以带有十个字段,排序优先级按从左到右的顺序排列。 
例:在‘WA’地区的雇员表中按头衔分组后,找出具有同等头衔的雇员数目大于1人的所有头衔。 
SELECT Title ,Count(Title) as Total 
FROM Employees 
WHERE Region = ‘WA’ 
GROUP BY Title 
HAVING Count(Title)>1 
JET SQL 中的聚积函数 
聚集函数 意义 
SUM ( ) 求和 
AVG ( ) 平均值 
COUNT ( ) 表达式中记录的数目 
COUNT (* ) 计算记录的数目 
MAX 最大值 
MIN 最小值 
VAR 方差 
STDEV 标准误差 
FIRST 第一个值 
LAST 最后一个值 

4、 视图简介

视图是一个虚拟表,其内容由查询定义,同真实的表一样,包含一系列带有真实名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在,列和行数据由来自定义视图的查询所引用的表,并且在引用视图时动态生成。

对视图的操作与对表的操作一样,可以对其进行查询、修改、删除。当通过视图对数据进行修改时,相应的基表的数据也发生变化。同时,若基表的数据发生变化,则这种变化也会自动地反应到视图中。

所以,视图是存储在数据库中的查询的sql语句,它主要出于两个原因:安全原因,视图可以隐藏一些数据;另一原因是可以使复杂的查询易于理解和使用。

²  创建视图语法

create [or replace] [algorithm = {undefined | merge | temptable}] view [db_name.] view_name [(column_list)] as select_statement [with [cascaded | local] check option]

---------------------------------------------

通过该语句可以创建视图,若给定了[or replace],则表示当已具有同名的视图时,将覆盖原视图。select_statement是一个查询语句,这个查询语句可从表或其它的视图中查询。视图属于数据库,因此需要指定数据库的名称,若未指定时,表示在当前的数据库创建新视图。

表和数据库共享数据库中相同的名称空间,因此,数据库不能包含相同名称的表和视图,并且,视图的列名也不能重复。

²  修改视图语法:

alter [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]

----------------------------------------------

该语句用于更改已有视图的定义。其语法与create view类似。

5、 索引与优化

索引对查询速度有着至关重要的影响,它用来快速地寻找那些具有特定值的记录,可以无须扫描整个表即可得到查询目标记录的位置。

²  选择索引的数据类型的原则:

(1)     越小的数据类型通常更好:越小的数据类型占用空间小,处理起来更快;

(2)     简单的数据类型更好:整型数据比起字符,处理开销更少;

(3)     尽量避免NULL:在MYSQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引统计信息及比较运算更加复杂,你应该用0、一个特殊的值或者一个空串代替空值。

²  索引的类型

(1普通索引

a.创建索引: create index <索引名> on <表名> (<字段名>(长度));

           b. 修改表结构:alter <表名> add index <索引名> on (<字段名>(长度));

            c. 创建表时指定索引:

create table <表名> […], index <索引名> (<字段名>(长度));

(2唯一索引:索引列的值必须唯一

a.创建索引: create unique index <索引名> on <表名> (<字段名>(长度));

           b. 修改表结构:alter <表名> add unique <索引名> on (<字段名>(长度));

            c. 创建表时指定索引:

create table <表名> […], unique <索引名> (<字段名>(长度));

(3主键索引

 即是定义为主键的列作为索引列,也可以有三种方式来创建。

(4全文索引

mysql从3.23.23起开始支持全文索引和全文检索,全文索引的索引类型为fulltext,可以在varchar或者text类型的列上创建。

(5删除索引:

Drop index <索引名> on <表名>;

----------------------------------------------

选择索引列,主要考虑两种情形的列:在WHERE条件中出现的列;在JOIN子句中出现的列。使用多列索引时,要注意最左前缀的影响。

索引可以提高查询的速度,但是会降低更新表的速度,因为更新表,不但要更新表的数据,而且也要更新索引文件。如果过多地定义索引,会占用很多的磁盘空间,因为建立索引会占用索引文件。

6、 存储过程

存储过程是一组为了完成特定功能SQL语句集,经编译后存储在数据库中,它可以由SQL语句和一些特殊的控制结构组成。注意,只是在MYSQL5.0中才引入存储过程。

²  创建存储过程:

Create procedure <存储过程名>([参数属性 参数 参数类型|…])

Begin

………

End

其中,参数属性可以是in、out、inout;用命令行创建时,可以使用<delimiter 字符 >设置另一个分割符来代替<;>,否则编译出错,同时创建完成后,记得使用<delimiter ; >设置为原来的分割符。

²  调用存储过程:

Call <存储过程名>();

²  删除存储过程:

Drop procedure <存储过程名>;

注意不能在一个存储过程中删除另一个存储过程,只能调用。

²  显示某个存储过程信息:

Show create procedure <存储过程名>;

7、 触发器



----------------------------------------------------------------------
“我可以接受失败,但绝对不能接受自己未曾奋斗过。”--迈克尔-乔丹
“I can accept failure, but I can't accept not trying.”--Michael Jordan.
原文地址:https://www.cnblogs.com/beyondfengyu/p/2964552.html