MySQL数据库常用命令总结
一、连接数据库
mysql -u user -p;回车输入password即可
或
mysql -h localhost -u user -p;回车输出密码
其中-u代表mysql用户,-p为用户密码,-h为mysql的ip地址,如果远程连接mysql改为相应的ip即可
二、对数据库的操作
show db_name; 显示所有数据
use db_name; 选择某数据库
create database db_name; 创建某数据库
drop database db_name; 删除某数据库
三、一些不常用的命令
select version(); 显示mysql的版本
help select; 查看select帮助
status查看MySQL服务器的状态信息(常用于查看其编码方式)
show status;查看MySQL详细使用情况(常用like关键字连用)
show variables like 'character_set_database'; 先切换到xxx数据库下面来,然后使用SQL语句:show variables like 'character_set_database'; 来查看了xxx数据库的编码
四、对数据表的操作
1、创建数据表并查看数据表状态
show tables; 显示所选数据库的所有数据表
create table table_name(column_name column_type[,column_name2 column_type2,...]) 创建数据表
desc tables; 查看数据表结构
drop table table_name; 删除数据表
2、插入与删除数据
①插入数据
inset into table_name(field1, field2,...fieldN) values (value1,value2,...,valueN);
如果数据是字符型,必须使用单引号或者双引号,如:"value"。
如果一次插入多个值,值用‘()’括起来,中间用英文‘,’隔开。例如:
inset into table_name(field1, field2,...fieldN) values (value1,value2,...,valueN),(value'1,value'2,...,value'N)...;
从一个数据表中将数据导入另一个数据表中
insert into table_name1(field1,filed2,...) select field1',field2'... from table_name2;
注意table_name2中的filed1',filed2'与table_name中的filed1,filed2数据类型及数据类型长度都必须相同
②删除数据
truncate table table_name; 保留数据表的结构,清空其数据
delete from table_name;删除表中的所有数据
delete from 表名称 where 删除条件; 删除指定条件下的数据
③更新数据
a.更新表中特定列
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值;
update tb set age=22 where name='zhangsan';
将名为tb的表中字段name为‘zhangsan’的age值设置为22
b.更新表中所有列
UPDATE 表名称 SET 列名称 = 新值;
update tb set age=22 where name='zhangsan';
将名为tb的表中所有字段age值设置为22
3、ALTER TABLE 语句
ALTER TABLE 语句用于在已有的表中添加、修改或删除列。
a、添加列
ALTER TABLE table_name ADD column_name datatype;
b、删除列
ALTER TABLE table_nameDROP COLUMN column_name;
c、修改表中的数据类型
ALTER TABLE table_nameMODIFY COLUMN column_name new_type;
d、修改表中数据表名称
ALTER TABLE table_name TO new_talbe_name;
e、修改表中数据字段名及数据类型
ALTER TABLE table_name CHANGE old_column_name new_column_name new_type;
f、修改存储引擎
alter table tableName engine=myisam; 存储引擎修改为myisam
g、删除外键约束:keyName是外键别名
alter table tableName drop foreign key keyName;
h、修改字段的相对位置:这里name1为想要修改的字段,type1为该字段原来类型,first和after二选一,这应该显而易见,first放在第一位,after放在name2字段后面
alter table tableName modify name1 type1 first|after name2;
%%MySql两种存储引擎的区别%%
介绍几种常用的存储引擎种类 MyISAM InnoDB MEMORY MERGE
MyISAM:
不支持事务,但是每次查询都是原子的;旧版本mysql的默认引擎
支持表级锁,即每次操作是对整个表加锁;存储表的总行数;一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;采用菲聚集索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
InnoDb:
新版本mysql的默认引擎
支持ACID的事务,支持事务的四种隔离级别;支持行级锁及外键约束:因此可以支持写并发;不存储总行数;一个InnoDb引擎存储在一个文件空间(共享表空间,表大小不受操作系统控制,一个表可能分布在多个文件里),也有可能为多个(设置为独立表空,表大小受操作系统文件大小限制,一般为2G),受操作系统文件大小的限制;主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。适用于对于事务由较高要求的表的创建。
MEMORY:
1.数据访问非常快的引擎,存储格式同一放在内存中的一个磁盘文件中格式是.frm 。
2.默认使用hash索引。
3.一旦服务器关闭表中的数据就会丢失。数据大小有限制。
MERGE:
本身是融合的意思,实质是MyISUM表的融合,这些融合的表必须结构完全相同。MERGE本身是没有数据的。插入操作可以是first或者是last。删除只是删除MERGE表定义,并不删除真正表的数据。存储方式:.frm(文件存储表定义信息) .MRG(描述组合表的信息,比如由哪些表组成,插入时的依据)。
适用于:将一系列等同的MyISAM表逻辑方式组合在一起,作为一个对象引用它们
4、查询数据
MySQL 数据库使用SQL SELECT语句来查询数据。
a、基础查询
SELECT column1,column2... FROM table_name;
或
SELECT * FROM table_name;
b、条件查询
SELECT column1,column2... FROM table_name WHERE conditions ;
c、索引不同的列
使用DISTINCT关键字,此关键字指示MySQL只返回不同的值,去重
SELECT DISTINCT COLUMN FROM table_name;
mysql> select * from tb;
+------+----------+------+
| id | name | age |
+------+----------+------+
| 1 | zs | 12 |
| 1 | ls | 13 |
| 2 | zhangsan | 20 |
| 2 | lisi | 18 |
+------+----------+------+
4 rows in set (0.00 sec)
mysql> select distinct id from tb;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.85 sec)
d、限制结果
使用LIMIT关键字限制限制查询结果数
SELECT columns/* FROM table_name [WHERE conditions] LIMIT num1[,num2];
如果LIMIT后有两个数字,第一个数表示为开始的位置,第二个数为要检索的行数。第一行为0行
e、结果排序
使用ORDER BY可对查询结果进行排序
SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]] [LIMIT nums];
注意,可以添加 WHERE ... LIKE子句来设置条件,ORDER BY 是放在WHERE 之后LIMIT之前。
ASC 按升序排列;DESC 按降序排列,默认按升序排列
f、不匹配检查
mysql中<>、!= 为不匹配
SELECT id FROM table_name WHERE id <> 1003;
或
SELECT id FROM table_name WHERE id != 1003;
h、范围值检查
为了检查某个范围的值,可使用BETWEEN ... AND ...语法
SELECT id FROM table_name WHERE id BETWEEN num1 AND num2;
i、空值检查
SELECT filed FROM table_name WHERE filed IS NULL;
j、多条件查询
AND操作符:返回同时满足条件1和条件2的结果
SELECT fileds FROM table_name WHERE condition1 AND condition2;
OR操作符:返回符合其中一个条件的结果
SELECT fileds FROM table_name WHERE condition1 OR condition2;
WHERE可包含任意数目的AND和OR操作符。允许两者结合以进行复杂和高级的过滤。在处理OR操作符之前,优先处理AND操作符,但也可以使用‘()’进行明确地分组。
SELECT fileds FROM table_name WHERE condition1 OR condition2 and condition3;
在满足condition3的情况下返回符合condition1或condition2的结果
IN操作符:指定条件范围,合法值的由逗号分隔开组成范围清单,全放在圆括号中,范围中的每个条件都进行匹配
SELECT * FROM table_name WHERE field in (result1,result2);
相当于
SELECT * FROM table_name WHERE field = result1 OR field = result2;
NOT操作符:否定NOT之后所跟的任何条件
SELECT * FROM table_name WHERE field NOT IN (result1,result2);
返回 field字段非result1,result2的结果
K、用通配符进行过滤(模糊查询)
LIKE操作符:为了在搜索句子中使用通配符,必须使用LIKE操作符。
百分号(%)通配符:在搜素串中,%表示任何字符串出现任意次数
SELECT field1[,field2] FROM table_name WHERE field1 LIKE 'abc%';
搜素模式‘%anvil%’表示匹配任何位置包含文本anvil的值,而不论他之前或之后出现什么字符串
搜素模式‘s%e’表示匹配以s开头以e结尾
注:除了一个或多个字符外,% 还能匹配0个字符。
虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE field LIKE '%';也不能匹配用值NULL作为field值的行。
下划线(_)通配符:用法和%类似,表示匹配单个字符,不能多也不能少
5、用正则表达式进行搜素
在前面的章节我们已经了解到MySQL可以通过LIKE ...%来进行模糊匹配。
MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表达式匹配。
模式描述
^匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。
.匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
[...]字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...]负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
p1|p2|p3匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
*匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
{n}n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
匹配field列包含文本1000的所有行
select field from table_name where field REGEXP '1000' order by field;
匹配field列包含000的所有行
select field from table_name where field REGEXP '.000' order by field;
注:mysql 中的正则表达式匹配不区分大小写,为区分大小写,可使用BINARY关键字,如
WHERE field REGEXP BINARY 'JetPack .000'
| 为正则表达式中的OR操作符,表示匹配其中之一,也可以多个|,如匹配field列中包含1000或2000或3000的行
select field from table_name where field regexp '1000 | 2000 | 3000';
匹配范围
[0123456789] 匹配0到9 或者 [0-9]
[a-z] 匹配任意字母字符
匹配特殊字符
\\- 表示查找-
\\.表示查找.
\\f换车
\\n 换行
\\r 回车
\\t制表符
\\v纵向制表符