成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL常用命令速查表

數據庫 MySQL
速查表,顧名思義就是為了在需要的時候方便快速查詢相關知識點。本文精心為大家整理了 MySQL 中最常使用的語句和命令,絕對是日常開發、求職面試的必備良方!

速查表,顧名思義就是為了在需要的時候方便快速查詢相關知識點。本文精心為大家整理了 MySQL 中最常使用的語句和命令,絕對是日常開發、求職面試的必備良方!

連接服務器

使用 mysql 客戶端工具連接 MySQL 服務器的命令行如下:

mysql [-h host_name] [-P port_num] [-u user_name] [-p] [-D db_name]

其中,host_name 表示服務器主機名,默認為本機;port_num 表示 MySQL 服務端口,默認為 3306;user_name 表示用戶名,默認為當前操作系統用戶;-p 提示輸入密碼;db_name 表示要連接的數據庫。例如:

[root@sqlhost ~]# mysql -u root -p
Enter password: *********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.19 MySQL Community Server - GPL


Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

查看幫助

在 mysql 提示符中輸入 help; 或者 \h 獲取使用幫助。

mysql> help


For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/


List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
notee     (\t) Don't write into outfile.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.


For server side help, type 'help contents'

使用 help contents 命令可以獲取 MySQL 服務器相關的命令參考:

mysql> help contents;
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
   Account Management
   Administration
   Components
   Compound Statements
   Contents
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Geographic Features
   Help Metadata
   Language Structure
   Plugins
   Storage Engines
   Table Maintenance
   Transactions
   User-Defined Functions
   Utility

mysql 中的 SQL 命令支持以 ;、\g 或者 \G 結束并發送到服務器。

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.19    |
+-----------+
1 row in set (0.00 sec)

查看連接

使用 show processlist 命令可以查看所有連接到服務器的進程:

mysql> show processlist;
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
| Id | User            | Host            | db   | Command | Time   | State                  | Info             |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
|  4 | event_scheduler | localhost       | NULL | Daemon  | 107092 | Waiting on empty queue | NULL             |
| 23 | root            | localhost:64802 | NULL | Query   |      0 | starting               | show processlist |
+----+-----------------+-----------------+------+---------+--------+------------------------+------------------+
2 rows in set (0.00 sec)

使用 kill pid 命令殺掉指定連接進程:

mysql> kill 23;
ERROR 1317 (70100): Query execution was interrupted

其中,23 是當前連接進程的 pid,所以上面的命令斷開了當前連接。

退出連接

使用 exit;、quit; 或者 \q 命令退出 mysql 客戶端:

mysql> exit;
Bye

賬戶和權限

創建用戶

使用 CREATE USER 語句創建一個用戶:

CREATE USER [IF NOT EXISTS] user_name@host IDENTIFIED BY 'auth_string';

其中,user_name 表示用戶名;host 表示允許用戶從哪個主機連接 MySQL 服務器,如果省略(等價于 %)表示任何主機;IDENTIFIED BY 用于指定用戶的密碼。例如:

mysql> create user tony identified by 'Pswd123!';
Query OK, 0 rows affected (0.14 sec)

查看用戶

MySQL 中的用戶信息存儲在 mysql.user 系統表中:

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| tony             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

使用 user() 或者 current_user() 函數查看當前用戶:

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

修改密碼

使用 ALTER USER 語句修改用戶的密碼:

mysql> alter user tony identified by 'Pswd123@';
Query OK, 0 rows affected (0.12 sec)

鎖定/解鎖用戶

使用 ALTER USER 語句鎖定或者解鎖用戶:

mysql> alter user tony account lock;
Query OK, 0 rows affected (0.10 sec)




mysql> select user,host,account_locked from mysql.user;
+------------------+-----------+----------------+
| user             | host      | account_locked |
+------------------+-----------+----------------+
| tony             | %         | Y              |
| mysql.infoschema | localhost | Y              |
| mysql.session    | localhost | Y              |
| mysql.sys        | localhost | Y              |
| root             | localhost | N              |
+------------------+-----------+----------------+
5 rows in set (0.00 sec)




