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)
    
    mysql> 
    复制代码
  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/breg/p/3992135.html
Copyright © 2011-2022 走看看