zoukankan      html  css  js  c++  java
  • MySQL 基础常用命令

    一、启动与关闭

    1.1 Linux下启动mysql 的命令:

    • a. rpm包安装:service mysqld start
    • b. 源码包安装:/usr/local/mysql/bin/mysqld_safe --user=mysql &

    1.2 Linux下重启mysql 的命令:

    • a. rpm包安装:service mysqld restart
    • b. 源码包安装:
      • 先关闭mysql

        /usr/local/mysql/bin/mysqladmin -uroot -p shutdown

      • 再启动mysql
        /usr/local/mysql/bin/mysqld_safe --user=mysql &

    1.3 Linux下关闭mysql 的命令:

    • a. rpm包安装:service mysqld stop
    • b. 源码包安装:
      • 方法1、/usr/local/mysql/bin/mysqladmin -uroot -p shutdown
      • 方法2、killall mysqld           //强行终止MySQL数据库服务,有可能导致表损坏,不建议使用

    二、数据库连接

    2.1 连接MySQL

    格式:$mysql_dir/bin/mysql [-h主机地址] -u用户名 -p用户密码,回车后提示输入密码。

    2.2 退出MySQL

    格式:exit/quit

     

    三、修改密码

    3.1 mysqladmin 命令

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

    例1:给root加个密码123456。首先在终端下进入目录$mysql_dir/bin,然后键入以下命令

    ./mysqladmin -uroot password ’123456′

    注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

    例2:再将root的密码改为abc123。

    ./mysqladmin -uroot -p123456 password abc123

    3.2 UPDATE user 语句

    首先使用root 帐户登入mysql,然后执行:

    UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root';
    FLUSH PRIVILEGES;

    3.3 SET PASSWORD 语句

    同样,首先使用root 帐户登入mysql,然后执行:

    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('abc123');

    四、创建用户与授权

    4.1 CREATE USER

    CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
        [, user [IDENTIFIED BY [PASSWORD] 'password']] ...

    CREATE USER用于创建新的MySQL账户。要使用CREATE USER,您必须拥有mysql 数据库的全局CREATE USER权限,或拥有INSERT权限。对于每个账户,CREATE USER会在没有权限的mysql.user表中创建一个新记录。如果账户已经存在,则出现错误。

    使用自选的IDENTIFIED BY子句,可以为账户指定一个密码。user值和密码的给定方法和GRANT语句一样。特别要注意的是,要在纯文本中指定密码,需忽略PASSWORD关键词。要把密码指定为由PASSWORD()函数返回的混编值,需包含关键字PASSWORD。

    例1:创建新用户david & sandy

    mysql> create user 'david'@'localhost' identified by 'password';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>
    mysql> create user 'sandy'@'localhost' identified by PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql>

    4.2 使用GRANT语句

    最好的方法是使用GRANT语句,因为这样更精确,错误少。从MySQL 3.22.11起提供了GRANT;它的主要用途是来给帐户授权的,但也可用来建立新帐户并同时授权。

    注意:当mysql 运行于no_auto_create_user 时要提供新建用户的密码,否则不能创建新用户。

    格式:

    GRANT privileges ON databasename.tablename TO 'username'@'host' identified by 'password'; 

    例1、增加一个用户test1,密码为abc,让他可以在任何主机上登录,并对所有数据库拥有所有权限。

    首先用以root用户连入MySQL,然后键入以下命令:

    grant all privileges on *.* to 'test1'@'%' identified  by 'abc';
    flush privileges;

    例2、增加一个用户test2,密码为abc,让他只可以在localhost上登录,并可以对数据库david进行查询、插入、修改、删除的操作。

    grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by 'abc';
    flush privileges;

    如果不想test2有密码,可以再打一个命令将密码消掉。

    grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by '';

    grant 更多用法,请自行Google+Baidu。

    4.3 直接操作MySQL授权表

    除了GRANT,你可以直接用INSERT语句创建相同的账户,然后使用FLUSH PRIVILEGES告诉服务器重载授权表。

    例1:创建用户test3,让其具有同4.2 例2中test2用户同样的权限。

    复制代码
    mysql> insert into mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) values('localhost', 'test3', PASSWORD('password'),'Y','Y','Y','Y');
    Query OK, 1 row affected, 3 warnings (0.00 sec)
    
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    复制代码
    复制代码
    mysql> select Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv from mysql.user where User='test3';
    +-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
    | Host      | User  | Password                                  | Select_priv | Insert_priv | Update_priv | Delete_priv |
    +-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
    | localhost | test3 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | Y           | Y           | Y           | Y           | 
    +-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
    1 row in set (0.00 sec)
    
    mysql> 
    复制代码

    当用INSERT创建账户时,使用FLUSH PRIVILEGES 的原因是告诉服务器重读授权表。否则,只有重启服务器后更改才会生效。使用 GRANT,则不需要使用FLUSH PRIVILEGES。

    用INSERT语句时,使用PASSWORD()函数是为了加密密码。GRANT语句自动加密密码,因此不需要PASSWORD()。

    'Y' 值启用账户权限。

    五、库操作

    必须首先登录到mysql 中,有关操作都是在mysql 的提示符下进行,而且每个命令以分号结束。

    5.1 创建数据库

    命令:create database <数据库名>;

    例1:创建一个名为test 的数据库

    mysql> create database test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql>

    5.2 显示所有的数据库

    命令:show databases;(注意:最后有个s)

    复制代码
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema | 
    | david              | 
    | mysql              | 
    | test               | 
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    5.3 删除数据库

    命令:drop database <数据库名>;

    例2:删除名为test 的数据库

    mysql> drop database test;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 

    5.4 连接数据库

    命令: use <数据库名>;

    例3:连接david 数据库

    mysql> use david;
    Database changed
    mysql> 

    5.5 查看当前使用的数据库

    命令:select database();

    复制代码
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | david      | 
    +------------+
    1 row in set (0.00 sec)
    
    mysql> 
    复制代码

    5.6 当前数据库包含的表信息

    命令:show tables;(注意:最后有个s)

    复制代码
    mysql> show tables;
    +-----------------+
    | Tables_in_david |
    +-----------------+
    | emp             | 
    +-----------------+
    1 row in set (0.00 sec)
    
    mysql> 
    复制代码

    六、表操作

    操作之前应连接某个数据库。

    6.1 建立表

    create table <表名> (<字段名1> <类型1> [,..<字段名n> <类型n>]);
    
    create table tablename (col1 type1 [not null] [primary key],col2 type2 [not null],..);
    复制代码
    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));
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> 
    复制代码

    补充:根据已有的表创建新表。

    create table tab_new like tab_old; (只有表结构)

    create table tab_new as select * from tab_old; (既包含表结构,又包含表数据)

    只包含表结构:

    mysql> create table myclass2 like myclass;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 

    既包含表结构,又包含表数据:

    复制代码
    mysql> insert into myclass values(1, 'david', 1, 20130417.16);
    Query OK, 1 row affected (0.02 sec)
    
    mysql> 
    mysql> 
    mysql> create table myclass3 as select * from myclass;
    Query OK, 1 row affected (0.07 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> select * from myclass3;
    +----+-------+-----+-------------+
    | id | name  | sex | degree      |
    +----+-------+-----+-------------+
    |  1 | david |   1 | 20130417.16 | 
    +----+-------+-----+-------------+
    1 row in set (0.02 sec)
    
    mysql> 
    复制代码

    6.2 获取表结构

    命令:

    desc 表名;
    or
    show columns from 表名;

    获取myclass & myclass2 表结构

    复制代码
    mysql> desc myclass;
    +--------+--------------+------+-----+---------+----------------+
    | Field  | Type         | Null | Key | Default | Extra          |
    +--------+--------------+------+-----+---------+----------------+
    | id     | int(4)       | NO   | PRI | NULL    | auto_increment | 
    | name   | char(20)     | NO   |     |         |                | 
    | sex    | int(4)       | NO   |     | 0       |                | 
    | degree | double(16,2) | YES  |     | NULL    |                | 
    +--------+--------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    
    mysql> show columns from myclass2;
    +--------+--------------+------+-----+---------+----------------+
    | Field  | Type         | Null | Key | Default | Extra          |
    +--------+--------------+------+-----+---------+----------------+
    | id     | int(4)       | NO   | PRI | NULL    | auto_increment | 
    | name   | char(20)     | NO   |     |         |                | 
    | sex    | int(4)       | NO   |     | 0       |                | 
    | degree | double(16,2) | YES  |     | NULL    |                | 
    +--------+--------------+------+-----+---------+----------------+
    4 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    6.3 删除表

    命令:drop table <表名>;

    例:删除表名为 myclass3 的表

    复制代码
    mysql> drop table myclass3;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show tables;
    +-----------------+
    | Tables_in_david |
    +-----------------+
    | emp             | 
    | myclass         | 
    | myclass2        | 
    +-----------------+
    3 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    6.4 更改表名

    命令:rename table 原表名 to 新表名;

    例:将表 myclass2 名字更改为 myclass4

    复制代码
    mysql> rename table myclass2 to myclass4;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show tables;
    +-----------------+
    | Tables_in_david |
    +-----------------+
    | emp             | 
    | myclass         | 
    | myclass4        | 
    +-----------------+
    3 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    6.5 在表中增加字段

    命令:alter table 表名 add 字段 类型 其他;

    例:在表 myclass 中添加了一个字段passtest,类型为int(4),默认值为0。

    复制代码
    mysql> alter table myclass add passtest int(4) default '0';
    Query OK, 1 row affected (0.04 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> desc myclass;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | id       | int(4)       | NO   | PRI | NULL    | auto_increment | 
    | name     | char(20)     | NO   |     |         |                | 
    | sex      | int(4)       | NO   |     | 0       |                | 
    | degree   | double(16,2) | YES  |     | NULL    |                | 
    | passtest | int(4)       | YES  |     | 0       |                | 
    +----------+--------------+------+-----+---------+----------------+
    5 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    七、数据操作

    7.1 插入数据

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

    例:向 myclass 表中插入以下记录,留空的表示使用默认值。

    复制代码
    mysql> insert into myclass (id, name, sex, degree, passtest) values(1, 'david', 1, 80.56, 78);     
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into myclass values(2, 'sandy', 0, 100, 90);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into myclass (id, name, sex, degree) values(3, 'renee', 0, 90.34);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into myclass (id, name) values(4, 'china');
    Query OK, 1 row affected (0.00 sec)
    
    mysql>
    复制代码

    7.2 查询表中的数据

    a. 查询所有行

    命令:select <字段1,字段2,...> from < 表名 > where < 表达式 >;

    例1:查看表 myclass 中所有数据

    复制代码
    mysql> select * from myclass;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  80.56 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    |  3 | renee |   0 |  90.34 |        0 | 
    |  4 | china |   0 |   NULL |        0 | 
    +----+-------+-----+--------+----------+
    4 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    例2:查询表 david 相关信息

    复制代码
    mysql> select * from myclass where name='david';
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  80.56 |       78 | 
    +----+-------+-----+--------+----------+
    1 row in set (0.00 sec)
    
    mysql> 
    复制代码

    b. 查询前几行数据

    例如:查看表 myclass 中前2行数据

    复制代码
    mysql> select * from myclass limit 2;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  80.56 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    +----+-------+-----+--------+----------+
    2 rows in set (0.00 sec)
    
    mysql>
    复制代码

    或者:

    复制代码
    mysql> select * from myclass order by id limit 2;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  80.56 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    +----+-------+-----+--------+----------+
    2 rows in set (0.01 sec)
    
    mysql> 
    复制代码

    7.3 删除表中的数据

    命令:delete from 表名 where 表达式;

    例如:删除表 myclass 中编号为4的记录

    复制代码
    mysql> delete from myclass where id=4;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from myclass;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  80.56 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    |  3 | renee |   0 |  90.34 |        0 | 
    +----+-------+-----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    7.4 修改表中的数据

    update 表名 set 字段 = 新值,… where 条件;

    例:修改 myclass 表中编号为1的记录,将degree 值改成89.99

    复制代码
    mysql> update myclass set degree=89.99 where id=1;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from myclass;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  89.99 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    |  3 | renee |   0 |  90.34 |        0 | 
    +----+-------+-----+--------+----------+
    3 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    八、数据的导入导出

    8.1 导出整个数据库

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

    复制代码
    [root@TS-DEV bin]# ./mysqldump -uroot -p david > /tmp/david/david.sql
    Enter password: 
    [root@TS-DEV bin]# ll /tmp/david/
    total 4
    -rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql
    [root@TS-DEV bin]# 
    复制代码

    8.2 导出一个表

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

    复制代码
    [root@TS-DEV bin]# ./mysqldump -uroot -p david myclass > /tmp/david/david_myclass.sql
    Enter password: 
    [root@TS-DEV bin]# ll /tmp/david/
    total 8
    -rw-r--r-- 1 root root 1854 Apr 17 17:16 david_myclass.sql
    -rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql
    [root@TS-DEV bin]# 
    复制代码

    8.3 导出一个数据库结构

    命令:mysqldump -u root -p -d --add-drop-table test > test_db.sql

    -d 没有数据 --add-drop-table 在每个create 语句之前增加一个drop table

    [root@TS-DEV bin]# ./mysqldump -uroot -p -d --add-drop-table david > /tmp/david/david_db.sql
    Enter password: 
    [root@TS-DEV bin]# 

    8.4 导入数据库

    a. 常用source 命令

    进入mysql 数据库控制台

    # ./mysql -uroot -p

    复制代码
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema | 
    | mysql              | 
    +--------------------+
    2 rows in set (0.00 sec)
    
    mysql> create database sandy;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema | 
    | mysql              | 
    | sandy              | 
    +--------------------+
    3 rows in set (0.00 sec)
    
    mysql> use sandy
    Database changed
    mysql> source /tmp/david/david.sql
    Query OK, 0 rows affected (0.00 sec)
    
    ...
    
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0...
    
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0...
    
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show tables;
    +-----------------+
    | Tables_in_sandy |
    +-----------------+
    | emp             | 
    | myclass         | 
    | myclass4        | 
    +-----------------+
    3 rows in set (0.00 sec)
    
    mysql> select * from emp;
    +------+-------+
    | id   | name  |
    +------+-------+
    |    1 | david | 
    |    2 | sandy | 
    +------+-------+
    2 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    b. 使用mysql 命令

    先创建要导入的数据库 renee。

    复制代码
    mysql> create database renee;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema | 
    | mysql              | 
    | renee              | 
    | sandy              | 
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> 
    复制代码

    导入数据

    [root@TS-DEV bin]# ./mysql -uroot -p -D renee < /tmp/david/david_myclass.sql 
    Enter password: 
    [root@TS-DEV bin]#

    查看数据

    复制代码
    mysql> use renee;
    Database changed
    mysql> show tables;
    +-----------------+
    | Tables_in_renee |
    +-----------------+
    | myclass         | 
    +-----------------+
    1 row in set (0.00 sec)
    
    mysql> select * from myclass;
    +----+-------+-----+--------+----------+
    | id | name  | sex | degree | passtest |
    +----+-------+-----+--------+----------+
    |  1 | david |   1 |  89.99 |       78 | 
    |  2 | sandy |   0 | 100.00 |       90 | 
    |  3 | nancy |   0 |  90.34 |        0 | 
    +----+-------+-----+--------+----------+
    3 rows in set (0.00 sec)
    
  • 相关阅读:
    C语言-typedef和#define
    C语言-指针
    C语言-数据结构-结构体
    数据结构笔记
    树的存储结构
    树的基本知识
    关于矩阵
    LaTex
    札记-碎碎念
    一个大神的个人博客 博客桌面风格很棒 二次元
  • 原文地址:https://www.cnblogs.com/lc1776/p/9156325.html
Copyright © 2011-2022 走看看