记录一些在读这本书[《mysql必知必会》][1]时一些重要的概念。
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语句不区分大小写,但是对关键字进行大写更易于阅读。
检索单个列
select prod_name from table_name;
检索多个列 = 在select后给出多个列名,列名间有逗号。
select col1, col2, col3 from table_name;
检索所有列(最后不要随便使用
*
)select * from table_name;
distinct关键字
limit 关键字(第一条记录号为0)
select col_name from table_name limit 5; // 指示mysql返回不多于5行
select col_name from table_name limit 5, 5; // 从第5行开始检索5行(不包括开始行)
完全限定表名引用列
select table_name.col_name from table_name;
5th 排序检索(order by)
order by子句位于from子句之后。
clause(子句)
select col_name from table_name order by col_name, col_name2;
order by排序方向(desc, asc)
select col_name from table_name order by col_name asc/desc;
// 实际上asc没什么用,默认是升序的。
使用
order by
和limit
的组合,得到一个列中最高或最低的值select 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 = 使用别名
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语句
##updateTand delete+08 = ‘00’
- don’t ignore where clause -updateTtable_name set xxx=‘xxx where xxx+08 = 00’
- delete a row
delete from table_name where col_name = xxx;
alter table
- add a column
alter 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注释
#
--
/* */
在一行代码中插入多条数据
insert into table_name values (), (), ...
mysql修改表名(两种方法)
rename
RENAME TABLE table_name TO another_table_name;
- ALTER TABLE table_name RENAME TO another_name
replace更改数据
UPDATE table_name SET field_name = REPLACE(field_name, from_data, to_data) where xxx;
set关键字更新列(用逗号连接多个)
set col_name=new_data, col_name2=new_data2...
创建表
CREATE TABLE IF EXISTS table_name (xxx, xxx, xxx, PRIMARY KEY(pid));
substr()
substr(字符串,起始位置,长度) 起始位置 =截取的子串的起始位置(注意:字符串的第一个字符的索引是1)。值为正时从字符串开始位置 开始计数,值为负时从字符串结尾位置开始计数。 长度 =截取子串的长度
add column in table
ALTER TABLE table_name ADD column_name datatype
primary key and unique index
主键约束比唯一索引约束严格,当没有设定主键时,非空唯一索引自动称为主键。对于主键和唯一索引的一些区别主要如下:
- 主键不允许空值,唯一索引允许空值
- 主键只允许一个,唯一索引允许多个
MySQL必备神器–mycli(补全)
- Install(ubuntu) =
sudo apt-get install mycli
- Login(cli) =
mycli -u name -p passward