概述
结构化:即有一定格式(format)关系型db处理不了非结构化;
数据库字符集和表的字符集可以不一样,但应该一样;
SQL语句
show databases/tables; | 查看所有数据库/某数据库中所有表 |
DDL: database定义语句,如建库、建表 | |
create/drop database 数据库名; | 创建/删除数据库 |
DROP DATABASE if exists 数据库名; | 删数据库A若数据库A存在 |
use 数据库名; | 切换到该数据库 |
数据字典:记录管理信息,是元数据 | |
desc 表名; | 查询表信息 |
show full fields from 表名; | 查询表详细信息 |
create table 表名
( KEY friend_fk_userid (字段名), CONSTRAINT friend_fk_userid FOREIGN KEY (字段名) REFERENCES 父表名(父表主键字段名) ) ENGINE=INNODB 或 engine=myisam default charset=utf8; |
建表方式1,存储引擎可不写 |
create table 表名 |
建表方式2,单个主键或联合主键,唯一键 |
create table 新表名 like 旧表名; | 根据旧表创建新表 |
create table 新表名 select * from 旧表名; | 创建新表,复制旧表结构及数据都弄过去,但约束都没了 |
drop table 表名; | 删除表 |
ALTER TABLE 旧表名 RENAME TO 新表名; | 重命名表 |
sp_renamedb '旧数据库名','新数据库名'; | 重命名数据库 |
DML:database操纵语句,如增删改查 | |
也支持一次insert两行; | |
当insert新元组到表中但没有给该列明确赋值时,如果定义了列的默认值,将自动得到默认值;如果没有,则为null | |
insert into 表名 (字段名1,字段名2) values(A,'哈哈'); | 字段1值为A,字段2值为哈哈 |
insert into users values('bolt','230107198608211213',default); | 新增一行,name为bolt,ID为230107198608211213,其它字段默认 |
insert into users values('bolt','230107198608211213'); | 新增一行,name为bolt,ID为230107198608211213,其它字段默认 |
delete from 表名; | 删除表中所有数据 |
delete from student where a=b; | 删除表中符合筛选条件的数据 |
update 表名 set grade=2015 where name='小明'; | 更新数据 |
update 表名 set 字段名=default; | 更新数据 |
select default(字段名) from 表名; | |
DQL:数据库查询语句 | |
select 字段名 字段名别名 from 表名; | 为字段起别名以显示 |
select * from 表名 where a [not] in ('值1','值2','值4','值6'); | in的用法 |
select * from 表名 where time between time1 and time2; | between以限制查询数据范围时包括了边界值;not between不包括 |
select * from 日程安排 where datediff('minute',f开始时间,getdate())>5; | 日程安排提前五分钟提醒 |
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b; | 显示文章、提交人和最后回复时间 |
select * from 表名 limit 该表行索引,要查的记录数; | 查询指定元组,常用于分页查询 |
select * from 表名 where 字段1>数值 or 字段2='varchar类型用''' or 字段2='varchar类型用'''; | |
select table_name from information_schema.tables where table_name='scusers'; | |
alter table 表名 add column 新字段名 新字段类型 default null auto_increment primary key first; | 在第一列添加字段 |
alter table 表名 add column 新字段名 新字段类型 not null after 字段名(添加在该字段之后); | 添加字段(一列) |
alter table 表名 drop column 字段名,drop column 字段名; | 删除字段(一列) |
alter table 表名 MODIFY 字段名 字段新类型 对该字段的新增修饰或约束; | 修改一个字段的类型或长度,新增约束或修饰 |
alter table 表名 change 旧字段名 新字段名 新字段类型; | 修改一个字段的名称和类型,(修改一个字段的名称时一定要重新指定该字段的类型) |
alter table 表名 alter column 字段名 set default 默认值; | 修改一个字段的默认值(若该字段本身存在默认值,先删除之) |
alter table 表名 alter column 字段名 drop default; | 删除一个字段的默认值 |
alter table 表名 add constraint 表名_主键列名_pk primary key(列名1,列名2); | 建表之后对已有字段添加主键 |
alter table 表名 drop primary key/constraint 表名_主键列名_pk; | 取消(删除)主键,如果该主键有auto_increment,先删除之 |
Alter table 子表名 add foreign key(外键字段名) references 父表名(主键字段名); | 对已有字段添加外键约束(如报错子表清空即可) |
alter table 表名 drop foreign key 外键名; | 解除外键约束(要知道外键名) |
alter table 表名 change 字段名 字段名 int; | 删除该字段的auto_increment约束 / 删除该字段的zerofill约束 / 删除该字段的默认约束 / 删除该字段的无符号约束 |
alter table 表名 change 字段名 字段名 字段类型; | 删除该字段的not null约束 |
alter table 表名 drop INDEX 字段名; | 删除该字段的唯一键约束 |
一般自增必为主键且数字类型,若非主键加自增,要同时加唯一键或外键约束 | |
alter table users MODIFY cardID int(16) zerofill; | |
alter table 表名 auto_increment=1; | 重置auto_increment的值 |
alter table users auto_increment=1000000000000000; | |
高级查询 | |
select a,b,c from 表名1 where a in(select d from 表名2); | 子查询 |
CREATE VIEW v_empdept |
创建视图,修改原表数据,则视图也变,视图是虚的,修改视图则原表也变,在视图上最好只select,为了不让用户看见某一列,对select结果创建视图,为了简化查询 |
create view v_empsal(dname,minsal,maxsal,avgsal) |
|
drop view 视图名; |
删除视图 |
select * from (select a,b,c from 表名) T where t.a>1; |
在线视图查询 |
from、join作用一样;on、where作用一样;on是连接条件,where是筛选条件 |
|
left join | 左连接,结果集既包括连接表的匹配行,也包括左连接表的所有行 |
right join | 右连接,结果集既包括连接表的匹配连接行,也包括右连接表的所有行 |
full/cross [outer] join | 全外连接,不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录 |
select a.a,a.b,a.c,b.c,b.d,b.f from a left out join b on a.a=b.c; | 外连接查询 |
DCL:数据库控制语句,如授权 | |
create user 新用户id identified by 新用户密码; | 新建用户 |
drop user 用户id; | 删除用户 |
grant 权限名 to 用户id; | 授权 |
revoke 权限名 from 用户id; | 撤销权限 |
其它 | |
source D:/insert.sql; | 导入数据到数据库 |
show variables like 'character%'; | 查看MySQL默认编码格式 |
show variables like '%max_connections%'; | 查看MySQL允许的最大连接数 |
net start mysql | 启动MySQL服务 |
net stop mysql | 关闭MySQL服务 |
set names 'gbk'; | 从不使用,嘿嘿 |
show engines; | 查询所有支持的存储引擎 |
字段的修饰
null:表示字段可以为空;not null:表示字段不能为空;default null:字段默认为空;default 默认值:字段默认值
unsigned:该字段无符号位,一般作用于int类型的字段
auto_increment:字段值自动增长
字段的约束
primary key:主键约束,元组唯一性,有序性,该字段不能空并且不能重复,每个表最多只允许一个主键,可定义联合主键
联合主键:这些列的组合不能重复并且这些列都不能为空
unique key:唯一键约束,不可重复独立性,则该字段的值不能出现重复值,而且唯一键的列,允许有空值,主键不允许出现空值,允许出现多个唯一键;写法:unique
foreign key:外键约束
外键中的级联关系有以下几种情况:
ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除:同步删除
ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新:同步更新
ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空:删除置空
默认删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除:删除前检测从表
具有外键约束的列的值不能随便给,必须满足外键所引用的主键的取值
一张表中可以定义多个外键
说明:
外键列默认可以给null值;按照定义,外键必须引用一个主键或者唯一键,引用的主键一般在另外一张表中,也可以是本表的主键(自引用);外键所在的表叫做子表、从表;外键所引用的主键所在的表叫做父表、主表;
父子表是相对而言的,表A可为表B的子表,但同时也可以是表C的父表;
Comment '注释内容':字段注释,字段的描述说明
ZEROFILL:零填充,会将有效位以外的位用0来显示,比如某字段数据类型为INT(5),插入值为2,将显示00002
字段的修饰和约束的几点注意
1.not null约束只能在字段级别定义,作用在多个字段上的约束只能定义在表级别,例如复合主键约束;
2.字段级别上不能定义外键约束,并且不能给约束起名字,由MySQL自动命名(not null除外);
3.表级别上定义的约束可以给约束起名字(CHECK约束除外)
关键字+运算符
Group by
1.一张表,一旦分组完成后,查询后只能得到组相关的信息;
2.组相关的信息:如统计信息,count,avg,sum,max,min等这些都可作为分组的标准;
3.在SQLServer中分组时,不能以text,ntext,image类型的字段作为分组依据;
4.在select统计函数中的字段,不能和普通的字段放在一起;
WHERE条件查询
1.比较:= > < >= <=
2.确定范围:between...and... / not between...and...
3.确定集合:IN/NOT IN
4.字符匹配:LIKE/NOT LIKE
5.空值:IS NULL/IS NOT NULL
6.多重条件:AND/OR
LIKE匹配
_下划线:匹配任意一个字符
%百分号:匹配0个或多个字符
[]:匹配[]中的任意一个字符。如[acgd]表示匹配a c g d中的任何一个,对于连续的,可写成[a-d]
[^]:不匹配[]中的任何一个字符。写成[^acgd]
高级查询运算词(使用运算词的几个查询结果行必须是一致的)
UNION运算符:
通过组合其它两个结果表(例如 table1 和 table2)并消去表中任何重复行而派生出一个结果表,当 ALL 随 UNION 一起使用时(即UNION ALL),不消除重复行,两种情况下,派生表的每一行不是来自table1就是来自table2。
EXCEPT运算符:
通过包括所有在 table1 中但不在 table2 中的行并消除所有重复行而派生出一个结果表,当 ALL 随 EXCEPT 一起使用时(EXCEPT ALL),不消除重复行。
INTERSECT运算符:
通过只包括 table1 和 table2 中都有的行并消除所有重复行而派生出一个结果表,当 ALL 随 INTERSECT 一起使用时(INTERSECT ALL),不消除重复行。
事务
几条SQL语句组成一个事务,事务有原子性,这几条SQL语句要么全部成功,要么全部失败;自动提交事务时,可以用begin开启一个新事务;
事务在service层定义,一个service层的方法通常是执行了几个dao层函数,即执行了几条sql;
事务:2件事要么全成功,要么全失败;