不完全转自:https://baijiahao.baidu.com/s?id=1589166609744115558&wfr=spider&for=pc
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
查询全部的记录: select * from test_limit ;
查第一条记录: select * from test_limit limit 1;
查前面两条记录: select * from test_limit limit 0,2;
查第二和第三条记录: select * from test_limit limit 1,2;
查最后一条记录: select * from test_limit order by id DESC limit 1;