MySQL crash course reading notes
记录一些在读这本书《mysql必知必会》时一些重要的概念。
1th 了解数据库
database
table(column, datatype, row)
row == record
schema(模式): 关于数据库和表的布局及特性的信息
primary key
表中任何列都可以作为主键:
- 任意两行都不具有相同的主键值
- 每个行都必须具有一个主键值(主键列不允许NULL值)
sql(structured query language): 结构化查询语言
2th mysql简介
MySQL CLI login: mysql -u root -p
3th 使用mysql
- 使用数据库: use database_name;
- 显示数据库: show databases;
- 获得数据库内表的列表: show tables;
- 显示表列: show columns from table_name;
- 自增量: auto_increment
4th 检索数据
mysql命令行必须加上分号来结束sql语句。
sql语句不区分大小写,但是对关键字进行大写更易于阅读。
检索单个列
1
2select prod_name
from table_name;检索多个列: 在select后给出多个列名,列名间有逗号。
1
2select col1, col2, col3
from table_name;检索所有列(最后不要随便使用
*
)1
2select *
from table_name;distinct关键字
limit 关键字(第一条记录号为0)
1
2
3select col_name
from table_name
limit 5; // 指示mysql返回不多于5行1
2
3select col_name
from table_name
limit 5, 5; // 从第5行开始检索5行(不包括开始行)完全限定表名引用列
1
2select table_name.col_name
from table_name;
5th 排序检索(order by)
order by子句位于from子句之后。
- clause(子句)
1
2
3select col_name
from table_name
order by col_name, col_name2; - order by排序方向(desc, asc)// 实际上asc没什么用,默认是升序的。
1
2
3select col_name
from table_name
order by col_name asc/desc; - 使用
order by
和limit
的组合,得到一个列中最高或最低的值1
2
3
4select col_name
from table_name
order by col_name desc
limit 1;
6th 过滤数据(where)
- where clause 在 from clause之后
- 同时使用
where
和order by
时,order by应该在where之后 - where 子句操作符
=
<>
/!=
<
<=
>
>=
between
: 在两个值之间, 这两个值使用AND
分隔
is null
: 检测空值
10th 计算字段
- as: 使用别名
1
select col_name as another_name
11th 数据处理函数
- upper(col_name): 将文本转换为大写
- 很多日期处理函数
- abs()
- mod()
- rand()
- sqrt()
- round(col_name, a): a是小数点位数
12th 汇总数据
- aggregate function
- avg(): 返回某列平均值
- count(): 返回某列行数
- max(): 返回某列最大值
- min(): 返回某列最小值
- sum(): 返回某列值之和
13th 分组数据(group by / having)
- group by: 在 where后,order by之前
14th subquery
- 在select语句中,子查询总是从内向外处理
15th 联结表(join)
- 外键(foreigh key): 为某个表的一列,它包含另一个表的主键值,定义了两个表的关系。
- 好处1: 减少信息的重复
- 在引用的列可能出现二义性时,必须使用完全限定列名(table_name.col_name)
16th 创建高级联结
- 使用表别名(
AS
)
- 缩短sql语句
update and delete
- don’t ignore where clause
- update table_name set xxx=xxx where xxx
- delete a row
1
2delete from table_name
where col_name = xxx;
alter table
- add a column
1
2alter table vendors
add vend_phone char(20); - delete table:
drop table table_name;
view
- create view:
create view view_name
- drop view:
drop view view_name;
- mysql注释
1 | # |
在一行代码中插入多条数据
1
insert into table_name values (), (), ...
mysql修改表名(两种方法)
rename
1
2
RENAME TABLE table_name TO another_table_name;- ALTER TABLE table_name RENAME TO another_name
replace更改数据
1
2
3UPDATE table_name
SET field_name = REPLACE(field_name, from_data, to_data)
where xxx;set关键字更新列(用逗号连接多个)
1
set col_name=new_data, col_name2=new_data2...
创建表
1
2
3
4
5CREATE TABLE IF EXISTS table_name
(xxx,
xxx,
xxx,
PRIMARY KEY(pid));substr()
substr(字符串,起始位置,长度)
起始位置:截取的子串的起始位置(注意:字符串的第一个字符的索引是1)。值为正时从字符串开始位置 开始计数,值为负时从字符串结尾位置开始计数。
长度:截取子串的长度add column in table
1
2ALTER TABLE table_name
ADD column_name datatypeprimary key and unique index
主键约束比唯一索引约束严格,当没有设定主键时,非空唯一索引自动称为主键。对于主键和唯一索引的一些区别主要如下:
- 主键不允许空值,唯一索引允许空值
- 主键只允许一个,唯一索引允许多个
MySQL必备神器–mycli(补全)
- Install(ubuntu):
sudo apt-get install mycli
- Login(cli):
mycli -u name -p passward