@songying
2018-09-20T22:19:52.000000Z
字数 5403
阅读 1120
mysql
mysql workbench
某些表列需要唯一值。例如,订单编号、雇员ID或顾客ID。在每个行添加到表中时,MySQL可以自动地为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值(这样做必须记住最后一次使用的值)。这个功能就是所谓的自动增量。如果需要它,则必须在用CREATE语句创建表时把它作为表定义的组成部分。
ps -ef | grep mysqld //检查mysql服务器是否启动
/* 启动mysql服务器 */
service mysql start
/*关闭mysql服务器 */
service mysql stop
/* 重启mysql服务器 */
service mysql restart
mysql -u root -p //root用户登录mysql服务器
mysql的连接需要一下信息:
- 主机名:本地Mysql服务器为localhost
- 端口:默认为3306
- 一个合法的用户名
- 用户口令
show
相关命令注意:一定要在结尾添加分号.
show databases //列出 MySQL 数据库管理系统的数据库列表
show tables //列出某数据库中的所有表
show columns from 表名 // 显示表列 ??????
show columns from 表名; //显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息
describe 表名 // 显示表列,是上一个命令的快捷方式
show create database 数据库名 //显示创建该数据时所使用的mysql语句
show create table 表名 //显示创建该表时所使用的mysql语句
show grants; //显示当前授予用户的安全权限
show errors; //显示服务器错误消息
show warnings; //显示服务器警告信息
show status; //显示广泛的服务器状态信息
help show; //显示show的帮助文档
SHOW INDEX FROM 数据表; //显示数据表的详细索引信息,包括PRIMARY KEY(主键)
SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G; //输出Mysql数据库管理系统的性能及统计信息。
CREATE DATABASE 数据库名; //创建数据库
DROP DATABASE 库名; //删除数据库
SHOW DATABASES; //列出 MySQL 数据库管理系统的数据库列表
use 数据库名; //选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。
select database(); //查看已选择的数据库
SHOW TABLES; //显示指定数据库的所有表
create table tablename(fieldname1 fieldtype1,fieldname2 fieldtype2,..)[ENGINE=engine_name]; //创建表
drop table tablename; //删除表
desc tablename; //查看表结构
show create table tablename; //查看建表语句
;
分隔。且尽量在每条Mysql命令后加分号;
。
select 列名 from 表名; //从表中检索出名为“列名”的列
select 列1,列2, 列3 from 表名; //从表中检索出多列数据
select * from 表; //检索表的所有列
selct distinct 列名 from 表名; // 从表中检索出名为“列名”的列,且输出不同的行值。注意,distinct必须放在列名的前面,且distinct作用于其后所有的列
select 列名 from 表 limit 5; //LIMIT 5指示MySQL返回不多于5行
select 列名 from 表 limit 4,6; //表示返回从行4开始检索6行
select 表名.列名 from 表名; //从表中的一个列
select 表名.列名 from 数据库名.表名 //限定表名,列名,数据库名
子句
SQL语句由子句构成,有些子句是必需的,而有的是可选的。
数据排序默认以升序排列
DESC 表示降序排列,且只应用到直接位于其前面的列名。如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
ASC表示升序排列。
ORDER BY子句的位置 在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,它必须位于ORDER BY之后。使用子句的次序不对将产生错误消息。
select 列名 from 表名 order by 列1 //对该列以字母排序
select 列1,列2,列3 from 表名 order by 列1, 列2; //先按列1排序,再按列2排序
select 列1, 列2, 列3 from 表 order by 列1 DESC; //按列1的字母降序排列
select 列1, 列2, 列3 from 表 order by 列1 DESC,列2; //按列1的字母降序排列,再按列2 的字母升序排列
select 列1, 列2, 列3 from 表 order by 列1 DESC limit 1;
select prod_name, prod_price from products where prod_price = 2.50; //检索两个列,但只返回products表中prod_price为2.50的行
select prod_name, prod_price from products where prod_name = 'fuses'; //检索两个列,但只返回products表中prod_name为fuses(不区分大小写)的行
select prod_name, prod_price from products where prod_price between 5 and 10;
select prod_name, prod_price from products where prod_price IS NULL; // 判断是否包含值
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
= |
大于等于 |
between | 在指定两个值之间 |
逻辑操作符 | |
---|---|
AND | 可以使用多个and来过滤数据 |
OR | |
IN | WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。 |
NOT | WHERE子句中用来否定后跟条件的关键字。 |
select prod_name, prod_price from products where prod_name = 'song' AND prod_price = 12;
select prod_name, prod_price from products where prod_name = 'song' AND prod_name = 'zhang';
select prod_name, prod_price from products where (vend_id = 1002 OR vend_id = 1003) AND prod_price > 10
select prod_name, prod_price from products where vend_id IN (1002,1003)
select prod_name, prod_price from products where vend_id NOT IN (1002,1003)
通配符:用来匹配值的一部分的特殊字符。
搜索模式:由字面值、通配符或两者组合构成的搜索条件。
LIKE操作符:LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。
注意尾空格
尾空格可能会干扰通配符匹配。例如,在保存词anvil 时,如果它后面有一个或多个空格,则子句WHEREprod_name LIKE '%anvil'将不会匹配它们,因为在最后的l后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个%。一个更好的办法是使用函数(第11章将会介绍)去掉首尾空格。
注意: %
不能匹配NULL
使用通配符时的建议:
- 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。
% |
表示任何字符出现任意次数。0,1,或多个字符 |
---|---|
_ |
只匹配单个字符 |
select prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%'; //检索prod_name中任意以jet为开头的词
select prod_id, prod_name FROM products WHERE prod_name LIKE '_ ton';
表示法 | 描述 | 实例 |
---|---|---|
literal |
匹配文本字符串的字面值 literal | foo |
` re1 | re2 ` | 匹配正则表达式 re1 或者 re2 |
. |
匹配任何单个字符(除了\n 之外) | b.b |
^ |
匹配字符串起始部分 | ^Dear |
$ |
匹配字符串终止部分 | /bin/*sh$ |
* |
匹配 0 次或者多次前面出现的正则表达式 | [A-Za-z0-9]* |
+ |
匹配 1 次或者多次前面出现的正则表达式 | [a-z]+.com |
? |
匹配 0 次或者 1 次前面出现的正则表达式 | goo? |
{N} |
匹配 N 次前面出现的正则表达式 | [0-9]{3} |
{M,N} |
匹配 M~N 次前面出现的正则表达式 | [0-9]{5,9} |
[...] |
匹配来自字符集的任意单一字符 | [aeiou] |
[..x−y..] |
匹配 x ~ y 范围中的任意单一字符 | [0-9], [A-Za-z] |
[^...] |
不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现) | [^aeiou] ,[ ^A-Za-z0-9] |
(*|+|?|{})? |
用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{}) | .*?[a-z] |
(...) |
匹配封闭的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo|u)bar |
select prod_name from products where prod_name regexp '1000' //检索列prod_name包含文本1000的所有行
select prod_name from products where prod_name regexp '.000'
select prod_name from products where prod_name regexp '1000|2000'
select prod_name from products where prod_name regexp '1|2|3 ton' #检索1,2,3 ton,而不是1 ton,2 ton, 3 ton
select prod_name from products where prod_name regexp '[123]000'
select prod_name from products where prod_name regexp '[^123]000'
[1-9] [a-z] [A-Z]
select prod_name from products where prod_name regexp '\\.' #转义字符
空白元字符 | 说明 |
---|---|
\\f |
换页 |
\\n |
换行 |
\\r |
回车 |
\\t |
制表 |
\\v |
纵向制表 |
注意:mysql中的正则表达式的转义字符使用\\
而不是\
字符类 | 说明 |
---|---|
[:alnum:] |
任意字母和数字(同[a-zA-Z0-9]) |
[:alpha:] | 任意字符(同[a-zA-Z]) |
[:blank:] | 空格和制表(同[\t]) |
[:cntrl:] | ASCII控制字符(ASCII 0到31和127) |
[:digit:] | 任意数字(同[0-9]) |
[:graph:] |
与[:print:]相同,但不包括空格 |
[:lower:] |
任意小写字母(同[a-z]) |
[:print:] |
任意可打印字符 |
[:punct:] | 既不在[:alnum:]又不在[:cntrl:]中的任意字符 |
[:space:] | 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v] ) |
[:upper:] | 任意大写字母(同[A-Z]) |
[:xdigit:] |
任意十六进制数字(同[a-fA-F0-9]) |