数据库相关知识

一 .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)持久性:事务结束后,事务处理的结果必须得到固化

你可能感兴趣的:(数据库相关知识)