以树形结构表示实体和实体之间联系的数据模型
简单,但结构不灵活,不能表达复杂模型
能表达复杂关系,但结构复杂,使用不易不利于数据库的维护和重建
表达方式直观简洁,插入、删除、修改数据操作方便,时目前普遍使用的数据库模型
create table student(
-> id int comment'学生学号',(不写长度的话,默认为11)
-> name varchar(255) comment'学生姓名',(必须写255,因为这里动态的)
-> sex char(4) comment'学生性别',(一个汉字表示两个字节)
-> score double(6,2) comment'学生成绩'(2表示小数点位数,6包括小数点位数,这里后面不用加,)
-> );(最后有一个分号)
格式:字段名 字段类型 字段说明注释(注释用comment)
create table student(
-> id int comment'学生学号',(不写长度的话,默认为11)
-> name varchar(255) comment'学生姓名',(必须写255,因为这里动态的)
-> sex char(4) comment'学生性别',(一个汉字表示两个字节)
-> score double(6,2) comment'学生成绩'(2表示小数点位数,6包括小数点位数,这里后面不用加,)
-> )charset=usf8;创建数据表内的数据类型是utf-8的类型,注意这里charset=usf8,中间有个“=”
(6)查看数据表里的内容:desc 数据表名;->查看表结构
(7)show tables;展示数据库里的所有数据表(数据表有多少个)
(8)删除表:drop table 数据表明;
(9)select * from 数据表名称;查看数据表里的内容
16.退出登录:exit;或者quit;(一般用exit;)
17.SQL是用于关系数据库管理和数据操作的标准计算机语言
18.总结一下
19.数据库是容器
20.存储引擎是给数据库提供数据存储、处理和保护等核心的程序,有两个如下:
(1)MySQL5.5后的默认存储引擎为InnoDB
(2)MyISAM
(3)设置存储引擎:engine=myisam,可以在charset=utf8前面写
(4)查看存储引擎:show create table 数据表;
(5)修改存储引擎:alter table 数据表 engine=innodb;
21.SQL分类
(1)DDL(数据定义语言):用来管来数据对象的,如数据库、数据表
增:create;改:alter;删:drop
(2)DML(数据操作语言):用来操作数据库对象中所包含的数据
增:insert;删:delete;改:update;
(3)DQL(数据查询语言):用于查询数据库数据(SELECT)
(4)DCL(数据控制语言):用来管理数据库
22.修改表明公式:alter table 旧表明 rename 新表名
23.在已存在的表中进行增、删、改都属于改(alter)
24.添加字段公式:alter table 表名 add 字段名 字段类型 comment’注释内容’;
25.删除字段公式:alter table 表名 drop 字段名;
26.修改
(1)Modify只能修改字段类型,不能修改字段名
alter table 表名 modify 字段名 新的字段类型;
(2)Change既可以修改字段名,又可以修改字段类型
alter table 表名 change 旧字段名 新字段名 新的字段类型或旧字段类型(必须加);
27.约束是为了确保表中数据完整性而做出的限制
字段名 字段类型 primary key auto_increment comment’注释信息’;
字段名 字段类型 unique comment’注释信息’;
字段名 字段类型 not null’注释信息’;
字段名 字段类型 default(“默认信息”)’注释信息’;
Eg:Default NOW();默认值为当前系统时间
字段名 字段类型 check(字段名=‘名称’Or字段名=‘名称’) comment’注释信息’;
①主表和从表
主表不会做增删改,只在从表里做增删改,主表只做显示的作用,操作都在从表里
28.给已存在的表添加约束用modify
(1)唯一约束
Alter table 表名 modify 字段名 字段类型 unique;
(2)默认约束
Alter table 表名 modify 字段名 字段类型 default;
29.设置外键
Alter table 从表的表名 add foreign key(从表的id) references 主表的表名(主表的主键id);
30.删除唯一约束
Alter table 表名 drop index 删除的字段名称;
31.删除外键
Alter table 表名 drop foreign key 外键名;
32.有外键的情况先删,所以先删从表再删主表
33.在表内添加数据(单条添加)
Insert into 表名(字段名1,字段名2...) values(值1,值2...);
有默认值的字段类型可以不写
34.在表内添加数据(批量添加)
Insert into 表名(字段名1,字段名2...) values(值1,值2...),
(值1,值2...);
Select * from 表名->*:查询所有字段
显示特定的字段:将*改成想要查询的字段名
公式:Update 表名 set name=新的值(想修改多个字段时用,分隔开) where 编号名=数字
公式:delete from 表名 where 编号名=内容
公式:delete from 表名 where 编号名 in(内容,内容,内容)
另一个删除公式(清空表里的所有数据,并让id自动从1递增)
truncate table 表名;
Create table 另一个表名(
Select * from 表名
);
基本查询:Select * from 表名;
条件查询:Select * from 表名 where 字段名称=数字(字段名称比较(>|<|=)数字)(灵活运用)(并且用and,或者用or);
模糊查询:select * from 表名 where 字段名称 like ‘%查询的内容%’;
不:not like
只模糊首位的:‘内容%’
只模糊末位的:‘%内容’
只显示查询:select 字段名称 as ‘名称’(有多个用,分隔开) from 表;名
(as可有可无) (字段名称 as ‘名称’是换另一种好理解的名称)
倒叙/降序是desc
正序/升序是asc
公式:order by 字段名称 降序/升序;
公式:limit a,b
a:从第几条数据开始(0代表第一条数据,以此类推)
b:显示的条数
a的公式:(当前页-1)*每页显示的条数
关键字group by,只要出现各个、每个,就要考虑分组
select count(*) b,字段名 from sum Group by 字段名;
字段名:就是按照它来进行分组的
可以显示两列,第一列显示字段名的个数,第二列显示的是字段名
b是将count(*)改成b名字
求总数:count()
求最多:max()
求最少:min()
求平均值:avg()
求最大值:max()
求最小值:min()
除了求总数,其它的括号内灵活取值
*表示所有
语法:select 聚合函数 from 表名
公式having 条件
先分组,分组完成后,再进行having
可以给聚合函数后进行一个赋值,方便进行having
Select distinct 字段名称 from 表名;
Select * from 表名 where 字段名称 is null;
查询不为空的数据
Select * from 表名 where 字段名称 is not null;
正方形:实体
椭圆:属性
菱形:关系(联系)
实体间的关系:一对一、一对多、多对多
商品品牌表、商品类型表、商品表
商品品牌表和商品类型表是主表,不会动的表
商品表是从表,是能动的表
注意:a是从1开始的,b是个数
Str1的a-b替换成str2
注意:a是从1开始的,b是截取的个数,作用str字符串
作用:计算str(字符串)的个数/长度
作用:去除空格
Select now();获取当前系统时间(包括日期和时间)
Select curdate();获取当前日期
Select curtime();获取当前时间
Select week(NOW());获取一年中第几个周
Select year(NOW());获取当前年
Select month(NOW());获取当前月
Select datediff(date1,date2);返回date1-date2的个数
Select adddate(date1,n);在date1基础上加n上天得出结果
Select yearweek(NOW());可以获取年加周
Select * from a a1 innor join b b1 on a1.a2=b.b2
a1:是将a的名称转换成a1
相当于以相交的地方来查
左连接(以左边表为基础查询)
右连接(以右边表为基础查询)
Select * from a a1 join(,) b b1 on(where) a1.a2=b1.b2
左连接:Select * from a a1 left join b b1 on a1.a2=b1.b2
有链接:Select * from a a1 right join b b1 on a1.a2=b1.b2
是嵌套其它sql语句的查询方式
查询的数据能作为条件进行查询,但增、删、改不行
所以要把条件再进行查询,比如条件叫a,公式如下:
Slect * from (a) b;意思是将条件a换成b表再进行查询
最后就可以把Slect * from (a) b作为查询结果作为条件进行增、删、改了,其实就是将条件a整体当作一个表进行查询
查询轻松多了,呜呜!
Create procedure:创建存储过程
Procedure:程序
Create procedure 名字()
Begin
代码块
End
调用用:call 名字();
想和专二一样,设置有参,注意参数前要加一个in表示输入
上面可以理解成下面
Public void mz(){
代码块
}
删除存储过程:drop procedure 名字;
定义当执行某些行为时会自动某些行为
有两个时间段
之前:before
之后:after
公式如下:
Create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
Begin
触发的事件,对新的值前面用new,对已经存在的前面用old
End
查看触发器:show triggers;
删除触发器:drop trigger 名字();
Begin和end里可以写if条件,当if条件运行完之后,then是if条件执行后,then(然后)是要写执行的内容,最后写end if结束
create index index_name on emp(emp_name)
index_name是自己创建的名字
60.以后查询时都用查询
Select * from 表1 e left join 表2 d on e.id=d.id;
子查询时可以用in来表示包含,当条件1 in 条件2时,只要包含条件2的条件,条件1都能筛选出来