一 .sql语句(mysql为例)
1、创建表
(1)创建新表 create tabel tablername{}
(2)根据已有的表创建
方法一: create table sale_copy like sale_maintain -- sale_copy新表 -- sale_maintain 旧表只是创建表结构
方法二: create table sale_copy as select id,month,service_number,organization_name,province from sale_maintain
-- sale_copy新表 -- sale_maintain 旧表根据旧表创建指定字段新表表结构+数据
(3)查看表结构
方法一: desc tableName;
方法二: DESCRIBE tableName;
方法三: SHOW COLUMNS FROM tableName
(4)查看建表语句:SHOW CREATE TABLE table_name
(5)查看索引:show index from table
2、删除
drop table tabelName -- 删除表结构 释放表结构所占的空间
truncate tabelName -- 清空表无法恢复
delete -- 每次删除一行 将改操作作为事务记录在日志中,可以进行回滚
3、Alter
(1)修改表名
ALTER TABLE old_table_name RENAME TO new_table_name
eg :alter TABLE sale_copy RENAME to copyy
(2)增加列
Alter table tabname add column col type
eg:alter table sale_copy add model VARCHAR(64)
(3) 修改字段名和类型
ALTER TABLE table_name MODIFY 字段名称 字段数据类型
eg: alter table sale_copy MODIFY model int(11) --修改字段类型
ALTER TABLE table_name CHANGE 旧字段名称 新字段名称 新字段数据类型
eg:alter table sale_copy change model devicename VARCHAR(64) --修改字段名称和类型
(4) 删除
ALTER TABLE table_name DROP col
eg: alter table sale_copy drop model --如果表中只剩下一个字段无法删除
(5) 修改和删除字段的默认值
ALTER TABLE table_name ALTER 字段名称 SET DEFAULT 数值
eg : ALTER TABLE sale_copy ALTER model SET DEFAULT 'tk' --修改默认值
ALTER TABLE table_name ALTER 字段名称 DROP DEFAULT
eg: ALTER TABLE sale_copy ALTER model DROP DEFAULT --删除默认值
(6) 添加主键
步骤一: ALTER TABLE table_name ADD PRIMARY KEY( id )
步骤二: ALTER TABLE table_name MODIFY id int(10) NOT NULL AUTO_INCREMENT
(7) 删除主键
步骤一: ALTER TABLE table_name CHANGE id id int(10) --先删除自增长
步骤二: ALTER TABLE table_name DROP PRIMARY KEY --再删除主键
(8)添加索引
ALTER TABLE table_name ADD UNIQUE (字段名称 ) --唯一索引
ALTER TABLE test ADD INDEX索引名称 ( 字段名称 ) --普通索引
ALTER TABLE table_name ADD FULLTEXT (字段名称 ) --全文索引
4、查询
4.1操作符
(1)比较运算符:=, <=, BETWEEN AND , IN, LIKE, 和 IS NULL
(2)逻辑运算符: AND, OR和 NOT
4.2高级查询运算词
(1)union合并两个或多个select的结果集 消取重复的结果集 如果不需要消取重复的使用union all
(2)Except结果包含table1不包含table2 (mysql不支持) except all 同理union all
(3)INTERSECT结果包含table1和table2中都包含的结果集 (mysql不支持) intersect all 同理 union all
4.3外连接
(1)left join左外链接,结果集包含左表的所有行即使在右表中没有匹配的行
(2)right join右外连接,结果集包含右表的所有行即使在左表中没有匹配的行
(3)full join全连接 结果集包含两个表中的所有行
4.4 Group by
将查询结果按照1个或多个字段进行分组
(1)常用的聚合函数:count()计数 sum() 求和 avg()求平均数 max() 最大数 min()最小数
(2)配合聚合函数来使用
(3)group by+group_concat(name) :表示分组之后,根据分组之后的结果,使用group_concat() 来放置某字段值的集合
(4)group by用在where之后 order by之前,having用在group by之后(where先执行,再分组,分组完成再having)
(5)除聚合函数外,select语句中的每个字段都必须在group by中给出
(6)Select语句执行顺序 from -- where -- group by -- having -- order by -- limit
4.5子查询
(1)where型子查询:把内层查询的结果作为外层查询的比较条件
(2)From型子查询:把内存的查询结果当成临时表,供外层查询再次使用
注意: 内层查询的字段必须包含外层查询的字段
(3)Exists型子查询:把外层sql的结果拿到内层去测试,如果内层的sql成立,则取出该行
(4)Any in all子查询
Any:ANY关键词的意思是“对于在子查询返回的列中的任一数值,如果比较结果为TRUE的话,则返回TRUE”
In in的效果跟=any效果一样
All:对于子查询返回的列中的所有值,如果比较结果为TRUE,则返回TRUE
二 sql优化
(1)尽量避免全表查询:考虑在where及order by涉及的列上添加索引
(2)尽量避免在where字句中的字段进行null判断,会导致放弃索引而进行全表查询
(3)尽量避免在where字句中使用 != 或<>操作符,or来链接条件,in 或者not in,对字段进行表达式操作,对字段进行函数操作,会导致放弃索引而进行全表查询
(4)select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的
(5)索引不是越多越好,提高select效率,但是insert和update有时可能会重建索引
(6)尽可能的使用varchar/nvarchar代替 char/nchar
(7)任何地方都不要使用select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段
。。。。。还有很多这些只是我们用的多的
三 事务
事务是一个操作序列,这些操作要么都执行,要么都不执行
主要是为了解决并发情况下保持数据一致性问题
四个基本特征:
(1)原子性:事务中包含的操作被看做是一个逻辑单元,这个逻辑单元的操作要么都成功,要么都不成功
(2)一致性:只有合法的数据可以被写入到数据库,否则事务应该回滚到最初状态
(3)隔离性:多个用户对同一数据进行并发访问,而不破坏数据的完整性和正确性
(4)持久性:事务结束后,事务处理的结果必须得到固化