MySQL数据库简单命令整理
1.创建数据库:
create database if not exists MyBlog default charset utf8 collate utf8_general_ci;
语句解释:
default charset utf8 默认使用utf8编码格式
collate 校对规则
utf8_general_ci 数据库采用utf8编码且大小写不敏感
ci: case insensitive 的缩写, 不分大小写,大小写区分不敏感
cs: case sensitive 的缩写,区分大小写,大小写敏感
2.drop命令 删除数据库
drop database MyBlog;
3.选择要操作的数据库:
use MyBlog;
4.创建数据表:
create TABLE table_name (column_name column_type);
实例:在MyBlog数据库中创建一个数据表blog_tbl
CREATE TABLE IF NOT EXISTS `blog_tbl`(
`blog_id` INT UNSIGNED AUTO_INCREMENT,
`blog_title` VARCHAR(100) NOT NULL,
`blog_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `blog_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
语句解释:
UNSIGNED 代表的是无符号 而不是大于0。
AUTO_INCREMENT 代表自增,创建主键 UNSIGNED 和 AUTO_INCREMENT连用, 表示从0开始自增 (由0开始自增,所以第一个自增的id为 1 ) 。
PRIMARY KEY关键字用于定义列为主键。 可以使用多列来定义主键,列间以逗号分隔。
ENGINE 设置存储引擎,CHARSET 设置编码。
注:字段加引号为了避免特殊字符冲突
数据库存储引擎:
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能。 可以使用 show engines;命令来查看MySQL使用的引擎,如下图所示:存储引擎的选择:
不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:
如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择。
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率。
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。
5.删除数据表:
DROP TABLE table_name;
6.插入数据:
INSERT INTO table_name (filed1,filed2,...filedN) VALUES (value1,value2,...valueN)
实例:向blog_tbl数据表中插入数据:
INSERT INTO blog_tbl (blog_title, blog_author, submission_date) VALUES ("学习数据库", "冰糖可乐", NOW());
7.查询数据:
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M]
使用 WHERE 语句来包含任何条件。
使用 LIMIT 属性来设定返回的记录数。
通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。
如下实例:
SELECT * from blog_tbl WHERE BINARY blog_author='BTKE.COM';
where:数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。
group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。
having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。
8.更新数据:
UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
9.删除数据:
DELETE FROM table_name [WHERE Clause]
delete,drop,truncate 都有删除表的作用,区别在于:
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。
10.MySQL的 LIKE 子句:
SELECT field1, field2,...fieldN FROM table_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
'_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
11.MySQL的UNION操作符:
UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)
SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称; SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
12.MySQL排序
SELECT field1, field2,...fieldN FROM table_name1, table_name2... ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
实例:
SELECT * from blog_tbl ORDER BY submission_date ASC;
MySQL 拼音排序
如果字符集采用的是 gbk(汉字编码字符集),直接在查询语句后边添加 ORDER BY:
SELECT *
FROM blog_tbl
ORDER BY blog_title;
如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序:
SELECT *
FROM blog_tbl
ORDER BY CONVERT(blog_title using gbk);
13.MySQL分组
select name ,count(*) from blog_tbl Group By name;
14.MySQL连接的使用
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.blog_id, a.blog_author, b.blog_count FROM blog_tbl a INNER JOIN tcount_tbl b ON a.blog_author = b.blog_author;