zoukankan      html  css  js  c++  java
  • Mysql进阶-day1


     Mysql数据库启动-关闭-登录-查看帮助

    #单实例启动
    1./etc/init.d/mysqld start
    
    2.service mysqld start/restart
    
    3./usr/local/mysql/binmysqld_safe --user=mysql &
    
    #单实例关闭
    1./etc/init.d/mysqld stop
    
    2.service mysqld stop
    
    3.pkill mysqld #最好不要使用这种方法,可能会引起数据丢失
    
    
    
    #单实例登录
    mysql <刚装完无密码
    mysql -uroot <刚装完无密码
    mysql -uroot -p <==这里标准的dba命令行登录命令
    mysql -uroot -p'123' >非脚本不适用
    
    #查看帮助
    [root@localhost /]# mysql --help
    mysql> help  #登陆后
    mysql> help show databases; #查看show databases怎么用
    

    Mysql数据库丢失后多种找回密码方法实践

    #方法1:
    [root@localhost ~]# /etc/init.d/mysqld stop
    [root@localhost ~]# mysqld_safe --skip-grant-tables &
    [root@localhost ~]# mysql #直接进入
    mysql> update mysql.user set password=PASSWORD("123") where user="root" and host="localhost";
    mysql> flush privileges; #刷新
    [root@localhost ~]# pkill mysql #杀掉mysql
    [root@localhost ~]# /etc/init.d/mysqld start #再次启动mysql
    [root@localhost ~]# mysql -uroot -p #输入刚才设置的密码
    
    #多实例的话,需要先杀掉mysql,然后mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-table &,然后mysql -u root -p -S /data/3306/mysql.sock #登录时空密码
    

    语言简介与SQL分类介绍

      SQL,英文全称Structured Query Language,中文意思是结构化查询语言,它是一种对关系数据库中的数据进行定义和操作的句法,为大多数关系数据库管理系统所支持的工业标准

      结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非国产化变成语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使他具有极大的灵活性和强大的功能

      结构化查询语言包含6个部分:
      一.数据查询语言(DQL):

        其语句,也称为“数据检索语句”,用以从表中获取数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用的最多的动词,其他DQL常用的保留自由WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。

      二.数据操作语言(DML):

        其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。

      三.事务处理语言(TPL):

        它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK

      四.数据控制语言(DCL):

        它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。

      五.数据定义语言(DDL):

        其语句包括动词CREATE和DROP。在数据库中创建新表和删除表(CREAT TABLE或DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中或暗的数据有关的保留字。它也是动作查询的一部分

      六.指针控制语言(CCL):

        它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

      常见分类:

        SQL分类:

        DDL------数据定义语言(CREATE,ALTER,DROP)

        DML------数据操纵语言(SELECT,INSTER,DELETE,UPDATE)

        DCL------数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

    Mysql常用基础命令

    1.建库、查库

    #建库
    命令:create database <数据库名>
    mysql> create database daniel;
    Query OK, 1 row affected (0.00 sec)
    
    查看建库的语句
    mysql> show create database daniel;
    +----------+-------------------------------------------------------------------+
    | Database | Create Database                                                   |
    +----------+-------------------------------------------------------------------+
    | daniel   | CREATE DATABASE `daniel` /*!40100 DEFAULT CHARACTER SET latin1 */ |
    +----------+-------------------------------------------------------------------+
    1 row in set (0.00 sec)
    #latin1:字符集,默认的
    
    查询库
    mysql> show databases like 'dan%'; #模糊查询
    +-----------------+
    | Database (dan%) |
    +-----------------+
    | daniel          |
    +-----------------+
    1 row in set (0.00 sec)
    
    创建一个gbk字符集库
    mysql> create database daniel_gbk default character set gbk collate gbk_chinese_ci;
    Query OK, 1 row affected (0.00 sec)
    
    创建一个utf8字符集库
    mysql> create database daniel_utf8 character set utf8 collate utf8_general_ci;
    Query OK, 1 row affected (0.00 sec)
    
    #删库
    命令:DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
    mysql> drop database daniel;
    
    Query OK, 0 rows affected (0.07 sec)
    

    2.连接库、删库、删除用户

    #连接数据库
    命令:use <db_name>,切换数据库,跟cd切换目录一样
    
    mysql> use daniel_gbk;
    Database changed
    
    #查看你在哪个数据库里面,相当于pwd
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | daniel_gbk |
    +------------+
    1 row in set (0.00 sec)
    
    #查看当前用户
    mysql> select user();
    +----------------+
    | user()         |
    +----------------+
    | root@localhost |
    +----------------+
    1 row in set (0.00 sec)
    
    #查看当前用户
    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 5.5.32    |
    +-----------+
    1 row in set (0.00 sec)
    
    #查看表
    mysql> show tables;
    Empty set (0.00 sec)
    
    #查看系统账号
    mysql> select user,host from mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | root | 127.0.0.1 |
    | root | ::1       |
    |      | C-server  |
    | root | C-server  |
    |      | localhost |
    | root | localhost |
    +------+-----------+
    6 rows in set (0.00 sec)
    
    #删除系统多余账号
    mysql> drop user ''@'localhost';
    
    #大写的可能删不掉,我们换一种办法
    mysql> delete from mysql.user where user='' and host='C-server';
    Query OK, 1 row affected (0.00 sec)
    

    3.单机及多机用户授权

    1.先建用户,再授权
    mysql> create user 'daniel'@'localhost' identified by '123';
    Query OK, 0 rows affected (0.00 sec) #创建用户,赋予密码,允许本机连接
    
    mysql> grant all on daniel_gbk.* to daniel@'localhost';
    Query OK, 0 rows affected (0.00 sec) #授权
    
    2.直接grant
    mysql> grant all privileges on daniel_utf8.* to danieu_tf8l@'localhost' identified by '1234';
    Query OK, 0 rows affected (0.00 sec)
    
    3.多机授权
    mysql> grant all privileges on daniel_utf8.* to daniel_utf8@'10.0.0.%' identified by '1234'; 
    Query OK, 0 rows affected (0.00 sec) #允许10.0.0.0网段连接
    
    4.远程连接
    mysql -uroot -p -h 10.0.0.1
    
    5.all privileges是什么?
    #这是一个权限包
    
    5.收回权限
    mysql> revoke insert on daniel_utf8.* from  daniel@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    mysql>show grants for daniel_utf8@'localhost';
    GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `daniel_utf8`.* TO 'daniel_utf8l'@'localhost #查看还剩多少权限,这就是ALL PRIVILEGES权限包所有的权限,加一个INSERT
    
    #生产环境授权用户建议
    一般来说我们只给select,insert,update,delete权限,再加上create,drop。
    
    
    #读库写库的不同
    写库
    blog  123 3306 10.0.0.7
    写库
    blog 123 3306 10.0。0.8
    #隐藏的不同:授权的权限不同
    

    4.表操作

    #建表
    命令:create <表名>(<字段名1 > <类型 n> ....<字段名 n><类型n>);
    
    mysql> create table test(id int(4) not null primary key auto_increment, name char(20) not null);
    Query OK, 0 rows affected (0.01 sec)
    
    #查询表
    mysql> show create table testG;
    *************************** 1. row ***************************
           Table: test
    Create Table: CREATE TABLE `test` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `name` char(20) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    #Mysql字段类型
    1.INT(M)型:正常大小证书类型
    2.DOUBLE[(M,D)] [ZEROFILL]型:正常大小(双精密)浮点数字类型
    3.DATE日期类型:支持的范围是1000-01-01到9999-12-31.MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列
    4.CHAR(M)型:定长字符串类型,当存储是,总是使用空格填满右边到指定的长度
    5.BLOG TEXT类型,最大长度为65535(2^16-1)个字符
    6.VARCHARE型:变长字符串类型
    
    #插入数据
    命令:insert into <表名> [(<字段名1>[,..<字段名 n>])] values (值1)[,(值n)];
    mysql> insert into test(id,name) values(001,'zhaoyue');
    Query OK, 1 row affected (0.01 sec)
    
    批量插入
    mysql> insert into test values(4,'a'),(5,'b');
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> insert into test(name) values('c'),('d'),('e');
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0 #提升效率,因为建表的时候auto_increment,所以id是自增的
    
    #查询
    命令:select<字段 1,字段 2..>from <表名>where<表达式>
    mysql> select * from test; #查询所有航
    
    mysql> select * from test limit 0,2; #从第0行开始查,查2行记录,不加0就是查找2两行,一个用处
    
    mysql> select * from test order by id desc; #以id为标准,倒序
    
    mysql> select * from test order by id asc; #以id为标准,正序
    
    mysql> select * from test where name='a'; #查询名字,以name字段为基准
    
    mysql> select * from test where id=1; #查询,id可以不加单引号
    
    mysql> select * from test where id<5 and id >2; #组合查询,and为关键字,逻辑和,必须两个都满足才会出结果
    
    mysql> select * from test where id<5 and id >2; #只要满足一个即可
    
    #多表查询,先建表
    
    创建学生表
    create table student(
    Sno int(10) NOT NULL COMMENT 'No.',
    Sname varchar(16) NOT NULL COMMENT 'name',
    Ssex char(2) NOT NULL COMMENT 'Gender',
    Sage tinyint(2) NOT NULL default '0' COMMENT 'age',
    Sdept varchar(16) default NULL COMMENT 'Department',
    PRIMARY KEY (Sno),
    key index_Sname (Sname)
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
    创建课程表
    create table course(                                                                                 
    Cno int(10) NOT NULL COMMENT 'kechenghao',
    Cname varchar(64) NOT NULL COMMENT 'kechengming',
    Ccredit tinyint(2) NOT NULL COMMENT 'xuefen',
    PRIMARY KEY (Cno)
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;
    
    创建选课表
    create table `SC` (
    SCid int(12) NOT NULL auto_increment COMMENT 'zhujian',
    `Cno` int(10) NOT NULL COMMENT 'kechenghao',
    `Sno` int(10) NOT NULL COMMENT 'xuehao',
    `Grade` tinyint(2) NOT NULL COMMENT 'xueshengchengji',
    PRIMARY KEY (`SCid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    学生表插入数据
    INSERT INTO student values(0001,'a','man',24,'a');
    INSERT INTO student values(0002,'b','man',24,'b');
    INSERT INTO student values(0003,'c','man',24,'c');
    INSERT INTO student values(0004,'d','man',24,'d');
    INSERT INTO student values(0005,'e','man',24,'e');
    
    课程表插入数据
    INSERT INTO course values(1001,'C','5');
    INSERT INTO course values(1002,'JAVA','4');
    INSERT INTO course values(1003,'MYSQL','2');
    INSERT INTO course values(1004,'yunwei',9);
    INSERT INTO course values(1005,'math',3);
    
    选课表插入数据
    INSERT INTO SC(Sno,Cno,Grade) values(0001,1001,4);
    INSERT INTO SC(Sno,Cno,Grade) values(0001,1002,3);
    INSERT INTO SC(Sno,Cno,Grade) values(0001,1003,1);
    INSERT INTO SC(Sno,Cno,Grade) values(0001,1004,6);
    INSERT INTO SC(Sno,Cno,Grade) values(0002,1001,3);
    INSERT INTO SC(Sno,Cno,Grade) values(0002,1002,2);
    INSERT INTO SC(Sno,Cno,Grade) values(0002,1003,2);
    INSERT INTO SC(Sno,Cno,Grade) values(0002,1004,8);
    INSERT INTO SC(Sno,Cno,Grade) values(0003,1001,4);
    INSERT INTO SC(Sno,Cno,Grade) values(0003,1002,4);
    INSERT INTO SC(Sno,Cno,Grade) values(0003,1003,2);
    INSERT INTO SC(Sno,Cno,Grade) values(0003,1004,8);
    INSERT INTO SC(Sno,Cno,Grade) values(0004,1001,1);
    INSERT INTO SC(Sno,Cno,Grade) values(0004,1002,1);
    INSERT INTO SC(Sno,Cno,Grade) values(0004,1002,1);
    INSERT INTO SC(Sno,Cno,Grade) values(0004,1003,2);
    INSERT INTO SC(Sno,Cno,Grade) values(0004,1004,3);
    INSERT INTO SC(Sno,Cno,Grade) values(0005,1001,5);
    INSERT INTO SC(Sno,Cno,Grade) values(0005,1002,3);
    INSERT INTO SC(Sno,Cno,Grade) values(0005,1003,2);
    INSERT INTO SC(Sno,Cno,Grade) values(0005,1004,9);
    
    
    #查询总分
    mysql> select  Sname,sum(Grade) from SC a,student b where a.Sno=b.Sno;
    mysql> select  Sname,sum(Grade) from SC a,student b where a.Sno=b.Sno group by Sname;
    
    #使用explain查询select语句使用索引情况
    mysql> explain select * from test where name='daniel'G;
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test
             type: ALL
    possible_keys: NULL #没有走索引
              key: NULL  #没有走索引
          key_len: NULL
              ref: NULL
             rows: 8
            Extra: Using where
    1 row in set (0.00 sec)
    
    mysql> explain select * from test where id=6G;
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: test #表
             type: const #类型
    possible_keys: PRIMARY #索引
              key: PRIMARY #索引
          key_len: 4
              ref: const
             rows: 1
            Extra: 
    1 row in set (0.01 sec)
    

    5.更新及删除库操作

    mysql> select * from test;
    +----+---------+
    | id | name    |
    +----+---------+
    |  1 | zhaoyue |
    |  2 | daniel  |
    |  3 | jack    |
    |  4 | a       |
    |  5 | b       |
    |  6 | c       |
    |  7 | d       |
    |  8 | e       |
    +----+---------+
    #修改
    
    #修改id为7的name
    mysql> update test set name='faker' where id=7;
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    #修改name为faker的id
    mysql> update test set id=100 where name='faker';
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    #删除
    
    #删除id=8的
    mysql> delete from test where id=8;
    Query OK, 1 row affected (0.00 sec)
    
    #truncate table 表名--清除表内所有数据
    mysql> truncate table test;
    Query OK, 0 rows affected (0.00 sec)
    

    表中增删改字段(dba操作)

    命令:alter table 表名 add 字段 类型 其他;
    例如:在表中添加字段
    
    mysql> desc test; #现在test表只有两列
    +-------+----------+------+-----+---------+----------------+
    | Field | Type     | Null | Key | Default | Extra          |
    +-------+----------+------+-----+---------+----------------+
    | id    | int(4)   | NO   | PRI | NULL    | auto_increment |
    | name  | char(20) | NO   |     | NULL    |                |
    +-------+----------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    
    mysql> alter table test add sex char(4);
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0 #添加一个sex段
    
    #默认放在最后一列,我要插在第一列后面怎么弄?
    mysql> alter table test add age int(4) after id;
    Query OK, 0 rows affected (0.01 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    #修改表名
    mysql> rename table test to new_test;
    Query OK, 0 rows affected (0.02 sec)
    

  • 相关阅读:
    IbatisNet 快速开发使用 之一
    C#开发和调用Web Service
    如何构建银行数据仓库
    SQLSREVER如何创建和使用动态游标
    一个sql语句,包含有几乎所有标准查询语法
    深入研究SQL结构化查询语言中的LIKE语句
    数据库正规化和设计技巧
    黑客攻破SQL服务器系统的十种方法
    实用的存储过程
    数据库人员手边系列:SQL Server常见连接错误
  • 原文地址:https://www.cnblogs.com/wazy/p/8418192.html
Copyright © 2011-2022 走看看