MySQL快速入門使用!!!#導入MD文檔圖片#

@tocmysql

鏈接MySQL

mysql -u root -p;     //登陸語句

Enter password:       //提示輸入密碼

查看當前數據庫

show databases;

例如:sql

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| chatgroup          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| user               |
+--------------------+
6 rows in set (0.01 sec)

其中,information_schema、mysq、performance_schema、sys爲數據庫默認的。<font color=red >千萬不要刪除</font>數據庫

chatgroup、user爲咱們建立的數據庫。markdown

建立數據庫

create database "數據庫名";

例如:ide

mysql> create database people;
Query OK, 1 row affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| chatgroup          |
| information_schema |
| mysql              |
| people             |
| performance_schema |
| sys                |
| user               |
+--------------------+
7 rows in set (0.00 sec)

建立數據庫時設置字符編碼

create database "數據庫名" character set utf8; 
或者:
create database "數據庫名" charset utf8;

直接建立的數據庫的編碼方式是MySQLM默認的編碼方式latin1(單字節編碼),若是要在數據庫中存放中文數據,設置數據庫的編碼方式爲utf8。性能

查看和顯示數據庫的編碼方式

show create database "數據庫名"

例如:編碼

mysql> show create database people;
+----------+----------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                    |
+----------+----------------------------------------------------------------------------------------------------+
| people   | CREATE DATABASE `people` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

建立一個使用utf8字符集,並帶校對規則的這個數據庫 。會對存入的數據進行檢查。

create database xxx character set utf8 collate utf8_general_ci;

修改數據庫編碼

alter database "數據庫名" character set "編碼方式"

例如:code

mysql> alter database people character set latin1;
Query OK, 1 row affected (0.00 sec)

mysql> show create database people;
+----------+------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                      |
+----------+------------------------------------------------------------------------------------------------------+
| people   | CREATE DATABASE `people` /*!40100 DEFAULT CHARACTER SET latin1 */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

刪除數據庫

drop database "庫名";

進入或切換數據庫

use "數據庫名";
或
use  "數據庫名"

剛鏈接數據庫的時候,沒有處於任何一個數據庫,若是要是要某個數據庫,就須要用 "use" 進入數據庫中。orm

<font color=red>use "數據庫名" 是SQL語句中惟一能夠省略分號的語句。</font>server

顯示當前數據庫

select database();

例如:

mysql> use people;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| people     |
+------------+
1 row in set (0.00 sec)

長時間操做數據庫時,若是在不少數據庫中來回切換後,查看當前的數據庫,避免操做錯了數據庫。

建立數據表

查看當前數據庫中的表

show tables;

例子:

mysql> show tables;
Empty set (0.00 sec)

該數據庫沒有表

建立表

create table "表名"(字段1 字段類型, 字段2 字段類型, 字段3 字段類型...);

create table chinese(pid INT, name CHAR(20), age INT);
mysql> create table chinese(pid INT, name CHAR(20), age INT);
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+------------------+
| Tables_in_people |
+------------------+
| chinese          |
+------------------+
1 row in set (0.00 sec)

顯示錶信息

show create table "表名";

顯示錶的字段信息,MySQL引擎和默認字符編碼等信息

