数据库必用命令合集1
1、创建数据库
 语法格式:
CREATE DATABASE 数据库名;
 1.1、创建数据库,并指定字符集和校对规则
 语法格式:
CREATE DATABASE 数据库名
 DEFAULT CHAARACTER 字符集
 COLLATE 校对规则;
 1.2、进入到指定数据库中
 语法格式:
USE 数据库名;
 1.3、修改数据库默认字符集和校对规则
 语法格式:
ALTER DATABASE 数据库名
 DEFAULT CHARACTER SET 字符集
 DEFAULT COLLATE 校对规则;
 1.4、删除数据库
 语法格式:
DROP DATABASE 数据库名;
 1.5、显示数据库
 语法格式:
SHOW DATABASES;
 2、表
 2.1、创建表
 语法格式:
CREATE TABLE 表名
 (列名 数据类型 是否允许为空,
 列名 数据类型 是否允许为空);
 2.2、向表中增加列
 语法格式:
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 是否允许为空;
 2.3、修改列的名称
 语法格式:
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 是否允许为空;
 2.4、修改指定列的类型
 语法格式:
ALTER TABLE 表名 MODIFY 列名 数据类型 是否允许为空;
 2.5、修改表名
 语法格式:
ALTER TABLE 旧表名 (RENAME TO)/TO 新表名;
 2.6、复制表结构
 语法格式:
CREATE TABLE 新表名 LIKE 参照表名;
 2.7、复制表结构和数据
 语法格式:
CREATE TABLE 新表名 AS (SELECT * FROM 目标表名);
 2.8、删除表
 语法格式:
DROP TABLE 表名;
 2.9、显示表文件名
 语法格式:
SHOW TABLES;
 2.10、显示数据表结构
 语法格式:
DESC/DESCRIBE 表名;
 2.11、显示指定列的结构
 语法格式:
DESC/DESCRIBE 表名 列名;
 3、数据操纵
 3.1、插入表数据
 语法格式:
INSERT INTO 表名 VALUES(列名,列值),(列名,列值…);
 3.2、修改表数据
 语法格式:
UPDATE 表名 SET 列名=表达式;
 3.3、符合判断条件的修改数据
 语法格式:
UPDATE 表名 SET 列名=表达式 WHERE 条件;
 3.4、删除某行的数据值
 语法格式:
DELETE FROM 表名 WHERE 条件;
 3.5、从多个表中删除行
 语法格式:
DELETE FROM 表名列表 WHERE 条件;
 4、数据查询
 4.1、查询指定列的信息
 语法格式:
SELECT 列名 FROM 表名;
 4.2、定义列别名
 语法格式:
SELECT 列名 AS 别名;
 4.3、替换查询结果中的数据
 语法格式:
SELECT 列名
 CASE
 WHEN 条件 THEN 表达式
 …
 ELSE 表达式n
 END AS 查询结果的列名
 FROM 表名;
 4.4、消除查询中的重复行
 语法格式:
SELECT DISTINCT 列名 FROM 表名;
 4.5、统计某列的总数
 语法格式:
SELECT COUNT(值) AS 别名 FROM 表名;
 4.6、求某列中最大的值
 语法格式:
SELECT MAX(列名) FROM 表名;
 4.7、求某列中最小的值
 语法格式:
SELECT MIN(列名) FROM 表名;
 4.8、求某列的总和
 SELECT SUM(列名) FROM 表名;
 4.9、求平均值
 语法格式:
SELECT AVG(值) FROM 表名;
 4.10、条件判断查询
 语法格式:
SELECT * FROM 表名 WHERE 条件;
 4.11、模式匹配查询
 语法格式:
SELECT 要显示的列名 FROM 表名 WHERE 条件 LIKE ‘张%’; 说明:这是匹配字段为姓张的名称
 或
 SELECT 要显示的列名 FROM 表名 WHERE 条件 LIKE ‘高启_’; 说明:查找名称前两个字为“高启”最后一位字的名称
 4.12、转义字符
 语法格式:
SELECT 要显示的列名 FROM 表名 WHERE 条件 LIKE '%#%’ ESCAPE’#‘; 说明:’%#%‘匹配下划线 使用ESCAPE’#'转义字符原本的意义,使其变成原始字符
 4.13、范围比较
 语法格式;
SELECT * FROM 表名 WHERE 表达式 BETWEEN 表达式1 AND 表达式2;
 4.14、IN子查询
 语法格式:
