开发者社区> yaohong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MySQL

简介: 一:Mysql安装        #yum install mysql   #yum install mysql-server   #yum install mysql-devel     启动mysql   #service mysqld start   验证安装       #my...
+关注继续查看

一:Mysql安装

       #yum install mysql

  #yum install mysql-server

  #yum install mysql-devel

    启动mysql

  #service mysqld start

  验证安装

      #mysql --version

  设置数据库登录密码

  #mysqladmin -u root password "new_password";

  密码登录

  # mysql -u root -p 

     Enter password:*******

二:Mysql管理

  添加用户   
  # mysql -u root -p
  mysql> use mysql;
  mysql> INSERT INTO user (host, user, password,select_priv, insert_priv, update_priv)VALUES ('localhost', 'guest',PASSWORD('guest123'), 'Y', 'Y', 'Y');
  mysql> FLUSH PRIVILEGES;
  注意:PASSWORD() 函数来对密码进行加密。 你可以在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.
  注意:
在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
  
  配置文件
  mysql配置文件在/etc/my.cnf 
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 管理mysql命令
mysql> use RUNOOB;

mysql> SHOW DATABASES;

mysql> SHOW TABLES;

      root密码重置

#vim /etc/my.cnf

       在[mysqld]下添加skip-grant-tables,然后保存并退出

    重启mysql服务:service mysqld restart

三:Mysql连接

连接
# mysql -u root -p
退出
mysql> exit

四:Mysql管理数据库

  创建数据库

  # mysqladmin -u root -p create RUNOOB

  删除数据库

  #mysqladmin -u root -p drop RUNOOB

  备份数据库

  #mysqldump -uroot -p -h127.0.0.1 --opt mysql  > mysql.sql

  修改数据库密码

  mysqladmin -u root password "新密码"; 

五:数据类型

  大致可以分为三类:数值、日期/时间和字符串(字符)类型。

        tinyint、smallint、mediumint、int、bigint、float、double、decimal

    数值

   

   日期/时间

          data、time、year、datetime、timestamp

    

   字符串

   char、varchar、tinyblob、tinytext、blob、text、mediumblob、mediumtext、longblob、longtext

   

  最大整数:bigint

  最大字符串:longtext

六:表的增、删、查、改

6.1创建

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
 )ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table yy5(id int,name varchar(20));
  解析:

      如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。

      AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。

      PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。

      ENGINE 设置存储引擎,CHARSET 设置编码。

6.2删除

      DROP TABLE test;

           DELETE FROM runoob_tbl WHERE runoob_id=3;

6.3查询

          select * from runoob_tbl;

6.4修改

     增加:

                  INSERT INTO runoob_tbl
      (runoob_title, runoob_author, submission_date)
      VALUES
      ("学习mysql","mysql",NOW());

                  修改:

           UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;

 七:LIKE 子句

     7.1查询user表中姓名中包含“王”字的:

        select * from user where name like '%王%';

     7.2查询user表中姓名中没有“王”字的:

        select * from user where name not like '%王%';

     7.3查询user中姓名以“王”开头的:

        select * from user where name not like '王%';

                  7.4查询user中姓名以“王”结尾的:

        select * from user where name not like '%王';

     7.5查询user表中地址在上海姓名中没有“王”字和所有姓名为空的:

        select * from user where adress =‘上海’ and name not like '%王%' or name is null;

     7.6查询user表中地址在上海姓名中没有“王”字和地址在上海姓名为空的:

        select * from user where adress =‘上海’ and (name not like '%王%' or name is null);

八:union

    

     

    8.1求两个table某列的交集

      SELECT country FROM Websites
      UNION
      SELECT country FROM apps
      ORDER BY country;

    8.2求两个table某列的并集

      SELECT country FROM Websites
      UNION ALL
      SELECT country FROM apps
      ORDER BY country;

九:排序-order by

      SELECT * from runoob_tbl ORDER BY submission_date ASC;           

      SELECT * from runoob_tbl ORDER BY submission_date DESC;

