zoukankan      html  css  js  c++  java
  • MySQL基本指令

    第一章 MySQL概述

    1.1  MySQL简介

      由瑞典MySQL AB公司开发,后被Oracle收购。

      开源工具,不具有正版和盗版之分。分为社区办和企业版。

      是世界上最流行的开源数据库。全称为My structured query language,用于存储数据、数据的查询、更新和管理关系数据库系统(relational database management system)

    1.2 基本概念

          数据库:电子化的文件柜;

          关系型数据库:采用二位表格结构来组织数据的数据库,有行和列。即将数据组织为相关的行和列;

          表可以当做一个文件柜,将其中的一行数据看做一个文件,也称之为记录;

          列:即一个字段;

          主键:为了确保表中每一条记录的唯一性,可对多个字段进行主键设置;

          索引:对表中数据进行排序,以快速查找信息;

          外键:如果表中的一个字段是另外一个表中的主键,则该字段为外键。可以建立两个表之间的联系。

    1.3 安装及配置

    1. MSI安装(Windows Installller)(容易掌握)
    2. ZIP安装:可访问后面的网址,有详细教程:http://www.cnblogs.com/Deribs4/p/5415156.html

    1.4 MySQL目录结构

      bin: 存储可执行文件;

      data: 存储数据文件;

      docs: 存储文档;

      include: 存储包含的头文件;

      lib: 存储库文件;

      share: 错误消息和字符集文件

    1.5 使用MySQL

    1.5.1停止和启动MySQL服务

      1. 通过【计算机-服务-MySQL】右击进行关闭/启动;

      2. 通过win+R 呼出cmd ,使用管理员权限,输入命令行:

             启动:net start mysql

             关闭:net stop mysql

    1.5.2 MySQL的登陆登出

    1. mysql -uroot -p -P3306 -h     :端口号默认3306,本地地址为127.0.0.1

                             

       2.mysql>exit    mysql>quit     mysql>q   登出数据库。

       3.可以用键盘的上下键翻阅历史命令行。

       4.使用cls回车进行命令行清屏。

    1.5.3修改 MySQL提示符

      1. mysql -uroot -ppassword --prompt h

        用户名  密码    修改命令  指定为localhost

      2. mysql>PROMPT 提示符。

    1.5.4 MySQL常用命令

            

    1.5.5 MySQL语句规范

           

    1.5.6 MySQL操作

    1.5.6.1 创建数据库

      mysql>CREATE DATABASE test1;

    1.5.6.2 查看当前服务器下的数据库列表

      show databases;

      show create database test;

    1.5.6.3 修改数据库

      alter database test character set = utf8;

    1.5.6.4 删除数据库

      drop database test;

    第二章  数据类型和操作数据表

    2.1 MySQL数据类型

      整型、 浮点型、日期格式、字符型

    2.2 创建数据表

    2.2.1 打开数据库 USE

    C:Windowssystem32>mysql -uroot -proot -P3306 -h127.0.0.1

    mysql>SHOW DATABASES;

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

    | Database           |

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

    | information_schema |

    | mysql              |

    | performance_schema |

    | sys                |

    | test1              |

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

    mysql> USE test1;            //打开数据库

    mysql>SELECT DATABASE();    //显示当前选择的数据库名称

    2.2.2 创建数据表 CREATE TABLE

      CREATE TABLE[IF NOT EXIT] table_name(

      column_name data_type,

      ...

      )

    mysql> CREATE TABLE table1(

        -> username VARCHAR(20),

        -> age TINYINT UNSIGNED,

        -> salary FLOAT(8,2) UNSIGNED    //最后一个字段后面不需要加逗号

    -> );

    2.3 删除数据表DROP TABLE

      DROP TABLE table1;

    2.4 修改数据表

    2.4.1 添加单列 ADD

      ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]

      在不指定新加入列位置的情况下,将会默认建在数据表的最下方。

    mysql> ALTER TABLE user1 ADD password VARCHAR(32) NOT NULL AFTER id;

    Query OK, 0 rows affected (1.07 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> SHOW COLUMNS FROM user1;

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

    | Field    | Type                 | Null | Key | Default | Extra          |

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

    | id       | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |

    | password | varchar(32)          | NO   |     | NULL    |                |

    | username | varchar(10)          | NO   |     | NULL    |                |

    | pid      | smallint(5) unsigned | YES  | MUL | NULL    |                |

    | age      | tinyint(3) unsigned  | NO   |     | 10      |                |

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

    2.4.2 添加多列

      ALTER TABLE tbl_name ADD [COLUMN]( col_name column_definition, ...)

      不能指定位置关系,默认创建在数据表的最下方。

    2.4.3 删除列 DROP

      ALTER TABLE tbl_name DROP col_name

      mysql> ALTER TABLE user1 DROP id,DROP age;

    2.4.4 修改列定义

      ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

      mysql> ALTER TABLE user2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;

      //将大类型的数据改为小类型时,可能会发生数据丢失,需要注意。

    2.4.5 修改列名称

      ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]

      mysql> ALTER TABLE user2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL;

    2.4.6 修改数据表名

      ALTER TABLE tbl_name RENAME TO new_tbl_name;

      ALTER TABLE uer2 RENAME TO user2gogogo;

    2.5 查看数据表SHOW TABLES

      SHOW TABLES [ FROM db_name]

      mysql> SHOW TABLES FROM mysql;    //当前数据库位置不会发生改变

      如果用户当前在test1的数据库中,选择查看其它数据库中的数据表,是不会改变当前所在的位置的。

    2.5.1 查看数据表结构SHOW COLUMNS FROM

      SHOW COLUMNS FROM table1;     //接上述2.1.5.2

    2.6 记录的插入和查找

    2.6.1 插入记录INSERT

      INSERT [INTO] table1_name[(col_name,...)] VALUES(val,...)

      当省略上述col_name所对应的字段名时,默认要对所有的字段都进行赋值。

      mysql> INSERT table1 VALUES("Tom",27,5566.23);   //对所有的字段进行赋值

      mysql> INSERT table1(username,age) VALUES("Kate",23); //部分字段赋值

    2.6.2 查找记录 SELECT

      SELECT expr, ... FROM tb1_name

      mysql> SELECT * FROM table1;

      上述*号指的是所有的字段,而不是所有的记录。

    2.7 必填项设置NULL & NOT NULL

      NULL:允许为空值;

      NOT NULL:不允许为空值;

    mysql> CREATE TABLE table2(

        -> username VARCHAR(20) NOT NULL,

        -> age TINYINT UNSIGNED NULL

    -> );

    mysql> INSERT table2 VALUES(NULL,23);

    ERROR 1048 (23000): Column 'username' cannot be null   //此时不允许名字为空

    2.8 Mysql自动编号 AUTO_INCREMENT

       自动编号,必须与主键结合使用;

       默认情况下,起始值为1,增量为1

       必须为数值型,可以为floatdouble型,但是其小数位数必须为0。例如float(6,0)

      自动编号中间被删除后,即时不连续,也不会再自动补充

    mysql> CREATE TABLE table3(

        -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,   //自动编号

        -> username VARCHAR(30) NOT NULL

    -> );

    mysql> INSERT table3(username) VALUES("Jerry");     //uername赋值,自动编号不管

    Query OK, 1 row affected (0.38 sec)

    mysql> INSERT table3(username) VALUES("Mary");

    Query OK, 1 row affected (0.05 sec)

    mysql> INSERT table3(username) VALUES("Mike");

    Query OK, 1 row affected (0.04 sec)

    mysql> SELECT* FROM table3;

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

    | id | username |

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

    |  1 | Jerry    |

    |  2 | Mary     |

    |  3 | Mike     |

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

    2.9 主键约束 PRIMARY KEY

      一张数据表中只能有一个主键;

      主键保持记录的唯一性;

      自动为NOT NULL,不允许为空;

      接上述2.6章节中的内容,由于创建的table3中,指定id为主键PRIMARY_KEY

     

    mysql>SHOW COLUMNS FROM table3;

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

    | Field    | Type                 | Null | Key  | Default | Extra        |

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

    | id       | smallint(5) unsigned    | NO  | PRI | NULL   | auto_increment |

    | username | varchar(30)           | NO  |    | NULL   |             |

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

    2 rows in set (0.00 sec)

     

      主键表示在该数据表中,该条记录的唯一性。在一个数据表中,2条记录的主键不允许相同。

    2.10 唯一约束 UNIQUE KEY

      保证记录的唯一性;

      字段可以为空值,为NULL

      一张数据表上可以存多个unique key

     

    mysql> CREATE TABLE table5(

        -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

        -> username VARCHAR(20) UNIQUE KEY,

        -> age TINYINT UNSIGNED NOT NULL

    -> );

     

    mysql> SHOW COLUMNS FROM table5;

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

    | Field    | Type              | Null   | Key  | Default | Extra         |

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

    | id       | smallint(5) unsigned  | NO  | PRI  | NULL   | auto_increment |

    | username | varchar(20)         | YES  | UNI  | NULL  |              |

    | age      | tinyint(3) unsigned   | NO  |     | NULL   |              |

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

    mysql> INSERT table5 (username,age) VALUES("Tom",23);

    Query OK, 1 row affected (0.37 sec)

     

    mysql> INSERT table5 (username,age) VALUES("Tom",23);

    ERROR 1062 (23000): Duplicate entry 'Tom' for key 'username'

      //限制数值唯一。虽然可以为空值,但是unique key往往整个数据表中只有一条记录的unique key为空。

    2.11 默认约束 DEFAULT

      当插入记录时,如果没有明确为字段赋值,则自动赋予其默认值。

    2.12 外键约束 FOREIGN KEY

      保持数据完整性,一致性;

      实现数据一对一或者一对多的关系;

      决定了MySQL是一种关系型数据库(Relational database management system)。

      外键约束的要求:

        1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表;

    (注:具有外键链的表称为子表,子表所参照的表称为父表)

        2.数据表的存储引擎必须是InnoDB

        3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同;

        4.外键列和参照列必须创建索引。如果参照列不存在索引的话,MySQL将会自动创建索引。

    2.12.1 编辑数据表默认存储引擎

      在MySQL编辑文件my.ini中找到

      default-storage-engine = INNODB

      修改完成后重启MySQL

    2.12.2 设置外键

    mysql> CREATE TABLE province(

        -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

        -> name VARCHAR(20) NOT NULL

    -> );

     

    mysql> CREATE TABLE users(

        -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

        -> username VARCHAR(20) NOT NULL,

        -> pid SMALLINT UNSIGNED,             //数值类型和有无符号必须与父表相同

        -> FOREIGN KEY (pid) REFERENCES province (id)  //指定pid为外键,并链接到province

    -> );

      上述代码中,包含外键的user表为子表,而子表所参照的表province为父表

    2.12.3 索引查看

    mysql> SHOW INDEXES FROM provinceG;

    *************************** 1. row ***************************

    Table: province

    Non_unique: 0

    Key_name: PRIMARY

    Seq_in_index: 1

    Column_name: id

    Collation: A

    Cardinality: 0

    Sub_part: NULL

    Packed: NULL

    Null:

    Index_type: BTREE

    Comment:

    Index_comment:

      即:创建主键时,会自动创建索引。

    2.12.4 外键约束的参照操作

      即:在外键约束创建以后,在更新表的时候,子表是否也进行相应的操作。

    mysql> CREATE TABLE user1(

        -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

        -> username VARCHAR(10) NOT NULL,

        -> pid SMALLINT UNSIGNED,

        -> FOREIGN KEY (pid) REFERENCES province (id) ON DELETE CASCADE    //指定pid为外键

    -> );

    mysql> INSERT province (name) VALUES("Apple");

    mysql> INSERT province (name) VALUES("Watermallon");

    mysql> INSERT province (name) VALUES("Banana");

    mysql> SELECT* FROM province;

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

    | id  | name        |

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

    |  1 | Apple        |

    |  2 | Watermallon  |

    |  3 | Banana       |

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

    mysql> INSERT user1(username,pid) VALUES("Huawei",3);

    mysql> INSERT user1(username,pid) VALUES("iPhone",1);

    mysql> INSERT user1(username,pid) VALUES("OPPO",2);

    mysql> SELECT* FROM user1;

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

    | id | username | pid   |

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

    |  2 | Huawei  |    3 |

    |  3 | iPhone  |    1 |

    |  4 | OPPO   |    2 |

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

    mysql> DELETE FROM province WHERE id=3;   //从父表中删除id=3的记录

    mysql> SELECT* FROM province;

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

    | id | name        |

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

    |  1 | Apple       |

    |  2 | Watermallon |

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

    2 rows in set (0.00 sec)                    //父表中id=3的记录被删除了

    mysql> SELECT* FROM user1;

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

    | id | username | pid  |

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

    |  3 | iPhone   |    1 |

    |  4 | OPPO     |    2 |

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

    2 rows in set (0.00 sec)                    //子表中也被删除

    第三章  约束

    3.1约束的概念及分类

      保证数据的完整性和一致性;

      约束分为表级约束和列级约束:针对1个字段的成为列级约束;针对2个及以上字段来进行使用,称为表级约束;

      列级约束:既可以在列定义时声明,也可以在列定义后声明;

      表级约束:只能在列定义以后再声明;表级约束在实际开发过程中几乎很少用到。

     

       按照功能划分,分为:

        NOT NULL 非空约束;

        PRIMARY KEY 主键约束;

        UNIQUE KEY 唯一约束;

        DEFAULT 默认约束;

        FOREIGN KEY 外键约束;

    3.2添加/删除主键约束

      ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type](index_col_name, ...)

     

      mysql> ALTER TABLE user2 ADD CONSTRAINT PK_user2_id PRIMARY KEY(id);   //添加主键约束

      mysql>ALTER TABLE user2 DROP PRIMARY KEY;                           //删除主键约束

    3.3添加/删除唯一约束

      ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY][index_name][index_type](index_col_name, ...)

     

      ALTER TABLE tbl_name DROP {INDEX|KEY}index_name

    3.4添加/删除外键约束

      ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY[index_type](index_col_name, ...) reference_definition

     

      ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

    3.5添加/删除默认约束

      ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFULT literal | DROP DEFAULT}

     

      mysql> ALTER TABLE user2 ALTER id SET DEFAULT 15;       //设定默认值

      mysql> ALTER TABLE user2 ALTER id DROP DEFAULT;        //去除默认值

    第四章  记录的操作

    4.1插入记录

    4.1.1 INSERT

      INSERT [INTO] tbl_name [(col_name,...)] {VALUES |VALUE}({expr|DEFAULT},...),(...),...

     

      单条插入:

        mysql> INSERT user4 VALUES(NULL,"Jerry","password",34,1);

      多条插入:

        mysql> INSERT user4 VALUES(NULL,"Alin","11223344",19,0),(NULL,"Bob","12345677",DEFAULT,1);

        //多条数据之间使用逗号作为分隔符,使用DEFAULT赋值时默认使用默认值。

    4.1.2 INSERT SET

      INSERT [INTO] tbl_name SET col_name = {expr|DEFAULT},...

      与上述直接使用INSERT语句插入的区别在于,此方法可以使用子查询(SubQuery)。在实际开发过程中,这种方式使用较少,一次只能插入一条记录。

      mysql> INSERT user4 SET username="Cherry",password="password";

    4.1.3 INSERT SELECT

      INSERT [INTO] tbl_name [(col_name, ... )] SELECT ...

      先按照select语句查找出结果,再将新的记录添加在查找到的数据附近。

    4.2删除记录

      DELETE FROM tbl_name [WHERE where_condition]

      mysql> DELETE FROM user4 WHERE id=3;

    4.3更新记录

      UPDATE [LOW PROIRITY] [IGNORE] table_reference SET col_name1 = {expr1 | DEFAULT}[col_name2 = {expr2 | DEFAULT}]...[WHERE where condition]

      mysql> UPDATE user4 SET age=age+5;

      mysql>UPDATE user4 SET age=age+id WHERE id%2=0;

    4.4查找记录

      数据表的操作中,查找操作几乎占到了80%,本节是重中之重。

    4.4.1 SELECT_expr

      查询表达式:

      每个表达式表示想要的一列,必须至少有一个;

      多个列之间以英文逗号分隔;

      星号(*)表示所有列。tbl_name.*可以表示命名表的所有列;  //user4.id,user4.username

      查询表达式可以使用[AS]alias_name为其赋予别名,别名可用于BROUP BYORDER BY,或HAVING子句;

    1. 查询列:

        SELECT id,username,password FROM user4;   

        查询时,列显示的先后顺序可以和原表有所不同。

      2.关于别名:

    mysql> SELECT username AS name,password AS mima FROM user4;

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

    | name   | mima   |

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

    | Jerry  | password |

    | Alin   | 11223344 |

    | Cherry | password |

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

    使用别名时,一定要加上AS关键词,否则如果忘记了逗号,数据表会错把第二个名字当做别名显示。

    4.4.2 WHERE

       where用于对条件的过滤,如果没有使用where则默认显示所有的记录

      在where表达式中,可以使用MySQL支持的函数或运算符

    4.4.3 GROUP BY

      SELECT sex FROM user4 GROUP BY sex;

      对查询到的结果依据by后面的条件进行分组。

    4.4.4 HAVING

      对查询到结果进行分组时,使用having对分组进行条件的指定。

    4.4.5 ORDER BY

      [ORDER BY {col_name | expr |position}[ASC | DESC], ... ]

      用于对查询结果进行排序。

      mysql> SELECT* FROM user4 ORDER BY id DESC;

      依次按照第一个条件、第二个条件进行排序。

    4.4.6 LIMIT

      限制查询结果返回的数量。默认情况是返回查询到的所有记录的。

      [LIMIT {[offset,] row_count | row_count OFFSET offset}]

      SELECT* FROM user4 LIMIT 3;        //从查询结果中返回3条数据

      SELECT* FROM user4 LIMIT 3,2;      //从查询到的第4条记录开始,返回2条记录。和数组相同从0开始计数。

  • 相关阅读:
    《Java数据结构与算法》笔记-CH4-5不带计数字段的循环队列
    《Java数据结构与算法》笔记-CH4-4循环队列
    效率方案:快速切换联调、测试、正式环境
    redis 安装、配置与测试
    计算机科学中的圣经
    自建主机
    正则表达式学习入门
    数据库查询语句缺失部分索引,引起的问题(20170209)
    redis 经验、问题以及其解决方案
    资讯周刊---20170210
  • 原文地址:https://www.cnblogs.com/May-study/p/7838475.html
Copyright © 2011-2022 走看看