菜鸟的修炼之MySQL

1.1 安装与配置

百度一下

1.2 环境变量配置

添加MYSQL_HOME,值是MySQL的安装目录,比如:D:\MySQL\MySQL Server 5.0
在Path中添加MYSQL_HOME的引用,值是%MYSQL_HOME%\bin;
此配置是为了方便使用mysql命令,如果使用可视化开发工具可以忽略。

2.1 连接与断开服务器

连接:

mysql -h host[数据库的url] -u username -p
enter password: 

断开:

QUIT或者\q

2.2 数据库的创建和使用

查询服务器上的数据库:

show databases;

访问数据库

use database_name;
2.2.1 创建并选择数据库

创建

create database database_name;

选择数据库

  1. 登陆时选择
mysql -h host[which_db_url] -u username -p which_database
enter password:
  1. 使用use命令
use database_name;
2.2.2 数据类型
用途 名称 大小 格式
整数 INTEGER 4字节
单精度浮点数 FLOAT 4字节
双精度浮点数 DOUBLE 8字节
日期值 DATE 3字节 YYYY-MM-DD
时间值 TIME 3字节 HH:MM:SS
年份值 YEAR 1字节 YYYY
日期和时间混合 DATETIME 8字节 YYYY-MM-DD HH:MM:SS
时间戳 TIMESTAMP 4字节 YYYYMMDDHHMMSS
定长字符串 CHAR 0-225字节
变长字符串 VARCHAR 0-65635字节
长文本数据 TEXT 0-65635字节
2.2.3 创建表

查看数据库中的表

show tables;

创建表

create table table_name (column_name column_type column_description);

范例

CREATE TABLE IF NOT EXISTS user (
    C_OID INT AUTO_INCREMENT,    //AUTO_INCREMENT字段自增;
    C_NAME VARCHAR(128) NOT NULL,
    C_PSWD VARCHAR (64) NOT NULL,
    C_UPDATE DATE,
    PRIMARY KEY (C_OID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;    //ENGINE=InnoDB表明此表可以进行事务管理;DEFAULT CHARSET设置默认编码

显示表的结构

describe table_name;

范例

DESCRIBE user;

删除表

drop table table_name;

范例

DROP TABLE user;

2.2.4 操作表中的数据

2.2.4.1 数据检索
select column_name
from table_name
where conditions_to_satisfy;

范例

SELECT C_OID, C_NAME, C_PSWD, C_UPDATE
FROM user
WHERE 1 = 1
2.2.4.2 数据插入

1) 使用文本文件(*.txt)插入,文件格式是一条记录一行,空的值使用\N,数据的数据要跟表的字段顺序相同,而且之间用定位符(tab)隔开。

load data local infile '/path/file' into table table_name
lines terminated by '\r\n';

2) 使用insert into语句

insert into table_name(column_name) values(column_value);

范例

INSERT INTO user(C_NAME, C_PSWD, C_UPDATE) VALUES('张三', '1234', '2017-06-27');
2.2.4.3 数据更新

1) 通过修改文件更新

delete from table_name;
load data local infile '/path/file' into table table_name;

2) 使用update语句

update table_name set what_to_update = value 
where conditions_to_satisfy;

范例

UPDATE user SET C_NAME = '李四' 
WHERE C_OID = 1
2.2.4.4 数据删除
delete from table_name 
where conditions_to_satisfy;

范例

DELETE FROM USER WHERE C_OID = 2;
2.2.4.5 特殊操作

1) 去除重复

select distinct table_name from table_name;

范例

SELECT DINSTINCT C_NAME FROM user;

2) 排序
mysql的排序默认是升序(asc)的,如果是降序的话要使用desc

SELECT * FROM user
ORDER BY C_OID ASC;    //升序
ORDER BY C_OID DESC;    //降序

3)NULL值操作
查询NULL值的时候不能使用普通的算术运算符去判断

SELECT 0 IS NULL, 0 IS NOT NULL;

当使用order by语句是NULL值会被当做最小值
4) 模糊匹配
like

SELECT * FROM user WHERE C_NAME LIKE '';
SELECT * FROM user WHERE C_NAME NOT LIKE '';

"_"字符匹配任何单人字符,"%"匹配任意数目字符,查询时默认不区分大小写,比较操作符应使用like或not like。
regexp

  • '.'匹配任何单个的字符
  • 字符类"[...]"匹配在方括号内的任何字符
  • "*"匹配零个或者多个在它前面的字符
  • bifnary比较式区分大小写
  • '^'匹配以跟在后边的字符开头,'$'匹配以跟在前面的字符结尾
  • '^ $' 匹配 '^' 和'$'之间的字符相同的字符串
  • '{n}'匹配重复n次跟在前面的字符

找出以b开头的名字

SELECT * FROM user WHERE C_NAME REGEXP '^b';

找出以fy结尾的名字

SELECT * FROM user WHERE C_NAME REGEXP 'fy$';

找出包含一个w的名字

SELECT * FROM user WHERE C_NAME REGEXP 'w';

找出长度为5的名字

SELECT * FROM user WHERE C_NAME REGEXP '^.....$';
SELECT * FROM user WHERE C_NAME REGEXP '^.{5}$';

5) 计数
count();

SELECT COUNT(*) FROM user;

6) 分组
group by

SELECT C_NAME FROM user 
GROUP BY C_NAME

使用group by时,要注意group by后要求跟上所有的查询字段,并且字段的名字不能为别名。
7) 批处理
处理sql脚本

mysql -h host[数据库的url] -u username -p < batch-file
enter password: 