mysql> alter user tony account unlock;
Query OK, 0 rows affected (0.10 sec)

其中,account lock 表示鎖定;account unlock 表示解鎖。

用戶授權

MySQL 使用 GRANT 語句給用戶授權:

GRANT priv_type [, priv_type] ...
   ON priv_level
   TO user_name@host;

其中,priv_type 表示權限,例如查詢(SELECT)、執行(EXECUTE)、全部(ALL)權限等;priv_level 表示權限的級別,分為全局(*.*)、數據庫(db.*)、表級(db.table)權限等。以下語句為用戶 tony 授予 hrdb 數據庫中 employees 表上的增刪改查權限:

mysql> grant select,insert,update,delete 
    -> on hrdb.employees
    -> to tony;
Query OK, 0 rows affected (0.07 sec)

查看權限

使用 SHOW GRANTS [FOR user_name] 語句查看授予用戶的權限和角色:

mysql> SHOW GRANTS FOR tony;
+--------------------------------------------------------------------------+
| Grants for tony@%                                                        |
+--------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `tony`@`%`                                         |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `hrdb`.`employees` TO `tony`@`%` |
+--------------------------------------------------------------------------+
2 rows in set (0.00 sec)

如果省略 FOR user_name,返回當前用戶的權限和角色。

撤銷權限

撤銷授予用戶的權限和角色使用 REVOKE 語句:

REVOKE priv_type [, priv_type] ...
    ON priv_level
  FROM user_name@host;

其中的參數與 GRANT 語句相同。以下語句撤銷用戶 tony 對 employess 表的刪除權限:

mysql> revoke delete 
    -> on hrdb.employees
    -> from tony;
Query OK, 0 rows affected (0.01 sec)

管理角色

角色(Role)是 MySQL 8.0 引入的新功能,本質上就是一個命名的權限集合(用戶也是)。

創建角色

創建角色使用 CREATE ROLE 語句:

CREATE ROLE [IF NOT EXISTS] role_name@host;

以下語句用于創建角色 test:

mysql> create role test;
Query OK, 0 rows affected (0.04 sec)

角色授權

為角色授權和用戶授權相同,只需要把用戶名改成角色名。以下語句將數據庫 hrdb 上所有表的查看權限授予 test 角色:

mysql> grant select
    -> on hrdb.*
    -> to test;
Query OK, 0 rows affected (0.01 sec)

授予角色

為用戶授權角色與授予權限幾乎相同,以下語句 test 角色授予 tony 用戶:

mysql> grant test
    -> to tony;
Query OK, 0 rows affected (0.01 sec)


mysql> show grants for tony;
+------------------------------------------------------------------+
| Grants for tony@%                                                |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `tony`@`%`                                 |
| GRANT SELECT, INSERT, UPDATE ON `hrdb`.`employees` TO `tony`@`%` |
| GRANT `test`@`%` TO `tony`@`%`                                   |
+------------------------------------------------------------------+
3 rows in set (0.01 sec)


撤銷角色

撤銷角色與撤銷權限類似:

mysql> revoke test from tony;
Query OK, 0 rows affected (0.01 sec)

刪除角色

刪除角色使用 DROP ROLE 語句:

mysql> drop role test;
Query OK, 0 rows affected (0.00 sec)

刪除用戶

刪除用戶賬號使用 DROP USER 語句:

mysql> drop user if exists tony;
Query OK, 0 rows affected (0.01 sec)

管理數據庫

查看數據庫

使用 show databases; 命令查看當前 MySQL 服務器中所有可用的數據庫:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| ds                 |
| hrdb               |
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| world_x            |
+--------------------+
8 rows in set (0.00 sec)

創建數據庫

使用 CREATE DATABASE 語句創建一個新的數據庫:

CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset_name];

其中,db_name 是數據庫的名稱;如果該數據庫已經存在,將會返回錯誤;此時如果指定了 IF NOT EXISTS 選項,不會返回錯誤。

mysql> create database testdb;
Query OK, 1 row affected (0.15 sec)


