【資料庫】MySQL常見SQL語句

2020-12-15 書客創作

沒有傘的孩子,必須努力奔跑!

MySQL 是一個關係型資料庫,由瑞典 MySQL AB 公司開發,目前屬於 Oracle 旗下公司。

MySQL默認超級管理員是root,一般在安裝MySQL的時候會提示設置root密碼。

前期的MySQL不支持存儲過程,在MySQL5.0之後,設置存儲引擎ENGINE=INNODB才能支持存儲過程。

DDL—數據定義語言(Create,Alter,Drop,DECLARE)

DML—數據操縱語言(Select,Delete,Update,Insert)

DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)

常見SQL語句

1、創建用戶創建用戶一般都是登錄超級管理員root,進行創建之後分配權限。

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username - 你將創建的用戶名。host - 指定該用戶在哪個主機上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠程主機登陸,可以使用通配符%。password - 該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸伺服器。

2、授權

GRANT privileges ON databasename.tablename TO 'username'@'host';

privileges - 用戶的操作權限,如SELECT , INSERT , UPDATE,DELETE 等.如果要授予所的權限則使用ALL。databasename - 資料庫名,tablename-表名,如果要授予該用戶對所有資料庫和表的相應操作權限則可用表示, 如.(對所有資料庫所有表相應權限),datebasename.(對指定資料庫所有表相應權限)。

注意:用以上命令授權的用戶不能給其它用戶授權,如果想讓該用戶可以授權,用以下命令:

GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

3、設置與更改用戶密碼

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是當前登錄用戶用:

SET PASSWORD = PASSWORD("newpassword");

4、撤銷用戶權限

REVOKE privilege ON databasename.tablename FROM 'username'@'host';

注意: 假如你在給用戶』username』@』%』授權的時候是這樣的(或類似的):GRANT SELECT ON testDB.user TO 『username』@』%』, 則在使用REVOKE SELECT ON . FROM 『username』@』%』;命令並不能撤銷該用戶對testDB資料庫中user表的SELECT 操作。相反,如果授權使用的是GRANT SELECT ON . TO 『username』@』%』;則REVOKE SELECT ON testDB.user FROM 『username』@』%』;命令也不能撤銷該用戶對testDB資料庫中user表的Select 權限。

具體信息可以用命令SHOW GRANTS FOR 『username』@』%』; 查看。

5、刪除用戶

DROP USER 'username'@'host';

6、創建資料庫-databasename - 資料庫名

CREATE DATABASE databasename;

7、刪除資料庫-databasename - 資料庫名

DROP DATABASE databasename;

8、修改資料庫名

alter database 舊名稱 modify name = 新名稱

9、備份sql server

創建 備份數據的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'e:\mysql\test.dat'開始 備份 BACKUP DATABASE databasename TO testBack語句1:打開系統資料庫master,或者說在系統資料庫下操作。

語句2:定義備份邏輯設備名testBack,類型disk,路徑為e:\mysql\test.dat。

語句3:備份資料庫databasename到設備testBack上。

10、創建新表

CREATE TABLE tablename(col1 type1 [not null] [primary key],col2 type2 [not null],..);

根據已有的表創建新表:

A:CREATE TABLE tab_new like tab_old (使用舊錶創建新表) B:CREATE TABLE tab_new as select col1,col2… from tab_old definition only #用戶表 CREATE TABLE IF NOT EXISTS t_user( u_id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL COMMENT '編號', u_phone BIGINT NOT NULL COMMENT '帳號-手機號', u_passwd VARCHAR(100) NOT NULL COMMENT '密碼,4-20字符,MD5加密', u_regtime BIGINT UNSIGNED NOT NULL COMMENT '註冊時間,時間戳', u_check_uid BIGINT UNSIGNED COMMENT '用戶類型審核人員ID', PRIMARY KEY(u_id) COMMENT '主鍵', UNIQUE KEY(u_phone) COMMENT '唯一鍵', FOREIGN KEY(u_check_uid) REFERENCES t_user(u_id) ON DELETE CASCADE, KEY index_regtime(u_regtime) COMMENT '註冊時間-索引' )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '用戶表';

