概念
层次
database table column row
数据库→表→行、列,行是专业术语,也可以说成是记录。
主键
- 主键列不允许有NULL,主键值不能重复。
- 能唯一区分表中的每个行,保证更新,删除操作只针对特定的行。
- 通常定义在表中的一个列上,也可以使用多个列作为主键。
- 可以使用多个列组成主键
primary key(order_num,order_item)
数据库、表
create database database_name;
drop database database_name;
use database_name;
DDL 待续
create alter drop
alter table table_name rename to new_table_name;
alter table table_name add primary key(column_name);
alter table table_name modify column_name int auto_increment;
增删改查
INSERT INTO
- 不指定列名按默认顺序,指定列名可以按任意(列名顺序)插入value值。
- 指定列名可以插入部分值但是注意,主键不可以为空。
- 指定列名的好处(表结构变化依然可以使用原insert into 语句)
create table user(
name VARCHAR(10),
age INTEGER,
id INTEGER PRIMARY KEY);
# 不指定列名
INSERT INTO user VALUES('zll',18,1);
# INSERT INTO user VALUES(1,18,'zll'); 顺序不对,报错
#指定列名顺序任意
INSERT INTO user (id,name,age) VALUES(2,'njz',18);
INSERT INTO user (name,age,id) VALUES('zjn',18,2);
# 主键的问题
# INSERT INTO user(name,age) VALUES('zds',18); 主键不能为空,报错
INSERT INTO user(name,id) VALUES('zds',18);
- 批量插入,主键自动增长
# INSERT INTO user VALUES('a',18,3),('b',18,3),('c',18,3); 主键值不能重复,报错
alter table user3 modify id int auto_increment;
INSERT INTO user3 VALUES('a',18,NULL),('b',18,NULL),('c',18,NULL);
DELETE
#全删除
delete from user3;
#
delete from user3 where id = 3;
UPDATE
update table_name set column1_name = new_value where column2_name = XXX;
查
- DISTINCT 去重复
select distinct id from user;`
- LIMIT 定义检索的开始结束行数
单值n—前n行;
两个值—起始位置 、查询行数;第一行为行0
SELECT name from 3user limit 3; #a,b,c
SELECT name from 3user limit 1,2; #b,c
WHERE 过滤数据
- 操作符
操作符 | 含义 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
between | BETWEEN a AND b |
- IN
in与or可以完成相同的功能,但是in执行的更快,而且可以包含其他的select语句。 - LIKE 通配符过滤
速度慢,尽量不要使用,尽量放到最后。
符号 | 含义 |
---|---|
% | 任意字符出现的任意次数 0→正无穷 |
_ | 任意字符匹配一次 |
- Concat
SELECT Concat(user_name,'(',user_id,')') from users;
#----- zhangjianan(18)
#----- nanjiazhang(81)
- 聚集函数
可以使用distinct去重
avg count max main sum- count 指定列名忽略NULL,不指定列名计算NULL
- max 忽略null
- min 忽略null
- sum
分组 和 排序
where过滤行,having过滤分组,having可以替代where,where过滤掉的行不会存在分组中。
分组
联结 join
外键:某个表的一列,包含另一个表的主键值,定义了两个表之间的关系。
联结:是一种机制,用来关联表。
- 内部联结(等值联结)
inner join on
SELECT prod_name,prod_name,prod_prices
FROM vendor INNER JOIN products
ON products.vendor_id = vendor.id;
- 自联结(使用表别名)
- 外部联结(包含没有关联行的行f)
left outer join on
right outer join on
组合查询
UNION:必须有>=2 的查询语句,每个查询必须包含相同的列,表达式或者聚集函数,列出现的顺序可以不同,union包含自动去重,可以使用union all返回所有匹配行。
insert select
实际上mysql不关心select返回的列名,它使用列的位置进行匹配。
insert into customers(
cust_email,
cust_name,
cust_address,
cust_state,
cust_zip)
select
cust_email,
cust_name,
cust_address,
cust_state,
cust_zip
from custnew;