十:分组-group by

      GROUP BY 语句根据一个或多个列对结果集进行分组。

      在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

           

      mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
      +--------+----------+
      | name   | COUNT(*) |
      +--------+----------+
      | 小丽    |        1 |
      | 小明    |        3 |
      | 小王    |        2 |
      +--------+----------+
      3 rows in set (0.01 sec)

十一:INNER JOIN

    Mysql和JOIN来进行多连接

    JOIN 按照功能大致分为如下三类:

      INNER JION:内连接或者等值连接

      LEFT  JION:左连接

      RIGHT JION:右连接

    1: INNER JOIN 

                      SELECT

       a.runoob_id, a.runoob_author, b.runoob_count

       FROM

       runoob_tbl a INNER JOIN tcount_tbl b

       ON

       a.runoob_author = b.runoob_author;

       等价于-------------------------------------------------------

       SELECT

        a.runoob_id, a.runoob_author, b.runoob_count

        FROM

        runoob_tbl a, tcount_tbl b

        WHERE

        a.runoob_author = b.runoob_author;

    2: LEFT JOIN

      SELECT 
      a.runoob_id, a.runoob_author, b.runoob_count  
      FROM      
      runoob_tbl a LEFT JOIN tcount_tbl b
      ON
      a.runoob_author = b.runoob_author;

十二:Null空值

       mysql> SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL;

       mysql> SELECT * from runoob_test_tbl WHERE runoob_count IS NOT NULL;

十三:正则表达式

      MySQL中使用 REGEXP 操作符来进行正则表达式匹配。

       1:找出字符串中以"st"开头的字符串

        mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';

       2:找出字符串中以“st”结束的字符串

        mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';

       3:找出字符串中包含'mar'的字符串

        mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';

十四:事务

       一般说来,事务满足四个条件(ACID):Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

        1:事务的原子性:一组事务要么成功,要么失败。

        2:稳定性:有非法数据(外键约束),事务撤回。

        3:隔离性:事务独立运行,独立撤回。

               4:可靠性:软硬件崩溃后,InnoDB回依靠日志问价进行重构。

      事务控制语句

        1:开启事务:begin或者start transaction

        2:提交事务:commit或者commit work,但二者不等价,commit会对数据库进行彻底修改。

        3:rollback:回滚用户提交的数据,并进行停止正在进行的

        4:SAVEPOINT identifier:事务保存点,一个事务可以拥有多个保存点,

        5:RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

        6:ROLLBACK TO identifier:把事务回滚到标记点;

        7:SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

        MYSQL 事务处理主要有两种方法:

        1、用 BEGIN, ROLLBACK, COMMIT来实现

          BEGIN 开始一个事务

          ROLLBACK 事务回滚

          COMMIT 事务确认

      2、直接用 SET 来改变 MySQL 的自动提交模式:

          SET AUTOCOMMIT=0 禁止自动提交

          SET AUTOCOMMIT=1 开启自动提交

十五:ALTER命令

       1:ALTER TABLE 语句插入删除

        删除:ALTER TABLE testalter_tbl DROP i;

          增加: ALTER TABLE testalter_tbl ADD i INT;

        修改字段类型:

           modify:ALTER TABLE testalter_tbl MODIFY c CHAR(10);    修改c的类型为char(10)

           change:ALTER TABLE testalter_tbl CHANGE i j BIGINT;

        修改字段默认值:

           ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;

        删除字段默认值:

          ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;

        修改表名:

          alert table testalert_tbl rename to alter_test;

十六:索引

 

十七:临时表

        创建临时表:      

            CREATE TEMPORARY TABLE SalesSummary (
              product_name VARCHAR(50) NOT NULL
              , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00
              , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00
              , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0
            );

        修改临时表:           

            INSERT INTO SalesSummary
              (product_name, total_sales, avg_unit_price, total_units_sold)
              VALUES
              ('cucumber', 100.25, 90, 2);

        查询临时表:       

            SELECT * FROM SalesSummary;
        删除临时表:
            
DROP TABLE SalesSummary;

