一、基本操作
创建数据库:createdatabasedatabas_name;
创建表:createtabletable_name(var_name1var_type,var_name2var_type,...);
查看表格式:desctable_name;
删除表:droptabletable_name;
查看数据:select*fromtable_name;
添加数据:intotable_name(column_name1,column_name2,...)
value('value1','value2',...);
选择数据:selectcolumns_namefromtable_name
whereconditions;
更改数据:updatetable_name
setcolumn_name1=value1,column_name2=value2(可以用表达式,如x=x+1)
whereconditions;
删除数据:fromtable_name
whereconditions;
增加列:altertabletable_name(也可用于修改其它的表的特性)
addcolumncolumn_namevar_type(first/last/after/beforecolumn_name2(指定列位置));
改变列数据类型:altertabletable_name
changecolumncolumn_name_oldcolumn_name_newvar_type_new,
modifycolumncolumn_namevar_type_new
排序:orderbycolumn_name(desc)
改特征值分组:groupbycolumn_name
复制表:createtablenew_table_nameas
select*fromold_table_name
二、细节设置和高级命令
限定不允许Null:列数据类型加上notnull
限定赋值范围:列数据类型加上check
列取默认值:列数据类型加上defaultvalue
主键设定:主键特征类型设定为notnull,可以加auto_increment实现自动递增
声明主键:primarykey(column_name)
限制查询数量:limitnumber/number1,number2
声明外键:constraintconstraint_name
foreignkey(column_name)
referenceforeign_column_name(column_name)
联接,给出两列所有的组合可能:
selectname1.column_name1,name2.column_name2
fromtable_name1asname1
crossjoin
table_name2asname2(as可以不写)
自然联接,要求联接的表中名称相同的列要有相同的值,才会选择:naturaljoin
外联接,给出不仅给出满足条件的项,还会列出其中一个表中不满足条件的项,而另一个表对应的数据为Null
子查询,即中间暂存变量,以括号内给出的select语句作为外层查询的输入。据称所有使用子查询的地方都可以用联接来实现
合并,将多次选择得到的结果合并起来:union
视图,即将查询做成函数,方便调用:
createviewview_nameas
selectcolumn_namesfromtable_namewhereconditions
事务,要求一组数据操作要都一起完成,否则则都不进行,防止同时多方对表进行操作
starttransaction;%事务开始
……
rollback;%放弃上面的操作,回到操作前的状态
commit;%完成事务
三、选择时的条件表达
正则表达式:likeexpr
范围选取:in(value_name1,value_name2,...)
betweenvalue1andvalue2
四、表格设计原则
第一范式:1)数据要具有原子性,即每个特征只有一个值,且特征之间不能是同类,比如不应该设置特征为兴趣1,兴趣2,兴趣3...
2)每一行,既每个事例必须要有一个唯一的识别项,即主键
多表:利用多张表来使数据表符合第一范式,用专属表来专门处理具有多个值的特征,以外键将表关联起来
第二范式:1)符合第一范式
2)不存在部分函数依赖,即非主键特征依赖于组合主键的一部分而非全部,只要使用人工主键(与数据无关的id)作为主键即可
第三范式:1)符合第二范式
2)不存在传递函数依赖,即非主键特征之间不存在依赖
[SQL基础学习笔记]