mysql> show create table chinese;
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                       |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------+
| chinese | CREATE TABLE `chinese` (
  `pid` int DEFAULT NULL,
  `name` char(20) DEFAULT NULL,
  `age` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

更好的展現表的信息

describe "表名";
或
desc "表名";

例如:

mysql> describe chinese;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| pid   | int      | YES  |     | NULL    |       |
| name  | char(20) | YES  |     | NULL    |       |
| age   | int      | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

給表增長字段

爲已存在的表添加一個新字段

alter table "表名" add "字段名" 數據類型;

例如:

mysql> alter table chinese height INT;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'height INT' at line 1
mysql> alter table chinese add height INT;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> 
mysql> describe chinese;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| pid    | int      | YES  |     | NULL    |       |
| name   | char(20) | YES  |     | NULL    |       |
| age    | int      | YES  |     | NULL    |       |
| height | int      | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

刪除表的字段

alter table "表名" drop "字段名";

例如:

mysql> alter table chinese drop height;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc chinese;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| pid   | int      | YES  |     | NULL    |       |
| name  | char(20) | YES  |     | NULL    |       |
| age   | int      | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

修改字段的數據類型

alter table "表名" modify "字段名" 新數據類型;
mysql> alter table chinese modify name varchar(12);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc chinese;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| pid   | int         | YES  |     | NULL    |       |
| name  | varchar(12) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

修改字段的數據類型而且更名

alter table "表名" change "原字段名" "新字段名" 新數據類型;
mysql> alter table chinese change name pname CHAR(128);
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc chinese;
+-------+-----------+------+-----+---------+-------+
| Field | Type      | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| pid   | int       | YES  |     | NULL    |       |
| pname | char(128) | YES  |     | NULL    |       |
| age   | int       | YES  |     | NULL    |       |
+-------+-----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

更改表名

rename table "舊錶名" to "新表名";

修改表的字符集

alter table "表名" character set gbk;

對錶中某個字段進行操做

顯示錶中某行的內容

select "列" from "表";

例:

mysql> select friend from leo;
+--------+
| friend |
+--------+
| 張三   |
+--------+
1 row in set (0.00 sec)

對錶中某列的內容進行添加值

insert into "表"("列") values ("內容");

例:

mysql> insert into leo(friend) values ('李四');
Query OK, 1 row affected (0.00 sec)

mysql> select friend from leo;
+--------+
| friend |
+--------+
| 張三   |
| 李四   |
+--------+
2 rows in set (0.00 sec)

注意:

若是對每一個數據都依次插入信息,則不須要在表後面的括號內填數據信息,直接依次填其值

insert into "表"(內容一、內容二、內容3....);

對錶中某列的內容進行刪除值

delete from "表" where "列" = "內容";

例:

mysql> delete from leo where friend = "李四";
Query OK, 1 row affected (0.00 sec)

mysql> select friend from leo;
+--------+
| friend |
+--------+
| 張三   |
+--------+
1 row in set (0.00 sec)

尋找列中的值是否存在

select "列" from "表" where "列" = "值"

例:

mysql> select friend from leo where friend = '張三';
+--------+
| friend |
+--------+
| 張三   |
+--------+
1 row in set (0.00 sec)

改變列中的值

update "表" set "列" = "值"

例:

mysql> update leo set friend = "李四";
Query OK, 3 rows affected (0.01 sec)
Rows matched: 4  Changed: 3  Warnings: 0

mysql> select friend from leo;
+--------+
| friend |
+--------+
| 李四   |
| 李四   |
| 李四   |
| 李四   |
+--------+
4 rows in set (0.00 sec)

MySQL經常使用字段類型

整型類型

數據類型 數據範圍
TINYINT -128 ~ 127
SMALLINT -32768 ~ 32767
MEDIUMINT -2^23 ~ 2^23-1
INT -2^31 ~ 2^31-1
BIGINT -2^63 ~ 2^63-1

字符串類型

數據類型 字符範圍 用途
CHAR(n) 0 ~ 255 byte 定長字符串
VARCHAR(n) 0 ~ 65535 byte 變長字符串
TEXT 0 ~ 65535 byte 長文本數據
LONGTEXT 0 ~ 2^32-1 byte 極大文本數據
BLOB 0 ~ 65535 byte 二進制長文本數據
LONGBLOG 0 ~ 2^32-1 byte 二進制極大文本類型

小數類型

數據類型 數據用法 數據範圍
Float Float(m,n) 7位有效數
Double Double(m,n) 15位有效數
Decimal Decimal(m,n) 28位有效數

時間類型

數據類型 數據用法 數據範圍
DATE YYY-MM-DD 日期
TIME HH::MM:SS 時間
YEAR YYYY 年份
DATETIME YYYY-MM-DD HH::MM:SS 日期和時間
TIMESTAMP 10位或13位整數(秒數) 時間戳

枚舉類型

enum(枚舉值1,枚舉值2,...)

枚舉類型只能在列出的值中選擇一個,如性別。

檢索數據

檢索全部列

select * from "表名";

例:

mysql> select * from leo;
+----------+--------+-----------+
| password | friend | chatgroup |
+----------+--------+-----------+
| 123456   | NULL   | NULL      |
+----------+--------+-----------+
1 row in set (0.00 sec)

檢索多個列

select "列名1", "列名2", "列名3".... from "表名";

例如:

mysql> select * from leo;
+----------+--------+-----------+
| password | friend | chatgroup |
+----------+--------+-----------+
| 123456   | NULL   | NULL      |
+----------+--------+-----------+
1 row in set (0.00 sec)

mysql> select password from leo;
+----------+
| password |
+----------+
| 123456   |
+----------+
1 row in set (0.00 sec)

檢索單個列

select "列名" from "表名";

例如:

mysql> select password from leo;
+----------+
| password |
+----------+
| 123456   |
+----------+
1 row in set (0.00 sec)

通常,除非肯定須要表中的每一個列,不然最好別使用 * 通配符。雖然使用通配符可能會使本身省事,不用明確列出所需列,但檢索不須要的列一般會下降檢索和應用程序的性能。

可是 * 通配符能夠檢索初名字未知的列。

檢索不一樣的行

select "行名"  from "表名";

使用此語句會返回全部匹配的行,因此可能會有重複的值,若是隻想返回不一樣的值,能夠用<font color=red>DISTINCT</font>關鍵字,此關鍵字指示MySQL只返回不一樣的值。

select DISTINCT "行名" from "表名";

限制結果

​ select語句返回全部匹配的行,它們多是指定表中的每一個行,爲了返回第一行或者前幾行,可以使用<font color=red>LIMIT</font>子句

select "列名" from "表名" LIMIT 5;

此語句檢索單個列,<font color=red>LIMIT 5 指示了MySQL返回很少於5行</font>。

爲了得出下一個5行,可指定要檢索的開始行和行數,以下所示:

select "列名" from "表名" LIMIT 5,5;

LIMIT 5,5 指示MySQL返回從行5開始的5行。第一個位開始的行數,第二個數爲要檢索的行數。

注意:

行0: 檢索出來的第一行爲行0而不是行1。所以,LIMIT 1,1 將檢索出第二行而不是第一行。

在行數不夠時: LIMIT 中指定要檢索的行數爲檢索的最大行數,若是沒有足夠的行(例如,給出LIMIT 10,5,但只有13行),MySQL將只返回它能返回的那麼多行。

拓展:

MySQL 5 支持LIMIT的另外一種替代語法:LIMIT 4 OFFET 3 意爲從行3開始取4行,就像LIMIT 3,4同樣。

使用徹底限定的表名

select 表名.列名 from 表名;

例:

mysql> select leo.password from leo;
+----------+
| password |
+----------+
| 123456   |
+----------+
1 row in set (0.00 sec)

表名也能夠是徹底限定的,以下所示:

select 表名.列名 from  數據庫.表名

例:

mysql> select leo.password from user.leo;
+----------+
| password |
+----------+
| 123456   |
+----------+
1 row in set (0.00 sec)

排序檢索數據

數據排序默認升序排序。

排序數據

檢索出的數據並非以純粹的隨機順序顯示的。若是不排序,數據通常將以它在底層表中出現的順序顯示。這能夠是數據最初添加到表中的順序。可是,若是數據後來進行過更新或刪除,則此順序將會收到MySQL重用回收存儲空間的影響。所以,若是不明確的話,不能依賴該排序順序。

子句 order by

SQL語句由子句構成,有些子句是必需的,而有的是可選的。一個子句一般由一個關鍵字和所提供的數據組成,子句的例子就有 select語句 和 from語句

爲了明確地排序用select語句檢索出地數據,可以使用order by子句。 ordey by子句取一個或多個列的名字,據此對輸出進行排序。

select "列名" from "表名" order by "列名";

<font color=red>以字母順序進行排序</font>

按多個列排序

select "列名1", "列名2" from "表名" order by "列名1","列名2";
select "列名1", "列名2", "列名3" from "表名" order by "列名1","列名2";

僅對列名1和列名2進行排序,列名3不進行排序。

指定排序方式

爲了進行降序排序,必須指定DESC關鍵字。

select "列名1","列名2","列名3" from "表名" order by "列名1" DESC;

僅對列名1進行降序排序。

select "列名1","列名2","列名3", from "表名" order by "列名1" DESC, "列名2";

對列名1進行降序排序,對列名2進行默認升序排序。

注意:

在多個列上降序排序: 若是想在多個列上進行降序排序,<font color=red>必須對每一個列指定DESC關鍵字</font>

Tips:

區分大小寫和排序順序 在對文本性的數據進行排序時,A與a相同嗎?a位於B以前仍是位於Z以後?這些問題不是理論問題,其答案取決於數據庫如何設置。在字典(dictionary)排序順序中,A被視爲與a相同,這是MySQL
(和大多數數據庫管理系統)的默認行爲。可是,許多數據庫管理員可以在須要時改變這種行爲(若是你的數據庫包含大量外語字符,可能必須這樣作)。這裏,關鍵的問題是,若是確實須要改變這種排序順序,用簡單的ORDER BY子句作不到。你必須請求數據庫管理員的幫助。

拓展:

​ 使用order by和LIMIT的組合,可以找出一個列中最高或最低的值。

select "列" from "表" order by "列" DESC LIMIT 1;

由於使用降序排序而且只返回一行,因此爲找出了最大值。

相關文章
相關標籤/搜索