11、刪除新表

DROP TABLE tablename

12、增加一個列

ALTER TABLE tablename ADD COLUMN col TYPE

注意:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。

13、添加主鍵

ALTER TABLE tablename ADD PRIMARY KEY(col)

14、刪除主鍵

ALTER TABLE tablename DROP PRIMARY KEY(col)

15、創建索引

CREATE [UNIQUE] INDEX idxname ON tablename(col….)

16、刪除索引

DROP INDEX idxname

17、創建視圖

CREATE VIEW viewname AS SELECT statement

18、刪除視圖

DROP VIEW viewname

19、幾個簡單的基本的SQL語句

查詢:

SELECT * FROM tablename WHERE 範圍

插入:

INSERT INTO tablename(field1,field2) VALUES(value1,value2)

刪除:

DELETE FROM tablename WHERE 範圍

更新:

UPDATE tablename SET field1=value1 WHERE 範圍

查找:

SELECT * FROM tablename WHERE field1 LIKE '%value1%'

排序:

SELECT * FROM tablename ORDER BY field1,field2 [DESC]

總數:

SELECT COUNT(field1) AS totalcount FROM tablename

求和:

SELECT SUM(field1) AS sumvalue FROM tablename

平均:

SELECT AVG(field1) AS avgvalue FROM tablename

最大:

SELECT MAX(field1) AS maxvalue FROM tablename

最小:

SELECT MIN(field1) AS minvalue FROM tablename

20、幾個高級查詢運算詞A: UNION 運算符

UNION運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。

B: EXCEPT 運算符

EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重複行。

C: INTERSECT 運算符

INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。

註:使用運算詞的幾個查詢結果行必須是一致的。

21、使用外連接

A、LEFT OUTER JOIN:

左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。

B:RIGHT OUTER JOIN:

右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。

C:FULL OUTER JOIN:

全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。22、複製表(只複製結構,源表名:a 新表名:b) (Access可用)

方法一:

SELECT * INTO b FROM a WHERE 11

方法二:

SELECT top 0 * INTO b FROM a

23、拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)

INSERT INTO b(a, b, c) SELECT d,e,f FROM b;

24、跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)

INSERT INTO b(a, b, c) SELECT d,e,f FROM b IN 『具體資料庫' WHERE 條件

25、子查詢(表名1:a 表名2:b)

SELECT a,b,c FROM a WHERE a IN (SELECT d FROM b ) 或者: SELECT a,b,c FROM a WHERE a IN (1,2,3)

26、between的用法,between限制查詢數據範圍時包括了邊界值,not between不包括

SELECT * FROM table1 WHERE TIME BETWEEN time1 AND time2 SELECT a,b,c, FROM table1 WHERE a NOT BETWEEN 數值1 AND 數值2

27、in 的使用方法

