Mysql必知必会1

#登陆
#1.通过Mac OS的Navicat客户端,该软件为收费软件,但是已知网上有**版
#2.通过Mac OS的终端
$ cd usr/local/mysql/bin
$ mysql -u -root

本人使用的登录方式为安全模式,因为mysql -u -root -p的正常输入密码的方式总是报错,网上搜索到的较为可靠的解决方案如下:解决MySQL5.7在MAC下登录ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)问题
安全模式暂时遇到的问题是show grants命令无法使用,其他正常运行;

#1.了解数据库和表
#使用数据库crashcourse
USE crashcourse;
#SHOW命令显示数据库、表、列、用户、权限等信息
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM customers;
#SHOW COLUMNS FROM a,a要求是一个表名,会给出该表包括列名、列的数据类型、是否允许NULL、是否为主键、默认值等其他信息
DESCRIBE customers;
#DESCRIBE是SHOW COLUMNS FROM的快捷方式
SHOW STATUS;
#显示服务器状态信息,关于常见的查询语句,可见[MySQL – 用SHOW STATUS 查看MySQL服务器状态](https://blog.csdn.net/qq_29168493/article/details/79149132)
SHOW CREATE DATABASE vote;
SHOW CREATE TABLE vote;
SHOW GRANTS;
SHOW ERRORS;
SHOW WARNINGS;

对于SHOW命令,可以使用HELP SHOW查看他们的使用方法。

#2.检索数据
SELECT prod_name
FROM products;
#利用SELECT语句从prod_name表中检索一个名为prod_name的列,输出为一个未排序数据;
SELECT ID,password,adminName
FROM vote;
#检索ID,password,adminName多列;
SELECT *
FROM vote;
#给定通配符*,会返回表中所有列。在表的模式未发生变化的情况下,列的顺序是表定义时的顺序
SELECT DISTINCT password
FROM vote
#检索某一列中不同的元素,DISTINCT必须置于列名前方,同时DISTINCT后不能接多个列名
SELECT password
FROM vote
LIMIT 5;
#LIMIT后面只接一个数字时,它代表的是输出表中的前几行;
SELECT password
FROM vote
LIMIT 2,3;
#LIMIT后面接两个数字时,它代表的是输出行2(第3行,因为第一行是行0)开始的
SELECT vote.password
FROM vote;
SELECT vote.password
FROM vote.vote
#这句SQL语句是访问vote数据库中的vote表中的password列

对于每条SQL语句,我们使用分号分隔;
SQL语句不区分大小写,习惯于对SQL关键字使用大写,而对列和表名使用小写;

#3.排序数据
SELECT password
FROM vote
ORDER BY password;
#子句ORDER BY为可选项,默认为升序排列;
SELECT adminName,password
FROM vote
ORDER BY password;
#可以选择多列并按照某一列进行排序;
SELECT adminName,password
FROM vote
ORDER BY password DESC;
#在ORDER子句末尾添加DESC,使排序由升序变为降序;
SELECT adminName,password
FROM vote
ORDER BY password DESC,adminName;
#在password降序排列的情况下,adminName升序排列;
#4.过滤数据
SELECT adminName,password
FROM vote
WHERE password = 123456
#数据根据WHERE子句中指定搜索条件进行过滤;
#让ORDER BY位于WHERE之后,否则将会产生错误;
#Mysql中=为等于,<>和!=是不等于,BETWEEN A AND B是在两个指定的值之间;
SELECT adminName,password
FROM vote
WHERE password = "abc";
#不区分大小,因此abc和ABC是一样会被匹配;
SELECT adminName,password
FROM vote
WHERE password <> 123456;
#<>不等于
SELECT adminName,password
FROM vote
WHERE ID BETWEEN 2 AND 5;
#不取2但是取5;
SELECT ID,adminName,password
FROM vote
WHERE adminName IS NULL;
#空值检查,这条语句返回adminName为空的行;
SELECT ID,adminName,password
FROM vote
WHERE adminName <= 666 AND  ID <= 4;
#AND是用在WHERE子句中的关键字,用来指示检索满足所有条件的行;
SELECT ID,adminName,password
FROM vote
WHERE adminName <= 666 OR ID <= 4;
#OR是用在WHERE子句中的关键字,用来指示检索满足两个条件中任一个的行;
SELECT adminName,password
FROM vote
WHERE ID = 3 OR ID = 4 AND adminName <= 6;
#AND操作符在SQL中比OR先处理,所以输出是ID是4且adminName<=6
#解决方案是使用括号提高OR的优先级
SELECT adminName,password
FROM vote
WHERE (ID = 3 OR ID = 4) AND adminName <= 6;

