MySQL開始使用MySQL


備註

MySQL徽標

MySQL是一個開源的關係數據庫管理系統(RDBMS),由Oracle Corporation開發和支持。

MySQL在大量平台上受支持 ,包括Linux變體,OS X和Windows。它還具有適用於大量語言的API ,包括C,C ++,Java,Lua,.Net,Perl,PHP,Python和Ruby。

MariaDB是MySQL的一個分支,具有稍微不同的功能集 。對於大多數應用程序,它完全兼容MySQL。

版本

發布日期
1.0 1995-05-23
3.19 1996-12-01
3.20 1997-01-01
3.21 1998-10-01
3.22 1999-10-01
3.23 2001年1月22日
4 2003-03-01
4.1 2004-10-01
5 2005-10-01
5.1 2008-11-27
5.5 2010-11-01
5.6 2013年2月1日
5.7 2015年10月1日

入門

在MySQL中創建數據庫

CREATE DATABASE mydb;
 

返回值:

查詢OK,1行受影響(0.05秒)


使用創建的數據庫 mydb

USE mydb;
 

返回值:

數據庫已更改

在MySQL中創建一個表

CREATE TABLE mytable
(
  id              int unsigned NOT NULL auto_increment,
  username        varchar(100) NOT NULL,
  email           varchar(100) NOT NULL,
  PRIMARY KEY     (id)
);
 

CREATE TABLE mytable 將創建一個名為mytable 的新表。

id int unsigned NOT NULL auto_increment 創建id 列,這種類型的字段將為表中的每條記錄分配一個唯一的數字ID(意味著在這種情況下沒有兩行可以具有相同的id ),MySQL將自動分配一個新的,記錄的id 字段的唯一值(從1開始)。

返回值:

查詢OK,0行受影響(0.10秒)


將行插入MySQL表

INSERT INTO mytable ( username, email )
VALUES ( "myuser", "myuser@example.com" );
 

示例返回值:

查詢正常,1行受影響(0.06秒)

varchar aka strings 也可以使用單引號插入:

INSERT INTO mytable ( username, email )
VALUES ( 'username', 'username@example.com' );
 

將行更新為MySQL表

UPDATE mytable SET username="myuser" WHERE id=8
 

示例返回值:

查詢正常,1行受影響(0.06秒)

可以在沒有引號的查詢中插入int 值。字符串和日期必須用單引號' 或雙引號"


將行刪除到MySQL表中

DELETE FROM mytable WHERE id=8
 

示例返回值:

查詢正常,1行受影響(0.06秒)

這將刪除id 為8的行。


根據MySQL中的條件選擇行

SELECT * FROM mytable WHERE username = "myuser";
 

返回值:

+----+----------+---------------------+
| id | username | email               |
+----+----------+---------------------+
|  1 | myuser   | myuser@example.com  |
+----+----------+---------------------+
 

1排(0.00秒)


顯示現有數據庫的列表

SHOW databases;
 

返回值:

+-------------------+
| Databases         |
+-------------------+
| information_schema|
| mydb              |
+-------------------+
 

2行(0.00秒)

您可以將“information_schema”視為提供對數據庫元數據的訪問的“主數據庫”。


在現有數據庫中顯示表

SHOW tables;
 

返回值:

+----------------+
| Tables_in_mydb |
+----------------+
| mytable        |
+----------------+
 

1排(0.00秒)


顯示表格的所有字段

DESCRIBE databaseName.tableName;
 

或者,如果已經使用數據庫:

DESCRIBE tableName;
 

返回值:

+-----------+----------------+--------+---------+-------------------+-------+
| Field     | Type           | Null   | Key     | Default           | Extra |
+-----------+----------------+--------+---------+-------------------+-------+
| fieldname | fieldvaluetype | NO/YES | keytype | defaultfieldvalue |       |
+-----------+----------------+--------+---------+-------------------+-------+
 

Extra 可能包含auto_increment 等。

Key 指的是可能影響該字段的鍵的類型。主要(PRI),獨特(UNI)......

n行(0.00秒)

其中n是表中字段的數量。


創建用戶

首先,您需要創建一個用戶,然後授予用戶對某些數據庫/表的權限。在創建用戶時,您還需要指定此用戶可以從哪裡連接。

CREATE USER 'user'@'localhost' IDENTIFIED BY 'some_password';
 

將創建一個只能在託管數據庫的本地計算機上連接的用戶。

CREATE USER 'user'@'%' IDENTIFIED BY 'some_password';
 

將創建一個可以從任何地方連接的用戶(本地計算機除外)。

示例返回值:

查詢正常,0行受影響(0.00秒)

添加權限

為指定數據庫的所有表授予用戶通用的基本權限:

GRANT SELECT, INSERT, UPDATE ON databaseName.* TO 'userName'@'localhost';
 

為所有數據庫上的所有表授予用戶所有權限(請注意):

GRANT ALL ON *.* TO 'userName'@'localhost' WITH GRANT OPTION;
 

如上所示, *.* 定位所有數據庫和表, databaseName.* 定位特定數據庫的所有表。也可以像databaseName.tableName 那樣指定數據庫和表。

如果用戶無需授予其他用戶權限,則應忽略WITH GRANT OPTION

特權可以

ALL
 

以下的組合,每個用逗號分隔(非詳盡列表)。

SELECT
INSERT
UPDATE
DELETE
CREATE
DROP
 

注意

通常,您應該盡量避免在SQL中使用包含空格或使用保留字的列或表名。例如,最好避免使用table 或名字等first name

如果你必須使用這些名稱,請將它們放在後面的`` 分隔符”之間。例如:

CREATE TABLE `table`
(   
   `first name` VARCHAR(30)
);
 

包含此表上的反斜杠分隔符的查詢可能是:

 SELECT `first name` FROM `table` WHERE `first name` LIKE 'a%';
 

信息模式示例

PROCESSLIST

這將按順序顯示所有活動和休眠查詢,然後顯示多長時間。
SELECT * FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;
 

這是關於時間幀的更多細節,因為它默認為秒

SELECT ID, USER, HOST, DB, COMMAND, 
TIME as time_seconds, 
ROUND(TIME / 60, 2) as time_minutes, 
ROUND(TIME / 60 / 60, 2) as time_hours, 
STATE, INFO
FROM information_schema.PROCESSLIST ORDER BY INFO DESC, TIME DESC;
 

存儲過程搜索

通過所有Stored Procedures 輕鬆搜索單詞和通配符。

SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%word%';