SELECT * FROM table1 WHERE a [NOT] IN (『值1','值2','值4','值6')

28、兩張關聯表,刪除主表中已經在副表中沒有的信息

DELETE FROM table1 WHERE NOT EXISTS ( SELECT * FROM table2 WHERE table1.field1=table2.field1)

29、四表聯查問題

SELECT * FROM a LEFT INNER JOIN b ON a.a=b.b RIGHT INNER JOIN c ON a.a=c.c INNER JOIN d ON a.a=d.d WHERE .....

30、日程安排提前五分鐘提醒

SELECT * FROM 日程安排 WHERE DATEDIFF('minute',f開始時間, getdate())>5

31、一條sql 語句搞定資料庫分頁(不推薦)

SELECT top 10 b.* FROM (SELECT top 20 主鍵欄位,排序欄位 FROM 表名 ORDER BY 排序欄位 DESC) a,表名 b WHERE b.主鍵欄位 = a.主鍵欄位 ORDER BY a.排序欄位

32、前10條記錄

SELECT top 10 * form table1 WHERE 範圍

33、隨機取出10條數據

SELECT top 10 * FROM tablename ORDER BY newid()

34、隨機選擇記錄

SELECT newid()

35、刪除重複記錄

DELETE FROM tablename WHERE id NOT IN (SELECT MAX(id) FROM tablename GROUP BY col1,col2,...)

36、列出資料庫裡所有的表名

SELECT NAME FROM sysobjects WHERE TYPE='U'

37、列出表裡的所有的

SELECT NAME FROM syscolumns WHERE id=object_id('TableName')

38、收縮資料庫

重建索引 DBCC REINDEX DBCC INDEXDEFRAG收縮數據和日誌 DBCC SHRINKDB DBCC SHRINKFILE39、壓縮資料庫DBCC shrinkdatabase(dbname)40、轉移資料庫給新用戶以已存在用戶權限exec sp_change_users_login 『update_one『,『newname『,『oldname『41、檢查備份集RESTORE VERIFYONLY from disk=『E:\dvbbs.bak『42、修複數據庫ALTER DATABASE [dvbbs] SET SINGLE_USER GO DBCC CHECKDB(『dvbbs『,repair_allow_data_loss) WITH TABLOCK GO ALTER DATABASE [dvbbs] SET MULTI_USER GO

相關焦點

  • 資料庫常用的sql語句匯總(2)
    資料庫相關查所有資料庫 show databases;創建資料庫 create database db1;查看資料庫資料庫相關sql語句表相關創建表 create table t1(id int,name varchar(10));
  • MySQL怎麼刪除#sql開頭的臨時表
    /* 直接刪除,表名前加#mysql50*/root@testdb 01:42:57> DROP TABLE `#mysql50##sql-ib87-856498050`;註: #mysql50#前綴是MySQL 5. 1 中引入的文件名安全編碼。另外,表名因不符合命名規範,想要執行該腳本需要將表名用反引號括起來。
  • mysql-proxy資料庫中間件架構 | 架構師之路
    >三、mysql-proxy典型應用案例一: sql時間統計分析假設mysql-client提交的原sql為:XYZ;proxy可以在read_query()裡將其改寫為:SELECT NOW(); XYZ;SELECT NOW();
  • DTCC:MySQl核心代碼開發經驗揭示
    【IT168資訊】由IT168(ITPUB、IXPUB、ChinaUnix)主辦的2012中國資料庫技術大會(DTCC)於(以下簡稱大會)2012年4月13日~15日在北京永泰福朋喜來登大酒店隆重召開。大會將針對大數據架構設計、資料庫安全、分布式資料庫、商業智能、NoSQL、Hadoop等多個重點話題進行深入探討。
  • 美團開源 SQL 優化工具 SQLAdvisor,與內部版本保持一致
    上述實現時,涉及的函數為:mysql_sql_parse_join(TABLE_LIST join_table) mysql_sql_parse_join(Item join_condition) ,主要流程圖如下:
  • 新手入門MYSQL資料庫命令大全
    一、命令行連接資料庫Windows作業系統進入CMD命令行,進入mysql.exe所在目錄,運行命令mysql.exe -h主機名 -u用戶名 -p密碼注意:參數名與值之間沒有空格 , 如:-h127.0.0.1
  • 快速掌握MySQL資料庫中SELECT語句
    本文針對MySQL資料庫中的SELECT語句快速精細掌握。語句中的export_options部分的語法與用在LOAD DATAINFILE語句中的FIELDS和LINES子句中的相同,我們將在MySQL進階_LOAD DATA篇中詳細討論它。而OUTFILE與DUMPFILE的關鍵字的區別是:後前只寫一行到文件,並沒有任何列或行結束。
  • 資料庫管理工具DataGrip安裝使用
    簡介DataGrip是jetbrains旗下的一款資料庫管理工具,idea就是這家公司發明的,相比Navicat智能代碼補全,實時分析快速修復,數據可視化功能更方便人員操作。6.連接mysql資料庫7.新建sql語句並執行軟體下載官方下載:https://www.jetbrains.com/zh-cn/datagrip/promo/
  • MySQL 工作、底層原理,看這一篇就夠了!
    mysql原理圖各個組件說明:1. connectors與其他程式語言中的sql 語句進行交互,如php、java等。2. Management Serveices & Utilities系統管理和控制工具3.
  • 數據分析之小白的第二條sql語句
    數據分析之小白的第一條sql語句認識下今天的SQL語句WHERE(篩選)和GROUP BY……(按照什麼分組)WHERE employee_id>10GROUP BY employee_group這兩條語句的含義分別是1、篩選員工id大於10的員工
  • MySQL批量替換指定欄位字符串SQL語句
    MySQL批量替換指定欄位字符串語句  UPDATE 數據表名 SET 欄位名 = replace(欄位名, "要替換的字符串", "替換為") WHERE 設定條件;  比如本站今天發現站內關於linux命令的文章 標題不是太好,以前都是以 linux下mkdir命令使用詳解linux創建目錄命令  這樣的格式 不是太利用搜索
  • sqltoy-orm 4.13.8 發版 - OSCHINA - 中文開源技術交流社區
    ,目前以sql id為籤名,便於運維通過資料庫來跟蹤sql的歸屬以mysql為例: 在sql開始部位增加了id,便於運維通過資料庫日誌快速定位問題sql的歸屬```sql/* id=qstart_order_search */  select  ORDER_ID,      DEVICE_TYPE from xxx```感謝網名cmd的用戶反饋此意見
  • sql入門基礎知識(經典)
    * 創建資料庫將%mysql%/data創建一個文件夾* 默認資料庫* mysql,mysql資料庫的核心資料庫,【不能刪除】* performance_schema,mysql提供記錄數據的資料庫* information_schema,視圖
  • 初級開發者經常忽視的問題——SQL注入攻擊
    概念及原理SQL注入攻擊是一種比較常見的攻擊方式,其原理也比較簡單:就是利用系統在執行資料庫操作的環節,通過構造出特定參數,改變執行資料庫操作SQL語句的邏輯和功能,達到攻擊的目的。'",不出意外地話,這條SQL語句將刪除指定的資料庫。
  • 常用的三種修改mysql最大連接數的方法
    MYSQL資料庫安裝完成後,默認最大連接數是100,一般流量稍微大一點的論壇或網站這個連接數是遠遠不夠的,增加默認MYSQL連接數的方法有兩個方法一:進入MYSQL安裝目錄 打開MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100   修改為 max_connections
  • Php常見問題總結
    return $tempstr; } #p#Php部分常見問題總結(三)#e#6:規範你的SQL語句在表格,欄位前面加上"`",這樣就不會因為誤用關鍵字而出現錯誤,當然我並不推薦你使用關鍵字
  • MySQL從庫實用技能教程 巧用slave_exec_mode參數
    /* 傳統點位模式複製 */SQL>set global sql_slave_skip_counter=1;SQL>start sql_thread;/* GTID模式複製 */SQL>set gtid_next='e29d3917-9dbb-11e9-8b64-e4434b6e2c80:11103335-16054791';SQL>begin;commit
  • 《MySQL慢查詢優化》之SQL語句及索引優化
    1、慢查詢優化方式伺服器硬體升級優化Mysql伺服器軟體優化資料庫表結構優化SQL語句及索引優化>本文重點關注於SQL語句及索引優化,關於其他優化方式以及索引原理等,請關注本人《MySQL慢查詢優化》系列博文。
  • MySQL主從複製高級進階
    在5.7版本中,設置master_delay後,可以只停止sql_thread線程。即stop slave sql_thread,這樣從庫就不會清空relay log並重新拉取主庫binlog了。這樣可以節省一些網絡流量和IO資源。