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;
选择数据库
- 登陆时选择
mysql -h host[which_db_url] -u username -p which_database
enter password:
- 使用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
网友评论