数据库笔记
##(一)九条命令##
>>>数据定义: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%”;