SELECT * FROM 表名 WHERE IN(表达式1,表达式…);
 4.15、空值判断
 语法格式:
SELECT * FROM 表名 WHERE 字段 IS NULL;
 4.16、内连接
 语法格式 :
SEECT * FROM 表1 INNER JOIN 表2 ON(连接条件); 说明:连接条件就是两个表相同字段相同时连接,例如:(表1.图书编号=表2.图书编号)
 4.17、内连接的多表连接
 语法格式:
SEECT * FROM 表1 JOIN 表2 ON(连接条件) JOIN 表2 ON(连接条件);
 4.18、USING连接
 语法格式:
SELECT 显示列 FROM 表1 JOIN 表2 USING(字段); 说明:字段必须是连接的两表共有的字段值
 4.19、左外连接
 语法格式:
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 连接条件;
 4.20、右外连接
 语法格式:
SELECT * FROM 表1 RIGHT JOIN 表2 ON 连接条件;
 4.21、比较子查询
 语法格式:
SELECT * FROM 表名 WHERE 字段 = ANY(SELECT 显示列 FROM 表名 WHERE 条件); ANY 匹配字段 有一个相同就为true
 SELECT * FROM 表名 字段>ALL(SELECT 显示列 FROM 表名 WHERE 条件); ALL 匹配字段 所有相同就为true
 4.22、EXISTS 子查询
 语法格式:
SELECT * FROM 表名 WHERE EXISTS (表达式);
 4.23、GROUP BY 子查询
 语法格式:
SELECT * FROM 表名 GROUP BY 分组字段值;
 4.24、对统计数据进行分类小计
 语法格式:
SELECT * FROM 表名 GROUP BY 分组字段值 WITH ROLLUP;
 4.25、HAVING 子句
 语法格式:
SELECT * FROM 表名 GROUP BY 分组字段值 HAVING 判断条件;
 4.26、ORDER BY 子句(排序)
 语法格式:
SELECT * FROM 表名 ORDER BY 排序字段值 ASC/DESC; 说明:ASC升序 DESC 降序
 4.27、LIMIT 子句(限制语句返回的行数)
 语法格式:
SELECT * FROM 表名 ORDER BY 排序字段值 LIMIT 显示行数; 说明:显示行数,也可以写成3,5表示从第四条开始记录的5条数据
数据库命令大全2
1.对数据库常用命令
 1.连接数据库
 mysql -u用户名 -p密码
 2.显示已有数据库
 show databases;
 3.创建数据库
 create database sqlname;
 4.选择数据库
 use database sqlname;
 5.显示数据库中的表(先选择数据库)
 show tables;
 6.显示当前数据库的版本信息以及连接用户名
 select version(),user();
 7.删除数据库(删除时没有提示直接删除)
 drop database sqlname;
2.数据库中对表的命令
 1.创建表
 (1)语法:
 create table tablename(
 字段1 数据类型 字段属性
 …
 字段n
 );
 (2)注意:
 1.创建表时为了防止与保留字冲突,用’'括起来
 2.单行注释:#…
 多行注释:/…/
 3.创建表时多字段中间用英文逗号隔开,最后一行不用逗号。
 (3) 字段约束和属性
 1.非空约束 not null(字段不允许为空)
 2.默认约束 default(设置默认值)
 3.唯一约束 unique key(uk)(设置字段的值是唯一的,可为空,但只能有一个空值)
 4.主键约束 primary key(pk)(作为表记录的唯一标识)
 5.外键约束 foreign key(fk)(用于两个表之间建立关系,需要指定引用主表的哪一字段。在数据库的存储引擎中InnoDB支持外键,MyISAM不支持外键。
 作为外键的字段要求是主表中的主键(单字段主键))
添加外键约束:
 CONSTRAINT FK_外键名 FOREIGN KEY(字表中外键字段)REFERENCES 关联表名 (关联字段)。
 grandid作为字表的外键
 1.设置自增auto_increment=n,从n开始。
 2.设置自增set @@ auto_increment_increment=m,步长为m。
