zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    111
    实验 12 综合练习二
    实验 11结构体
    作业 5 指针应用1
    实验 10 指针2
    实验9 指针1
    实验8 数组2
    实验7
    321
    实验9-2
  • 原文地址:https://www.cnblogs.com/beyondfengyu/p/2964552.html
Copyright © 2011-2022 走看看