【数据库】MySQL常见SQL语句

作者:邹峰立,微博:zrunker,邮箱:zrunker@yahoo.com,微信公众号:书客创作,个人平台:www.ibooker.cc

本文选自书客创作平台第54篇文章。阅读原文

书客创作

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 1<>1

方法二:

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 SHRINKFILE

39、压缩数据库

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

阅读原文


微信公众号:书客创作
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容