SELECT ID,adminName,password
FROM vote
WHERE ID IN (1,2,3)
ORDER BY password;
#IN可以是的语法更清楚且直观,计算次序更加容易管理,执行速度也快于OR操作符,可以包含其他SELECT语句;
SELECT ID,adminName,password
FROM vote
WHERE ID NOT IN (1,2)
ORDER BY password;

用通配符进行过滤,通配符是用来匹配值的特殊字符;
搜索模式是由字面值、通配符或两者组合构成的搜索条件;

SELECT ID,adminName,password
FROM vote
WHERE adminName LIKE '%ina';
#根据Mysql的配置方式,搜索可以是区分大小写的;
#通配符也能出现在搜索模式中间,只是不大好用,除了一个或多个字符外,%还能匹配0个字符。%代表搜索模式中给定位置的0个、1个或多个字符
#%通配符似乎可以匹配任何东西,但实际上NULL是不能匹配的
SELECT ID,adminName,password
FROM vote
WHERE adminName LIKE '%';
#单独的通配符无法匹配NULL
SELECT ID,adminName,password
FROM vote
WHERE adminName LIKE '_ina';
#_通配符只匹配一个字母
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '123456'
ORDER BY ID;
#REGEXP为正则表达式匹配,不区分大小写;
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '.23456'
ORDER BY ID;
#正则表达式为“.23456”可以将匹配123456,.表示匹配任意一个字符
SELECT ID,adminName,password
FROM vote 
WHERE password REGEXP '1000|2000'
ORDER BY ID;
#OR匹配,|表示二者当中取其一
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '12345[678]'
ORDER BY ID;
#[678]匹配6或7或8中任意一个满足条件;
#[678]可以匹配6或7或8,[^678]可以匹配除这些字符外的任何东西
#[0123456789]为了简化组合,可以使用[0-9],此外可以使用[a-z]匹配任意字母字符
SELECT ID,adminName,password
FROM vote
WHERE adminName REGEXP '.'
ORDER BY ID;
#此时我们想要匹配的是包含.字符的行,但在此处Mysql的输出会是所有行,因为.匹配任意字符;
SELECT ID,adminName,password
FROM vote
WHERE adminName REGEXP '\\.'
ORDER BY ID;
#为了匹配特殊字符,必须使用\\作为前导,\\-表示查找-,\\.表示查找.。
#为了匹配转义字符本身,我们使用\\\;
#多数正则表达式实现转义只需要一个\,而Mysql的两个\\一个是给Mysql自身使用,另一个才是给正则表达式解释;
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '\\([0-9] sticks?\\)'
ORDER BY ID;
#这里的括弧是文本中带有的,并非是正则表达式的格式;
#sticks?中的?使得?变得可选,即?前的字符出现0次或者1次的stick或是sticks都可以被匹配
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '[:digit:]{4}'
ORDER BY ID;
#匹配连着出现4次数字的字符,相当于[0-9][0-9][0-9][0-9]
SELECT ID,adminName,password
FROM vote
WHERE password REGEXP '^[0-9\\.]'
ORDER BY ID;
#^是定位符,它定位在文本的开始,^[0-9\\.]将匹配任意以数字开头的文本

匹配字符类:
[:alnum:]任意字母与数字(=[a-zA-Z])
[:alpha:]任意字母(=[:a-z:])
[:blank:]空格和制表(同[\t])
[:cntrl:]ASCII控制字符(ASCII 0到31和127)
[:digit:]任意数字(同[0-9])
[:graph:]任意可打印字符,但不包括空格
[:lower:]任意小写字母(同[a-z])
[:upper:]任意大写字母(=[A-Z])
[:print:]任意可打印字符
[:punct:]既不在[:alpha:]也不在[:cntrl:]中的任意字符
[:space:]包括空格在内的任意空白字符(=[\f\n\r\t\v])
[:xdigit:]任意十六进制数字(=[a-fA-F0-9])
元字符:

  • 0个或者多个匹配
  • 1个或者多个匹配(等于{1,})
    ? 0个或1个匹配(等于{0,1})
    {n}指定数目的匹配
    {n,}至少出现n次的匹配
    {n,m}匹配指定范围,m最大值为255
    定位符:
    ^ 文本开始
    $ 文本结尾
    [[:<:]]词的开始
    [[:>:]]词的结尾

参考书籍:《MySQL必知必会》前九章内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值