1. 插入数据
user表中有四个字段分别是id,name,sex,age,其中id为主键自增。
向表中插入一条完整的记录 insert into user values(null,'张三',’男‘,'18');
插入字段的第一个值为表的主键,给该字段赋值为null或空,mysql会自动为其赋相应的值。
向表中插入一条不完整的记录 insert into table (name,age) values('李四','20');
在insert后面可以添加low_priority或delayed关键字。low_priority关键字意味着当数据不是从表格读出时,系统必须等待并且稍后再插入。delayed关键字意味着插入的数据将被缓存。如果服务器繁忙,我们可以继续运行其他查询,而不是等待这个insert操作的完成。
上述两个关键字以后可以指定ignore(可选的)。这意味着如果尝试插入任何可能导致重复唯一键的记录行,这些记录将被自动忽略。
2. 查询数据
select语句的基本格式
select [options] items
[into file_details]
from tables
[where conditions]
[group by group_type]
[having where_definition]
[order by order_type]
[limit limit_criteria]
[procedure proc_name(arguments)]
[lock_options]
;
2.1 满足特定条件的查询
select * from user where id = 3;
where字句中最长用到的条件
基本比较操作符:= , > , < , >= , <= , !=或<> ,
描述条件:
is not null 不为空
is null 空
between 例:between 6 and 10 ; 在某一区间
in 测试一个值是否在某个集合里
not in 测试一个值是否不在某个集合里
or 满足几个条件中的任何一个即可
and 必须同时满足每个条件
模式匹配
like 例:name like (’李%‘) 用简单的mysql模式匹配检查一个值是否匹配另一个模式
not like 同上相反
regexp 常规表达式 检查一个值是否匹配一个常规表达式
2.2 从多个表中获取数据
1. 双表连接
select order.orderid,order.amount,order.date
from customers , orders
where customers.name = "李四" and customers.customerid = order.customerid;
解释:在orders表中查找李四这个人的购买记录的orderid,amount,date,但是order这个表中没有姓名,不能直接按姓名查找,order表中的customerid字段与customers中的customerid字段相同,customers表中包含购买者的姓名。
2. 关联多个表
3. 左连接--查找不匹配的记录,或者不满足查询条件的记录,或者是除了匹配到的记录外剩下的记录
3. 表的别名--在查询的开始给表起另外一个名字,似的后面查询更加方便,使用关键字as
select c1.name
from customers as c1,order as c2
where c1.id = c2.id;
4.mysql中关联类型
笛卡尔乘积 所有要查询的表的所有行的所有关联。
完全关联,交叉关联 同上
内部关联 如果没有where条件,等价于完全关联,通常需要一个where条件使它成为内部关联。
等价关联 在where中使用一个’=‘号的表达式条件。
左关联 查找不匹配的记录,或者不满足查询条件的记录,或者是除了匹配到的记录外剩下的记录
5. 特定条件查询数据
1.特定顺序
select name address from user order by name(asc);查询结果以名字的顺序升序(默认)排列
select name address from user order by name desc;查询结果以名字的顺序降序排列
2. 分组与合计数据
mysql中的合计函数
avg(列) 指定列的平均值
count(项目) 如果指定一列,这将给出本列中非空(null)值的列数,如果在列的前加distinct单词,将得到本列中不同值的列数,如果指定count(*),将得到包含空值的行在内的行数
min(列) 指定列的最小值
max(列) 指定列的最大值
std(列) 指定列的标准背离值
sun(列) 指定列的所有值的和
例:select max(amount) from orders;
select customerid , avg(mount) from orders group by customerid;
3. 选择要返回的记录行
select name from customer limit 2,3;
其中3代表要返回3行,2代表从第二行开始,行号是以0开始索引的。
4. 使用子查询
select id , amount
from orders
where amount = (select max(amount) from orders);
子查询的效率较低,且多数查询可以在没有子查询的条件下完成。
3. 更新数据
格式
update [low_priority] [ignore] tablename
set colum1=value1,colum2=value2*2(这里可以是表达式)
[where conditions] -- 限制条件
[order by colum] -- 通常使用limit时使用
[limit number] -- 限制受影响的行数
例:update customers set price = '$250' where customerid = 4;
4. 修改表的结构
格式 alter table [ignore] tablename alteration [,altertion...]
alter table 可以完成的修改
5. 删除数据库中的记录
格式
delete [low_priority] [quick] [ignore] from table_name
[where condition]
[order by]
[limit number]
例:delete from customers where id=5;
6. 删除表
drop table tablename;
7. 删除数据库
drop database db_name;