一、 数据库 vs SQL
1.数据库
数据库指储存数据的仓库,数据以二维表格形式存储,每一行代表一条记录,每一列代表一个字段/属性。
2.数据库分类
数据库分为关系型数据库和非关系型数据库。
关系型数据库的理论基础是关系代数与集合论,数据以二维表格形式存储,数据库语言是SQL,常用的关系型数据库有:Oracle、MySql、db2、sqlite、sql server等;
非关系型数据库语言是nosql
3.SQL(Structured Query Language)
sql指结构化查询语言,是用来操作数据库的语言,不区分大小写
二、mysql数据类型
1.数值型(tinyint,smallint,mediumint,int,largeint,float,double,decimal);
2.字符型(char,varchar,text);
3.日期时间型(data,time,datatime,timestamp)
常用数据类型:int、float、decimal、varchar、datatime)
三、完整性约束条件
1.主键约束(primary key):主键字段能够唯一标识一条数据记录;
2.外键约束(foreign key):若一个数据表的字段指向另一个表的主键字段,则称该字段为此表(子表)的外键,被指向的表称为父表;
3.非空约束(not null):字段值不允许为空;
4.唯一值约束(unique):字段值不能重复;
5.默认值约束(default):对某字段指定取值,在建表时若不指定字段值则使用默认值;
6.自增长约束(auto_increment):字段值默认从0增加
外键注意点:外键的取值范围限定在其指向的父表的主键字段取值;外键可以为空;在父表中删除记录时,若主键字段的字段值被子表引用,则不能删除。
自增长约束可以设置从任意值开始:alter table 表名 auto_increment = 任意值;
四、数据库操作
1.创建数据库
create database [if not exists] 数据库名;
2.使用数据库
use 数据库名;
3.显示已创建的数据库
show databases;
4.删除数据库
drop database [if exists] 数据库名;
五、数据表操作
1.新增数据表
1.1普通建表
create table [if not exists] 表名(
字段名 字段类型 [完整性约束条件],
字段名 字段类型 [完整性约束条件],
...
);
1.2 利用as创建表结构
create table table_name as select语句;
1.3利用like建表
create table table_name1 like table_name2;
2.修改表结构
alter table 表名 ...;
2.1增加字段
alter table 表名 add 字段名 字段类型;
2.2删除字段
alter table 表名 drop 字段名;
2.3修改字段名
alter table 表名 change 旧字段名 新字段名 旧数据类型;
2.4修改字段名及数据类型
alter table 表名 change 旧字段名 新字段名 新数据类型;
2.5修改字段数据类型
alter table 表名 modify 旧字段名 新数据类型;
2.6增加主键约束
alter table 表名 add primary key(字段名[,字段名]...);
2.7增加外键约束
alter table 表名 add foreign key(字段名[,字段名]...) references to 父表(字段名);
2.8修改表名
alter table 表名 rename to 新的表名;
3.查看表结构
desc表名 ...;
查看创建表的sql:show create table 表名;
4.删除表
drop table [if exists] 表名;
六、数据记录操作
数据记录操作是指对数据记录进行增删改查。
1.新增数据
insert into(字段名[,字段名]...) 表名 values( [,]..)
2.删除数据
delete from 表名 where ...;
3.修改数据
update 表名 set 字段1 = 值1,字段2 = 值 2...where ...;
4.查看数据
select 字段 from 表名 where ... group by 字段 having ... order by ...[asc/desc] limit m,n;
七、单表查询
sql书写顺序:select ... from ... where ... group by ... having ... order by ... limit;
sql执行顺序:from ... where ... group by ... having ... select ... order by ... limit;
【注】当使用group by子句时,select子句中除了聚合函数和group by后的字段,不要出现其它字段名
八、多表查询
查询类型:
1.内连接
1)自联结
需要利用同一张表的同一个字段值时
2)等值连接
连接条件是=
3)不等值连接
2.外连接
1)左外连接 left join...on...
2)右外连接right join...on...
3)全外连接full outer join...on...,在mysql中可通过Union将左右连接合并
3.交叉连接cross join
又称笛卡尔积,笛卡尔积指的是在进行多表连接查询时不指定连接条件或者连接条件无效,最后返回数据记录数是多表数据记录数的乘积
4.union与union all连接
union默认去重
5.子查询
嵌套在其它查询语句中的查询,子查询的查询结果作为外部查询的条件
九、事务
1.事务的特性(ACID)
1)原子性:指sql任务要么全部执行。要么全部不执行,不存在任务中间停止的状态,若执行过程中发生错误,将通过事务回滚回到事务开始前的状态;
2)一致性:指事务发生前后数据库的完整性没有被破坏,使数据库从一个一致性状态转为另一个一致性状态;
3)隔离性:允许多个事务并行发生,隔离性可以防止多个事务同时发生时导致的数据不一致问题;
4)持久性:指事务一旦发生,对数据的修改就是永久的
2.事务的隔离级别
十、索引
索引可以提高sql语句查询效率,但当需要多次对表进行update和insert 操作时,不建议建立索引
1.建立普通索引
create index index_name on table_name(字段);
2.建立唯一索引
create unique index index_name on table_name(字段);
3.删除索引
drop index index_name on table_name;
十一、视图
视图是一张虚拟的表,将sql语句“封装”起来,便于后续的查询
1.创建视图
create view view_name as sql语句;
2.使用视图
select 字段1... from view_name where...;
3.查看视图
通过查看当前数据库下的数据表可以查看视图
show tables;
4.删除视图
drop view view_name;
十二、MySql数据的导入与导出
1.导入
方法1:load data local infile '文件路径' into table table_name;
方法2:source '文件路径'
source命令导入数据库需要首先进入数据库终端,文件路径中不要有中文,source命令不需要用分号结束
2.导出
sql语句 into outfile '文件路径';
网友评论