3.多字段设置主键:primary key(字段1,字段2…字段n)
 4.表中的注释/说明性文字:)comment=“说明文字”;
 5.设置字符集:)charset=“字符集”;
 6.查看表的结构:describe’表名’/desc 表名
 7.查看数据库定义:show create database sqlname;
 8.查看数据表定义:show create table tablename;
 9.查看默认存储引擎:show variables like’storage_engine%’;
 11.指定表的存储引擎:)engine=存储引擎;
 10.删除表:drop table ‘tablename’;
 11.获取当前日期:now();
 12.修改表:
 (1)修改表名:alter table 旧表名 rename 新表名;
 (2)添加字段:alter table 表名 add 字段名 数据类型…;(添加新的字段)
 (3)修改字段:alter table 表名 change 原字段名 新字段名 数据类型…;
 (4)删除字段:alter table 表名 drop 字段名;
 (5)在创建完表以后添加主键约束:
 alter table 表名 add constraint 主键名 primary key 表名(主键字段);
 (6)创建完表以后添加外键约束(作为外键的字段要求是主表中的主键(单字段主键)):
 alter table 表名 add constraint 外键名 foreign key(外键字段) references 关联表名 (关联字段);
插入数据
 1.插入单行数据:
 insert into 表名 (字段名列表(逗号隔开)) values(值列表(逗号隔开));
 2.插入多行数据 :
 insert into 表名(字段名列表) values (值列表1), … ,(值列表n);
 3.将查询结果插入到新表中:
 create table 新表(select 字段1, … ,from 原表);
 3.更新数据(修改数据):
 update 表名 set 列名=更新值 where 更新条件;
 4.删除数据
 (1)delete from 表名 where 删除条件;
 delete 删除的是整条数据,不会只删除单个列。
 (2)truncate table 删除数据:
 truncate table 删除的是表中所有的行,但表的结构,列,约束,索引等不会改变。不能用于有外键约束的表。删除数据不能恢复。
 truncate table 表名 where 删除条件;
数据查询
 1.使用select查询
 select 列名/表达式/函数/常量 from 表名 where 查询条件 order by 排序的列名asc/desc;
 (1)查询所有的数据行和列:
 select * from 表名;
 (2)查询部分行和列:
 select 列名… from 表名 where 查询条件;
 (3)在查询中使用列的别名:
 select 列名 AS 新列名 form 表名 where 查询条件;
 计算,合并得到新的列名:
 select 列名1+’.’+列名2 AS 新列名 from 表名;
 (4)查询空值:
 通过is null 或者 is not null 判断列值是否为空
 2.分组查询
 #查询不同课程的平均分,最低分,最高分,并查询出平均分大于80分的课程
 SELECT r.subjectno,sub.SubjectName 课程名称,AVG(StudentResult) 平均分,
 MAX(StudentResult) 最高分,MIN(StudentResult) 最低分
 FROM result r INNER JOIN subject sub
 ON r.SubjectNo=sub.SubjectNo
 GROUP BY r.subjectno
 #where AVG(StudentResult)>=80出现错误,
 #分组查询group by 在where语句后,
 #group by 约束条件使用having语句
 HAVING AVG(StudentResult)>=80
 常用函数
 1.聚合函数:
 (1)AVG (平均值):select avg(列名)from 表名
 假设列名为成绩 则查询到的是表中所有成绩的平均值。
 (2)count 返回某字段的行数
 (3)max 返回某字段的最大数
 (4)min 返回某字段的最小值
 (5)sum 返回某字段的和。
 2.字符串函数:
 (1)concat() 连接字符串s1,s2…sn为一个完整的字符串。
 (2)insert(s1,p1,n,news)将字符串s1从p1位置开始,n个字符长的字串替换为字符串news。
 (3)lower(s)将字符串s中的所有字符改为小写。
 (4)upper(s)将字符串s中的所有字符改为大写。
 (5)substring(s,num,len)返回字符串s的第num个位置开始长度为len的子字符串。
 3.时间日期函数:
 (1)获取当前日期:curdate();
 (2)获取当前时间:curtime();
 (3)获取当前日期和时间:now();
 (4)返回日期date为一年中的第几周:week(date);
 (5)返回日期date的年份:year(date);
 (6)返回时间time的小时值:hour(time);
 (7)返回时间time的分钟值:minute(time);
 (8)返回日期参数(date1和date2之间相隔的天数):datediff(date1,date2);
 (9)计算日期参数date加上n天后的日期:adddate(date,n);
 4.数学函数
 (1)返回大于或等于数值x的最小整数:ceil(x);
 (2)返回小于或等于数值x的最大整数:floor(x);
 (3)返回0~1之间的随机数:rand();
 order by 子句
 order by子句按照一定的顺序排列查询结果,asc升序排列,desc降序排列。
 limit子句
 显示指定位置指定行数的记录。
 select 字段名列表 form 表名 where 约束条件 group by分组的字段名 order by 排序列名 limit 位置偏移量,行数;
 #查询学生信息里gid=1按学号升序排列前四条记录(步长)
 SELECT id,name FROM student1 WHERE gid=1 ORDER BY id LIMIT 4;
 (查询表里全部信息中gid=1的前四个学生)