2.2.5 常用查询的例子

2.2.5.1 求最大值或最小值
select max(column_name), min(column_name) from table_name;

范例 最大/小的物品号

SELECT MAX(article) AS article FROM shop;
SELECT MIN(article) AS article FROM shop;
2.2.5.2 求某列的最大值或最小值

最贵/便宜的编号、销售商和价格

SELECT article, dealer, price
FROM shop
WHERE price = (SELECT MAX(price) FROM shop);
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT  1;    //获取第一行,并显示
2.2.5.3 自增长

auto_increment

CREATE TABLE shop (
    article INT NOT NULL AUTO_INCREMENT,
    dealer CHAR(8),
    price DOUBLE(16, 2),
    PRIMARY KEY (article)
);
INSERT INTO shop VALUE('A', '3.45');

可以通过last_insert_id()函数来查询最新的索引值

SELECT LAST_INSERT_ID() FROM shop;

设置自增长的值

ALTER TABLE shop AUTO_INCREMENT = 2;

3 函数和操作符

3.1 操作符优先级

同行的优先级相同

:=
||, OR, XOR
&&, AND
NOT
BETWEEN AND, CASE WHEN THEN ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
-, ~
!
BINGARY, COLLATE
3.2 比较函数和操作符

比较运算产生的结果为1(true)、0(false)或NULL
MySQL数值比较规则

  • 若有一个或两个参数为NULL时,除<=>算符,其他的结果都为NULL
  • 若同一个比较运算中的两个参数都是字符串,则按字符串进行比较
  • 若两个参数均为整数,则按照整数比较
  • 默认情况下,字符串比较不区分大小写

数值比较

  • = 等于
SELECT 1 = 0;    //0 fales
  • <=> 等于
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;    //1, 1, 0 true, true, false
SELECT 1 = 1, NULL = NULL, 1 = NULL;    // 1, NULL, NULL   
  • <> != 不等于
SELECT 1 <> 2;    //1
SELECT 1 != 2;    //1
  • <=、<、>=、> 小于等于、小于、大于等于、大于
  • is boolean_value、not is boolean_value根据布尔值检验一个值
SELECT 1 IS TRUE, O IS FALSE, NULL IS UNKNOWN;    //1, 1, 1
  • is null、is not null检验一个值是否为null
SELECT 1 IS NULL, NULL IS NULL, 1 IS NOT NULL;    //0, 1, 1
  • exper between min and max当exper大于等于min并且小于等于max的时候返回1,否则返回0
SELECT 2 BETWEEN 1 AND 3;    //1
  • coalesce(value, ...) 返回列表中第一个非NULL值,如果没有非NULL值的情况下返回NULL
SELECT COALESCE(NULL, 1, 2);    //1
SELECT COALESCE(NULL, NULL, NULL);    //NULL
  • greatest(value1, value2,...) 返回列表中的最大值,当包含NULL值时,返回值为NULL
SELECT GREATEST(2, 0);    //2
  • exper in (value1, value2) 判断exper是否在列表中,在返回1,否则返回0
SELECT 2 IN (1, 3, 4, 5, 2);    //1
  • isnull(exper) 判断exper是否为null
SELECT ISNULL(1/0);    //1
  • interval(n, n1, n2, n3, ....) 返回列表中第一个不比n小的值的列表下标,n1的下标为0
SELECT INTERVAL(23, 1, 34, 56, 2);    //1
  • least(value1, value2,...) 返回列表中的最小值,当包含NULL时,返回NULL
SELECT LEAST(4, 2, 3);    //2
3.3 逻辑操作符
  • not、! 逻辑not,当操作数为0时,返回值为1,当操作数为非零时,返回值为0,当操作数为NULL时,返回NULL
SELECT NOT 10, NOT 0, NOT NULL, !(1+1), !1+1;    //0, 1, null, 0, 1 
  • and、&& 逻辑and,当所有操作数均为非零值、并且不为NULL时,计算所得结果为 1 ,当一个或多个操作数为0 时,所得结果为 0 ,其余情况返回值为 NULL
SELECT 1&&1, 1&&0, 1&&NULL, 0&&NULL, NULL&&NULL;    //1, 0, null, 0, null
  • or、|| 逻辑or,当两个操作数均为非 NULL值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。当有一个操作数为NULL时,如另一个操作数为非零值,则结果为1,否则结果为 NULL 。假如两个操作数均为 NULL,则所得结果为 NULL。
SELECT 1||1, 1||0, 0||0, 0||NULL, 1||NULL, NULL||NULL;    //1, 1, 0, 0, 1, NULL
  • xor 逻辑xor,当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为 1 ,否则为 0 。
SELECT 1XOR1, 1XOR0, 1XORNULL, 1XOR1XOR1;    //0, 1, NULL, 1
3.4 控制流程函数
case value 
when [compare-value] 
then result 
[when [compare-value] then result ...]
[else result] 
end

范例:

CASE 1
WHEN 1 THEN 'ONE'
WHEN 2 THEN 'TWO'
ELSE 'OTHER'
END;   //ONE
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,940评论 6 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,608评论 18 399
  • 一、荀與孔氏 荀卿於《非十二子》中掊擊思、孟甚力,目為“略法先王而不知其統”。《解蔽》篇中寓言亦為思、孟而發。“空...
    座客苍凉阅读 365评论 0 2
  • 1、小王子:你知道--当你感觉到悲伤的时候,就会喜欢看落日... 2、如果有人钟爱着一朵独一无二的、盛开在浩瀚星海...
    凉薄念暖阅读 419评论 0 0