插入
insert [into] t1(id, name) values/value(1, 'alex');
说明
[into]
可以省略;
values
or value
方式一
insert t1(id, name) values(1, 'egon'); # 一次插入一行记录
insert t1(id, name) values(2, 'egon'), (3, 'peiqi'); # 一次插入多行记录
方式二
insert t1(id, name) values(2, ''); # 插入''
insert t2() values(); # t2() ==> t2(id, name), values(), 为每个字段插入Null(如果允许的话)
insert t2 values(1, 'abc'), (2, 'abc'); # 如果为每个字段插入值, 可以直接写t2, t2 ==> t2() ==> t2(id, name)
方式三
insert t11 select * from t12;
insert t11(name, age) select name, age from t12;
insert student select * from student where student.id > 1; # 这种插入可以接条件
方式四
insert t11 set a=b'11'; # 通过set插入值
insert t11 set b=b'1000', c=b'111';
# =====================================================================
# 注意: 如果在insert的过程中, 未正确插入(是values部分, 也就是插入的值不符合定义),
# 并且表设置了auto_increment, 则auto_increment的值, 已经发生了变化.
# 例如: 当前的auto_increment值为3, name字段定义为char(1),
# 现在执行错误语法的insert语句, insert into tb5(name) values(‘a’), (‘bb’), (‘c’);
# (当然, 如果是values(‘bb’), (‘a’), (‘c’), 则auto_increment不会发生变化.)
# 执行完后, 未正确插入, 此时下一个插入的值的auto_increment的值为6
# ===========================================================================
删除
delete from t1; # 不接where子句, 默认删除全部记录
delete from t1 where id < 1;
# 这种方式清空后,再插入记录,如果有auto_increment的话,就会从删除前的位置继续增长
# 也就是, SQL DELETE 语句会保持表中的结构、属性、索引、自增计数不变
# 最佳实战:
# 使用 SQL DELETE 语句一定要附加 WHERE 子句,如果删除所有记录,也要用 WHERE 1=1;
# 注意:在删除记录时要格外小心!因为删除的数据没法恢复,没有后退机制!!!!!!!!!!!!!!!!!!!!!!!
truncate table t2; # 这种方式清空后,从头再来
truncate t2; # (如果表中有外键等约束,是无法清空的),table可以省略
# 如果要删除表的所有行的话,推荐使用truncate,效率高,因为不用保存表的状态
更新
单张表
# =============
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
# =============
多张表
# =============
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
# =============
update t1 set name='egon'; # 修改表中的所有记录的name字段
update t1 set name='alex', tel='123456'; # 可以一次修改多个字段
update t1 set name='hardy' where id=1997 and sex='M'; # 通过where指定条件, 修改特定的记录
update t1 set name='eva-j' where id > 1 order by -id limit 2; # 还可以指定order by 以及 limit
查询
select ... from ...
select ... into ...
select * from t1;
select id, name, age from t2;
select id, name, age, gender as g from t2 where id > 1; # as指定别名
select id, name, age, gender g from t2 where id > 1; # 也可省略as
# 实际工作中不要用 * ,效率不高。要哪些就写哪些。
select UPPER('egon') into @res;
SELECT @res;