#查询学生信息里gid=1按学号升序排列前四条记录(位置偏移量,步长)
 SELECT id,name FROM student1 WHERE gid=1 ORDER BY id LIMIT 4,4;
 (查询表中全部信息gid=1前四条以后的全部信息中的前四条学生信息)
 模糊查询
 in子查询******not in 子查询
 使用in关键字可以使父查询匹配子查询返回的多个单字段值。
 解决使用比较运算符(=,>等),子查询返回值不唯一错误信息。
 like模糊查询
 LIKE语句语法格式:select * from 表名 where 字段名 like 对应值(子串)。
它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
A:% 包含零个或多个字符的任意字符串: 1、LIKE’Mc%’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
   2、LIKE’%inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
   3、LIKE’%en%’ 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
   B:_(下划线) 任何单个字符:LIKE’_heryl’ 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
   C:[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符:、
   1,LIKE’[CK]ars[eo]n’ 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
   2、LIKE’[M-Z]inger’ 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)
   **D:[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符:LIKE’M[^c]%’ 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
   E: 它同于DOS命令中的通配符,代表多个字符:cc代表cc,cBc,cbc,cabdfec等多个字符。
   F:?同于DOS命令中的?通配符,代表单个字符 :b?b代表brb,bFb等
   G:# 大致同上,不同的是代只能代表单个数字。k#k代表k1k,k8k,k0k 。
   F:[!] 排除 它只代表单个字符
   下面我们来举例说明一下:
   例1,查询name字段中包含有“明”字的。
   select * from table1 where name like ‘%明%’
   例2,查询name字段中以“李”字开头。
   select * from table1 where name like '李’
   例3,查询name字段中含有数字的。
   select * from table1 where name like ‘%[0-9]%’
   例4,查询name字段中含有小写字母的。
   select * from table1 where name like ‘%[a-z]%’
   例5,查询name字段中不含有数字的。
   select * from table1 where name like ‘%[!0-9]%’
   可以自定义转移符----》escape’自定义转移符’
   distinct------》去除重复项
   
   betweenand模糊查询
  操作符 BETWEEN … AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
  null ,not null查询
– 查询手机号不为null的用户数据
 SELECT * from user where phone is not null;
– 查询手机号为null的用户数据
 SELECT * from user where phone is null;
 exists 子查询 not exists子查询
 exists子查询用来确认后边的查询是否继续进行
 drop table if exists test—>判断是否存在表test,如果存在就删除。
 not exists实现取反操作。对不存在对应查询条件的记录。
多表连接查询
 多表连接查询是通过各个表之间共同列的关联性来查询数据。
 1.内连接查询
 内连接查询根据表中共同的列进行匹配。取两个的表的交集。两个表存在主外键关系是通常使用内连接查询。
 内连接使用inner join…on 关键字或者where子句来进行表之间的关联。
 inner 可省略 on 用来设置条件。
 (1)在where子句中指定连接条件
 (2)在from中使用inner join…on关键字
#查询学生姓名和成绩
 SELECT studentname,studentresult FROM student s,result r
 WHERE s.StudentNo=r.StudentNo
#在from中使用inner join…on关键字
 SELECT s.StudentName,r.StudentResult ,r.SubjectNoFROM student s
 INNER JOIN result r ON s.StudentNo=r.StudentNo
两种方法查询结果相同。
 2.外连接查询
 外连接查询中参与连接的表有主从之分,已主表的每行数据匹配从表的数据列,将符合连接条件的数据直接返回到结果集中,对不符合连接条件的列,将被填上null值再返回到结果集中。
 (1)左外连接查询
 left join…on 或者left outer join…on关键字进行表之间的关联。
SELECT s.StudentName,r.StudentResult ,r.SubjectNoFROM student s
 LEFT JOIN result r ON s.StudentNo=r.StudentNo
 1
 2
 将没有成绩的学生成绩查出。
 (2)右外连接查询
 右外连接包含右表中所有的匹配行,右表中有的项在左表中没有对应的项将以null值填充。
 right join…on 或right outer join…on关键字进行表之间的关联。
 (3)自连接
 把一个表作为两个表使用。
#创建一个表
 CREATE TABLE book(
 id INT(10),
 sort INT(10),
 books VARCHAR(10) NOT NULL
 );
 #插入数据
 INSERT INTO book VALUES (2,1,‘古文书’),
 (3,1,‘现代书’),
 (4,2,‘《三字经》’),
 (5,2,‘《唐诗三百首》’),
 (6,3,‘《我与地坛》’),
 (7,2,‘《游大林寺》’),
 (8,2,‘《王右军年减十岁时》’),
 (9,3,‘《致橡树》’);
#查询结果为:
 #书籍类型 书籍名
 #古文书 三字经…
 #现代书 我与地坛…
SELECT a.books 书籍类型, b.books 书籍名
 FROM book a,book b
 WHERE a.id=b.sort;
 MySQL的事务,视图,索引,备份和恢复
 1.事务
 事务是指将一系列数据操作捆绑成为一个整体进行统一管理。
 把所有的命令作为一个整体一起向系统提交或者撤销造组偶请求。
 事务属性:原子性,一致性,隔离性,持久性。
 myISA存储引擎不支持事务。
关闭事务自动提交:set autocommit=0;
 (1)开始事务:begin/start transaction;
 (2)提交事务:commit;
 (3)回滚/撤销事务:rollback;
 恢复自动提交:set autocommit=1;
 设置结果集以??编码格式显示:set names ??;
 2.视图
 视图是一种查看数据库中一个或多个表中数据的方法。视图是一种虚拟表,作为来自一个或多个表的行或列的子集创建的。视图充当查询中的表筛选器的角色。
 (1)创建视图:create view 视图名 as <select语句>
 (2)删除视图:drop view 视图名;
 (3)查看视图数据:select 。。。。。from 视图名;
 3.索引
 索引类似于书的目录,使用索引可以将数据库程序无须对整个表扫描就可以在其中找到所需数据。
 (1)普通数据:允许重复和空值。
 (2)唯一索引:不允许出现重复。可以有多个唯一索引。
 (3)主键索引:非空,唯一。删除时drop primary key;
 (4)复合索引:将多个列组合作为索引。?
 (5)全文索引:可重复和空值,在char,varchar,text创建。
 where match(列名)against (‘查找内容’);
 (6)空间索引:对空间数据类型的列建立的索引。
创建索引:
 create 【索引类型】index 索引名 on 表名 (创建索引的列);
 或者创建表时之间在列后面加上索引类型。
 或者修改表alter table 表名 add index 索引名 (索引列);
 删除索引:drop index 索引名;
 查看索引:show index from 表名;
 4.数据库备份和恢复
 1.使用mysqldump命令备份数据库
 mysqldump -u -p 数据库名>备份数据库位置及名字;
 表数据导出到文本文件
 select *from 表名 where 查询条件 into outfile 备份数据库位置及名字;
2.使用mysql命令恢复数据库(先创建新的数据库)
 mysql -u -p 新创建数据库名<所要恢复数据库位置及文件名;
 source命令恢复数据库
 source 数据库备份文件;
新建用户
#创建本地用户
 CREATE USER user@localhost IDENTIFIED BY ‘123123’;
 #用户可登陆任何远程主机,使用通配符%
 CREATE USER user2@123% IDENTIFIED BY ‘123123’;
 #对用户进行全部权限授权
 GRANT ALL ON mysql.user TO user2@123%;
 #对已创建的用户授权
 GRANT SELECT,INSERT ON mysql.user TO user2@123%;
 #创建用户时授权
 GRANT SELECT,INSERT ON mysql.user TO user_2@123% IDENTIFIED BY ‘123123’;
 #删除用户user2(使用删除语句时必须拥有数据库全局权限或select权限)
 DROP USER user2@123%;
 DROP USER user_2@123%;
 DROP USER user@localhost;
 #mysqladmin修改超级用户user2账户密码(mysqladmin命令在cmd中使用,只能修改超级用户密码)
 mysqladmin -u root -p PASSWORD “123456”;
 #修改当前登录用户密码
 SET PASSWORD =PASSWORD(“123456”);
 #修改其他用户密码
 SET PASSWORD FOR user2@123%=PASSWORD(“123456”);
- 原文链接:https://blog.csdn.net/Withadream/article/details/129087482 ↩︎ 
- 原文链接:https://blog.csdn.net/jgjgkj/article/details/128902763 ↩︎