mysql> create database testdb;
ERROR 1007 (HY000): Can't create database 'testdb'; database exists
mysql> create database if not exists testdb;
Query OK, 1 row affected, 1 warning (0.05 sec)


mysql> show warnings;
+-------+------+-------------------------------------------------+
| Level | Code | Message                                         |
+-------+------+-------------------------------------------------+
| Note  | 1007 | Can't create database 'testdb'; database exists |
+-------+------+-------------------------------------------------+
1 row in set (0.00 sec)

切換數據庫

使用 USE db_name; 語句切換當前默認的數據庫:

mysql> use testdb;
Database changed

以上語句將 testdb 設置為默認數據庫。

刪除數據庫

使用 DROP DATABASE 語句刪除一個數據庫,該數據庫中的所有對象以及與該數據庫相關的數據文件也會被刪除:

DROP DATABASE [IF EXISTS] db_name;

我們將 testdb 數據庫和相關的數據文件刪除:

mysql> drop database testdb;
Query OK, 0 rows affected (0.23 sec)

管理表

創建表

MySQL 使用 CREATE TABLE 語句創建表:

CREATE TABLE [IF NOT EXISTS] table_name(
   col1 data_type column_constraint,
   col2 data_type column_constraint,
   ...,
   table_constraints
) ENGINE=storage_engine;

其中,data_type 定義字段的數據類型,常用的數據類型包括:SMALLINT、INT、BIGINT、DECIMAL、CHAR、VARCHAR、TEXT、DATE、DATETIME 等。數據庫約束包括主鍵約束(PRIMARY KEY)、外鍵約束(FOREIGN KEY)、唯一約束(UNIQUE)、非空約束(NOT NULL)、檢查約束(CHECK)以及默認值(DEFAULT)。storage_engine 指定存儲引擎,常用的存儲引擎包括 InnoDB(默認)、MyISAM、Memory 、Archive、NDB 等。

CREATE TABLE departments
    ( department_id    INTEGER NOT NULL
    , department_name  CHARACTER VARYING(30) NOT NULL
    , manager_id       INTEGER
    , location_id      INTEGER
    , CONSTRAINT dept_id_pk
                PRIMARY KEY (department_id)
    ) ;


CREATE TABLE jobs
    ( job_id         CHARACTER VARYING(10) NOT NULL
    , job_title      CHARACTER VARYING(35) NOT NULL
    , min_salary     INTEGER
    , max_salary     INTEGER
    , CONSTRAINT job_id_pk
               PRIMARY KEY(job_id)
    ) ;


CREATE TABLE employees
    ( employee_id    INTEGER NOT NULL
    , first_name     CHARACTER VARYING(20)
    , last_name      CHARACTER VARYING(25) NOT NULL
    , email          CHARACTER VARYING(25) NOT NULL
    , hire_date      DATE NOT NULL
    , job_id         CHARACTER VARYING(10) NOT NULL
    , salary         NUMERIC(8,2)
    , commission_pct NUMERIC(2,2)
    , manager_id     INTEGER
    , department_id  INTEGER
    , CONSTRAINT     emp_emp_id_pk
                     PRIMARY KEY (employee_id)
    , CONSTRAINT     emp_salary_min
                     CHECK (salary > 0) 
    , CONSTRAINT     emp_email_uk
                     UNIQUE (email)
    , CONSTRAINT     emp_dept_fk
                     FOREIGN KEY (department_id)
                      REFERENCES departments(department_id)
    , CONSTRAINT     emp_job_fk
                     FOREIGN KEY (job_id)
                      REFERENCES jobs(job_id)
    , CONSTRAINT     emp_manager_fk
                     FOREIGN KEY (manager_id)
                      REFERENCES employees(employee_id)
    ) ;

查看所有表

使用 SHOW TABLES 語句查看當前數據庫中的所有表:

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| departments      |
| employees        |
| jobs             |
+------------------+
3 rows in set (0.01 sec)

查看表結構

MySQL 提供了查看表結構的 DESCRIBE 語句:

mysql> desc employees;
+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| employee_id    | int          | NO   | PRI | NULL    |       |
| first_name     | varchar(20)  | YES  |     | NULL    |       |
| last_name      | varchar(25)  | NO   |     | NULL    |       |
| email          | varchar(25)  | NO   | UNI | NULL    |       |
| hire_date      | date         | NO   |     | NULL    |       |
| job_id         | varchar(10)  | NO   | MUL | NULL    |       |
| salary         | decimal(8,2) | YES  |     | NULL    |       |
| commission_pct | decimal(2,2) | YES  |     | NULL    |       |
| manager_id     | int          | YES  | MUL | NULL    |       |
| department_id  | int          | YES  | MUL | NULL    |       |
+----------------+--------------+------+-----+---------+-------+
11 rows in set (0.01 sec)

另外,可以通過 SHOW CREATE TABLE 語句顯示創建表的語句:

mysql> show create table employees\G
*************************** 1. row ***************************
       Table: employees
Create Table: CREATE TABLE  employees  (
   employee_id  int NOT NULL,
   first_name  varchar(20) DEFAULT NULL,
   last_name  varchar(25) NOT NULL,
   email  varchar(25) NOT NULL,
   hire_date  date NOT NULL,
   job_id  varchar(10) NOT NULL,
   salary  decimal(8,2) DEFAULT NULL,
   commission_pct  decimal(2,2) DEFAULT NULL,
   manager_id  int DEFAULT NULL,
   department_id  int DEFAULT NULL,
  PRIMARY KEY ( employee_id ),
  UNIQUE KEY  emp_email_uk  ( email ),
  KEY  emp_dept_fk  ( department_id ),
  KEY  emp_job_fk  ( job_id ),
  KEY  emp_manager_fk  ( manager_id ),
  CONSTRAINT  emp_dept_fk  FOREIGN KEY ( department_id ) REFERENCES  departments  ( department_id ),
  CONSTRAINT  emp_job_fk  FOREIGN KEY ( job_id ) REFERENCES  jobs  ( job_id ),
  CONSTRAINT  emp_manager_fk  FOREIGN KEY ( manager_id ) REFERENCES  employees  ( employee_id ),
  CONSTRAINT  emp_salary_min  CHECK (( salary  > 0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

增加字段

增加字段使用 ALTER TABLE ... ADD COLUMN 語句,以下命令為 employees 表增加一個字段 phone_number:

mysql> alter table employees add column phone_number varchar(20);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

修改字段

修改字段使用 ALTER TABLE ... MODIFY  語句,以下命令為字段 phone_number 增加一個唯一約束:

mysql> alter table employees modify phone_number varchar(20) unique;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

刪除字段

刪除字段使用 ALTER TABLE ... DROP COLUMN 語句:

mysql> alter table employees drop column phone_number;
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

刪除表

要刪除表可以使用 DROP TABLE 語句:

mysql> drop table if exists employees, departments, jobs;
Query OK, 0 rows affected (0.09 sec)

索引與約束

創建索引

MySQL 為主鍵和唯一約束自動創建相應的索引,我們也可以創建額外的索引。創建索引的命令如下:

CREATE [UNIQUE] INDEX index_name
ON table_name(col1 ASC, col2 DESC);

查看索引

查看表中的所以可以使用 SHOW INDEXES 語句:

mysql> show indexes from departments\G
*************************** 1. row ***************************
        Table: departments
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: department_id
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: 
   Index_type: BTREE
      Comment: 
Index_comment: 
      Visible: YES
   Expression: NULL
1 row in set (0.01 sec)

修改索引

修改索引支持設置索引的可見性:

ALTER INDEX index VISIBLE | INVISIBLE;

可見性是指對優化器而言,默認為可見(VISIBLE);INVISIBLE 表示不可見。

刪除索引

刪除索引使用以下命令:

DROP INDEX index_name ON table_name;

增加約束

為表增加約束可以使用 ALTER TABLE 語句:

ALTER TABLE table_name ADD CONSTRAINT symbol PRIMARY KEY(col1,...);
ALTER TABLE table_name ADD CONSTRAINT symbol UNIQUE(col1,...);
ALTER TABLE table_name ADD CONSTRAINT symbol FOREIGN KEY (col1) REFERENCES other_table(col1);
ALTER TABLE table_name ADD CONSTRAINT symbol CHECK (expr);
ALTER TABLE table_name ALTER COLUMN col_name SET DEFAULT (expr); 
ALTER TABLE table_name MODIFY COLUMN col_name data_type NOT NULL;

刪除約束

刪除約束同樣可以使用 ALTER TABLE 語句:

ALTER TABLE table_name DROP CHECK|CONSTRAINT symbol;
ALTER TABLE table_name ALTER COLUMN col_name DROP DEFAULT;
ALTER TABLE table_name MODIFY COLUMN col_name data_type NULL;

查詢語句

單表查詢

查詢單個表中的字段:

SELECT col1, col2, ... FROM t;

查詢所有字段:

SELECT * FROM t;

排除查詢結果中的重復數據:

SELECT DISTINCT col1, col2, ...
FROM t;

查詢條件

使用 WHERE 指定查詢條件:

SELECT col1, col2, ... 
FROM t
WHERE conditions;

常用的查詢條件包括:=、!=、<>、<、<=、>、>=、BETWEEN、IN、EXISTS、LIKE、AND、OR、NOT、IS [NOT] NULL 等。

模糊匹配

使用 LIKE 運算符進行簡單的字符串模式匹配:

expr LIKE pattern [ESCAPE escape_character]

其中,pattern 用于指定一個匹配模式,百分號(%)匹配任意多個字符,下劃線(_)匹配任意單個字符;escape_character 指定轉義字符

mysql> select first_name
    -> from employees
    -> where first_name like '%s_n';


+------------+
| first_name |
+------------+
| Harrison   |
| Jason      |
| Susan      |
+------------+
3 rows in set (0.01 sec)

另外, REGEXP 或者 RLIKE 運算符可以進行更強大的正則表達式匹配。

排序操作

指定排序字段的方式如下:

SELECT col1, col2, ... 
FROM t 
ORDER BY col1 ASC, col2 DESC;

限定數量

限制返回結果的數量:

SELECT col1, col2, ... 
FROM t 
ORDER BY col1 ASC, col2 DESC
LIMIT offset, rows;

分組操作

指定分組和過濾:

SELECT col1, col2, agg_func() 
FROM t
GROUP BY col1, col2 WITH ROLLUP 
HAVING conditions;

常用的聚合函數:AVG、COUNT、MIN、MAX、SUM 等。

多表連接

連接查詢用于從多個表中查詢關聯數據:

SELECT t1.col1, t2.col1, ... 
FROM table1 AS t1
[INNER | LEFT | RIGHT | CROSS] JOIN t2 
ON conditions;

子查詢

子查詢是指嵌套在其他查詢語句中的查詢:

SELECT t.col1, t.col2, ... 
FROM (SELECT ...) t ;

EXISTS 與關聯子查詢:

SELECT t1.col1, t1.col2, ...
FROM t1
WHERE EXISTS ( SELECT 1
               FROM t2
               WHERE t2.col1 = t1.col1);

集合運算

集合運算包括并集、交集和差集:

SELECT col1, col2, ...
FROM t1
UNION [ALL] | INTERSECT | MINUS
SELECT c1, c2, …
FROM t2;

UNION ALL 保留結果中的重復數據,其他運算符消除了重復結果。

通用表表達式

通用表表達式類似于派生表或者語句級別的視圖,但是可讀性和性能更好,并且支持遞歸調用。以下查詢生成 1 到 10 的數字序列:

WITH RECURSIVE cte(n) AS (
    SELECT 1 AS n -- 初始查詢
    UNION ALL
    SELECT n+1 FROM cte WHERE n < 10)  -- 遞歸查詢
SELECT * FROM cte;

DML 語句

插入數據

插入數據使用 INSERT 語句:

INSERT INTO table(col1,col2,...)
VALUES (val1,val2,...);

一次插入多條記錄:

INSERT INTO table(col1,col2,...)
VALUES (val11,val12,...), (val21,val22,...), (val31,val32,...);

插入查詢語句的結果:

INSERT INTO table(col1,col2,...)
SELECT ...;

更新數據

更新數據使用 UPDATE 語句:

UPDATE table_name
SET col1 = val1, 
    col2 = val2, 
    ...
WHERE conditions;

UPDATE 語句支持跨表更新:

UPDATE t1, t2,
[INNER JOIN | LEFT JOIN] t1 ON t1.col1 = t2.col1
SET t1.col2 = t2.col2,
    t2.c3 = expr
WHERE conditions;

刪除數據

刪除數據使用 DELETE 語句:

DELETE FROM table_name
WHERE conditions;

DELETE語句支持多表刪除:

DELETE t1, t2
FROM t1
INNER JOIN t2 ON t1.col1 = t2.col1
WHERE conditions;


DELETE t1
FROM t1
LEFT JOIN t2 ON t1.col1 = t2.col1
WHERE t2.key IS NULL;

另外,TRUNCATE TABLE 語句用于快速清除表中的全部數據:

TRUNCATE [TABLE] table_name;

合并數據

合并語句同時執行了 INSERT 和 UPDATE 操作:

INSERT INTO table(col1,col2,...)
VALUES (val1,val2,...) 
ON DUPLICATE KEY UPDATE
    col1 = val1, 
    col2 = val2, 
    …;

與此類似的操作還有 REPLACE INTO 語句:

REPLACE INTO table_name(col1, col2, ...)
VALUES (val1,val2,...);

事務控制

數據庫事務是一組相關的操作,要么全部成功,要么全部失敗。

開始事務

START TRANSACTION 語句用于開始一個事務:

START TRANSACTION;

BEGIN 或者 BEGIN WORK 的作用也一樣。

提交事務

提交事務的命令如下:

COMMIT;

回滾事務

回滾事務的命令如下:

ROLLBACK;

事務保存點

事務保存點可以用于回滾部分事務:

SAVEPOINT identifier;
ROLLBACK TO identifier;
RELEASE SAVEPOINT identifier;

視圖

創建視圖

使用以下命令創建視圖:

CREATE [OR REPLACE] VIEW view_name
AS
  select-statement
  WITH CHECK OPTION;

WITH CHECK OPTION 選項可以阻止通過視圖修改或者插入視圖范圍之外的基礎表數據。

查看所有視圖

SHOW TABLES 語句支持查看視圖:

SHOW FULL TABLES
WHERE table_type = 'VIEW';

查看視圖定義

查看視圖的定義:

SHOW CREATE VIEW view_name;

重命名視圖

重命名視圖與重命名表類似:

RENAME TABLE view_name TO new_view;

刪除視圖

刪除視圖的命令如下:

DROP VIEW [IF EXISTS] view_name;

存儲過程/函數

創建存儲過程/函數

創建存儲過程使用 CREATE PROCEDURE 語句:

DELIMITER //
CREATE PROCEDURE GetEmployeeNameById(IN pn_empid INT)
BEGIN
    SELECT first_name, last_name FROM employees
    WHERE employee_id = pn_empid;
END //
DELIMITER ;

創建函數使用 CREATE FUNCTION 語句:

DELIMITER //
CREATE FUNCTION add_numbers(p1 INT, p2 INT)
RETURNS INT
DETERMINISTIC
BEGIN
    RETURN p1 + p2;
END //
DELIMITER ;

調用存儲過程/函數

調用存儲過程使用 CALL 語句:

mysql> CALL GetEmployeeNameById(100);
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Steven     | King      |
+------------+-----------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

存儲函數可以像系統函數一樣使用:

mysql> select add_numbers(1, 2);
+-------------------+
| add_numbers(1, 2) |
+-------------------+
|                 3 |
+-------------------+
1 row in set (0.00 sec)

刪除存儲過程/函數

刪除存儲過程/函數使用 DROP 語句:

mysql> drop procedure if exists GetEmployeeNameById;
Query OK, 0 rows affected (0.03 sec)




mysql> drop function if exists add_numbers;
Query OK, 0 rows affected (0.01 sec)

觸發器

觸發器是一個特殊的存儲過程,當表中的數據被修改(INSERT、UPDATE、DELETE)時自動執行。

創建觸發器

創建觸發器使用 CREATE TRIGGER 語句:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON table_name FOR EACH ROW
trigger_body;

對于 INSERT,可以使用NEW 變量;對于 UPDATE,可以使用 OLD 和 NEW 變量;對于 DELETE,可以使用 OLD 變量。

查看觸發器

使用以下命令查看觸發器:

SHOW TRIGGERS
[FROM | IN database_name]
[LIKE 'pattern' | WHERE condition];

刪除觸發器

刪除觸發器的語句如下:

DROP TRIGGER [IF EXISTS] trigger_name;

備份與恢復

使用 mysqldump 備份數據庫

mysqldump 是 MySQL 邏輯備份工具,用于導出創建數據庫(CREATE DATABASE)和生成數據(INSERT 語句或者文本文件)的 SQL 腳本。

使用 mysqldump 備份所有的數據庫的命令如下:

mysqldump -u user_name -p -r file_name --all-databases

其中,user_name 表示用戶名;file_name 表示備份文件名;-\-all-databases 表示備份所有的數據庫。

導出特定數據庫的命令如下:

mysqldump -u user_name -p -r file_name --databases db_name1 db_name2

其中,--databases 表示需要導出的數據庫。

mysqldump 也可以選擇導出指定的表:

mysqldump -u user_name -p -r file_name db_name table1 table2

以上命令表示導出數據庫 db_name 中的表 table1 和 table2。

使用 mysql 還原數據庫

mysql 客戶端可以用于導入備份生成的 SQL 文件:

mysql -u user_name -p < file_name
責任編輯:華軒 來源: SQL編程思想
相關推薦

2020-09-22 11:00:27

Linux命令文件

2021-04-20 09:56:58

Python 開發編程語言

2025-01-15 13:25:47

MySQL命令數據庫

2015-07-22 17:32:22

mysql常用命令

2010-05-28 18:28:51

MySQL常用命令

2010-05-25 11:40:12

MySQL 常用命令

2023-08-31 22:45:15

Git命令效率

2014-07-25 10:55:36

Linux命令

2011-03-16 10:07:00

2014-01-02 09:57:56

PostgreSQL命令

2011-01-19 17:00:09

Postfix常用命令

2022-12-19 08:05:04

Python速查表知識點

2021-01-09 16:16:40

開源軟件速查表編程語言

2020-10-08 18:14:15

碼農Git命令

2011-03-31 16:09:56

Mysql數據庫

2020-09-28 15:14:31

Linux常用命令實用命令

2010-03-29 10:16:39

CentOS常用命令

2010-05-17 15:41:26

2010-04-06 18:06:18

CentOS系統

2010-05-27 13:12:10

MySQL 常用命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品免费在线观看 | 自拍偷拍亚洲视频 | 夏同学福利网 | 91精品国产欧美一区二区 | 国产福利小视频 | 久久国内精品 | 国产精品毛片一区二区三区 | 国产欧美日韩在线一区 | 欧美区日韩区 | 久久亚洲国产精品日日av夜夜 | www.久久久久久久久 | 99精品国产一区二区三区 | 亚洲一区中文字幕 | 国产精品久久久乱弄 | 一区二区三区四区av | 亚洲黄色片免费观看 | 日韩精品免费在线观看 | 久热国产在线 | 国产粉嫩尤物极品99综合精品 | 国产精品美女在线观看 | 久久九九色 | 亚洲精品丝袜日韩 | 国产精品99久久久久久宅男 | 免费一级欧美在线观看视频 | 成人三级网址 | 亚洲日本免费 | 91久久爽久久爽爽久久片 | 九九亚洲 | 天天操天天干天天透 | 日操夜操 | 欧美日韩国产传媒 | 午夜网| 亚洲在线久久 | 男女性毛片 | 香蕉一区 | 羞羞羞视频 | 自拍偷拍第一页 | 国产在线一区观看 | 日韩一区在线观看视频 | 国产精彩视频 | 999久久久久久久久6666 |