十八:复制表

         1:执行SHOW CREATE TABLE runoob_tbl \G;得到创建runoob_tbl 的语句

         2:执行创建runoob_tbl 的语句,并修改表名

         3:将原表中的数据select复制过来

十九:元数据

        SELECT VERSION( )           服务器版本信息
        SELECT DATABASE( )        当前数据库名 (或者返回空)
        SELECT USER( )                 当前用户名
        SHOW STATUS         服务器状态
        SHOW VARIABLES             服务器配置变量

          

二十:序列使用

         1:auto_increment自增

           id INT  AUTO_INCREMENT,

        2:重置序列

          如果删除了自增的id部分值,则剩下的id不是连续的,怎样设置为连续          

          mysql> ALTER TABLE insect DROP id;    
          mysql> ALTER TABLE insect
              -> ADD id INT AUTO_INCREMENT FIRST,
              -> ADD PRIMARY KEY (id);
       3:设置ip的起始值
          
ALTER TABLE t AUTO_INCREMENT = 100;

 

二十一:处理重复数据

        1:防止重复数据的方法有设置主键和唯一索引

           设置双主键         

         CREATE TABLE person_tbl
          (
           first_name CHAR(20) NOT NULL,
           last_name CHAR(20) NOT NULL,
           sex CHAR(10),
           PRIMARY KEY (last_name, first_name)
        );
        唯一索引
         CREATE TABLE person_tbl
         (
          first_name CHAR(20) NOT NULL,
          last_name CHAR(20) NOT NULL,
          sex CHAR(10)
          UNIQUE (last_name, first_name)
         );
           2:统计重复数据

          SELECT COUNT(*) as repetitions, last_name,fist_name
          from person_tbl
          GROUP BY lst_name, fist_name
          HAVING repetitons >1;

       3:过滤重复数据

         方法1;distinct

          select distinct last_name, fist_name from person_tbl;

        方法2:grop by

         select last_name, fist_name from person_tbl  GROUP BY (last_name, first_name);

二十二:MySQL导入出数据

        1:select into outfile语句

        select * from user_img into outfile "/tmp/mysqluser.txt";

        会出现权限报错:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

        因为导出只能导出到规定文件中

        mysql> show global variables like '%secure%';

        进行查看:

               +----------------------+---------------------------+

        | Variable_name  | Value                       | 
        +------------------- -+---------------------------+
        | secure_auth      | ON                           |
        | secure_file_priv | /var/lib/mysql-files/- |
        +---------------------+---------------------------+

        可知我本地的文件只能复制到/var/lib/mysql-files/目录下      

        mysql> select * from user_img into outfile "/var/lib/mysql-files/user_img.txt";
           Query OK, 0 rows affected (0.11 sec)

        导出为csv格式

        mysql> SELECT * INTO OUTFILE '/var/lib/mysql-files/user_1.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM user;
            Query OK, 2 rows affected (0.00 sec)

        mysqldump导出数据做备份

        #mysqldump -uroot -p -h127.0.0.1 --opt xserver > xserver.sql

        将备份的数据导入到数据库

        mysql -u用户名 -p -h127.0.0.1 --default-character-set=utf8 数据库 < 需要导入的数据库文件.sql

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mySQL 操作
数据库操纵语言
49 0
MySQL并行复制
一、MySQL的主从复制 1.1 主从复制基本原理   MySQL的主从架构依赖于MySQL Binlog功能,Master节点上产生Binlog并且写入到文件中。  Master节点上启动一个DUMP线程:当Slave节点I/O线程连接Master时,Master创建这个线程,DUMP线程负责从Master的binlog文件读取记录,然后发送给Slave。
743 0
在msys里进行复制和粘贴操作
You can copy text from an MSYS window to the clipboard simply by selecting the text you want to copy.
1042 0
mysql并行复制
并行复制 社区版5.6中新增 并行是指从库多线程apply binlog 库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组) 设置 set global slave_parallel_workers=10;设置sq...
1046 0
+关注
yaohong
云计算
127
文章
1
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载