MySQL基本指令

第一章 MySQL概述

1.1  MySQL簡介

  由瑞典MySQL AB公司開發,後被Oracle收購。html

  開源工具,不具備正版和盜版之分。分爲社區辦和企業版。mysql

  是世界上最流行的開源數據庫。全稱爲My structured query language,用於存儲數據、數據的查詢、更新和管理關係數據庫系統(relational database management system)sql

1.2 基本概念

      數據庫:電子化的文件櫃;數據庫

      關係型數據庫:採用二位表格結構來組織數據的數據庫,有行和列。即將數據組織爲相關的行和列;數組

      表能夠當作一個文件櫃,將其中的一行數據看作一個文件,也稱之爲記錄;服務器

      列:即一個字段;函數

      主鍵:爲了確保表中每一條記錄的惟一性,可對多個字段進行主鍵設置;工具

      索引:對錶中數據進行排序,以快速查找信息;ui

      外鍵:若是表中的一個字段是另一個表中的主鍵,則該字段爲外鍵。能夠創建兩個表之間的聯繫。spa

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:\Windows\system32>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 province\G;

*************************** 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開始計數。

相關文章
相關標籤/搜索