数据库笔记

##(一)九条命令##

>>>数据定义:create,drop,alter(增删改)--对表,库还有列操作
>>>数据操纵:select,insert,update,delete(查插改删)--对数据进行操作
>>>数据控制:grant,revoke,Deny(授权,收权,拒绝访问)
>>>**SQL server中查询表库,用SP_HELPDB(SP_HELP),MY SQL查询表库用show tables(show daterbases)**



##(二)数据类型## >>###1、整数### >>>>(1)tinyint(128)加unsigned(无符号)时字节长度为256


>>>>(2)smallintt


>>>>(3)mediumin


>>>>(4)int


>>>>(5)bigint


>>###2、浮点数### >>>>(1)普通小数:


>>>>>float占用4字节存储空间,可称为“单精度浮点数”,约7位有效数字


>>>>>double占用8字节存储空间,可称为“双精度浮点数”,约17位有效数字


> >>>>(2)定点小数:decimal(M,D)其中M表示该小数的总的有效位数(最大65),D表示该小数的小数点后的位数;


>>###3、日期数据类型### >>>>(1)date:格式为'0000-00-00'


>>>>(2)time:格式为'00:00:00'


>>>>(3)datetime:格式为'0000-00-00 00:00:00'


>>>>(4)timestamp在数据库里自动更新时间


>>>>(5)year表示年份,格式为'0000'


>>>>**注意:时间类型想要的字面值要用单引号引起来**


>>>>**注意:用timestamp在我的数据库里不能使用**


>>###4、字符串### >>>(1)普通文本: >>>>固定长度char:实际存储长度是定义的长度


>>>>可变长度varchar:可变长度实际存储长度是内容长度,内容长度当最大不得超过定义的长度


(2)长文本:

tinytext(tinyblob)

text(blob)

longtext(longblob)

(3)enum和set类型:

enum:设置该属性只能从enum中得到一个值,或者为NOT NULL

set:设置该属性可以从SET里面选多个值,或者为NOT NULL

enum和set这些选项值都对应了相应的“索引值”,enum以1开始,依次多一,set以一开始每次都增长乘2
注意1:text是用来记录纯文件,blob是可以用来记录文本,图片,声音等等



## (三)高级查询 ## >>###1.select### >>>>>(1)distinct消除重复行 >>###2.from### >>###3.where### >>>>(1)like模糊查询,%多个字符,_一个字符,没有%或者_like相当于=


>>>>(2)is between in


>>>>>**注意判断一个字段中的是“是否存在”(即有没有)只能用is** >>###4.group by having### >>>>(1)max(最大值),min(最小值),count(计数),sum(总和),avg(平均值) >>###5.order by### >>>>(1) 正序asc, 倒序desc,如果省略不写,就是asc >>###limit### >>>>应用:limit子句常常用于网页的“翻页功能”。


>>>>limt n-1,m;n为第几行,m为显示几行

运行顺序:
select 子句
[from 子句]
[where 子句]
[group by子句]
[having子句]
[order by子句]
[limit 子句]



## (四)列属性 >>1、NULL,NOT NULL:设置列元素是否能为空值


>>2、default:用于设定列默认值不给值或给空值null并not null,就会自动使用该值)。使用形式:default 默认值 。


>>3、primary key:设置列元素为主键,主键内元素不能为空,不能重复,一个表中只能有一个主键


>>4、unique key:设置列元素为唯一键,主键内元素不能为空,不能重复,一个表里可以有多个主键


>>5、auto_increment


>>6、comment用于设定字段的说明性内容,类似注释,但又不是注释(属于有效的代码)。使用形式: comment '要写的文字';


>>**注意:要设置多个主键时必须要用到主键联合primary key(列,列,..),唯一健与可以联合** ##(五)其它高级## >>(1)高级插入 >>>>1、同时插入多行:


>insert into 表名(字段1,字段2, ...) values (值1,值2,... ), (值 ,值,... ), ......; >>>>insert into 表名(字段1,字段2,...) select (xx1, xx2, ... ) ... ;


>>>>2、插入查询的结果数据:


insert into a(列1,列2,列3...)select 列1,列2,列3...。


**注意:a中的列要和select中的列个数和类型相等**


>>>>3、set语法插入数据:


语句形式: insert into 表名 set 字段1=值1, 字段2=值2,.... ; >>>>4、蠕虫复制:就是将一个表的大量数据,复制到另一个表中;

(2)高级删除

1、按指定顺序删除

delete from 表名 where … [order by 字段名, …] [limit 数量n];

2、truncate清空

表示清空指定表中的所有数据并将表恢复到“初始状态”(就类似刚刚创建一样)。

(3)高级更新

update 表名 set 字段名1=字段值1, … where … [order by 字段名, …] [limit 数量n];

(4)主键冲突

1、忽略:insert ignore into 表名 values (值…);

2、替换:replace into 表名 values (值…)

3、更新:insert into 表名(字段)value(值…) on duplicate key update XX字段=新的值

错误显示

(1)Incorrect table definition; there can be only one auto column and it must be defined as a key

意思为:定义自增长必须是主键

(2)duplicate column name

意思为:重复列名称

##查看数据库的储存地址##
在命令语句中写入
show global variables like “%datadir%”;