mysql数据库知识点

  1. mysql数据库了解

  2. 数据库:database
  3. 数据库是持久存储有组织可共享数据的容器,冗余度(重复性)低,易扩展,有较高的独立性,采用特定的数据类型(整形、浮点型、字符串类型-char、varchar或者text(文本类型),和专二不太一样字符串类型)
  4. 数据库模型的分类:
    1. 层次模型

以树形结构表示实体和实体之间联系的数据模型

简单,但结构不灵活,不能表达复杂模型 

    1. 网状模型

能表达复杂关系,但结构复杂,使用不易不利于数据库的维护和重建

    1. 关系模型

表达方式直观简洁,插入、删除、修改数据操作方便,时目前普遍使用的数据库模型

  1. 数据库有关系型数据库、非关系数据库
    1. 关系型数据库:MySQL、Qracle
    2. 非关系型数据库:Redis
  2. mysql数据库代码

  3. 连接数据库:mysql -u用户名 -p密码
  4. 查看数据库: show databases;(字母不区分大小写,但符号区分大小写)->因为数据库不止一个,所以database后要加s
  5. 创建数据库:create database 名称;->因为创建时只能创建一个,所以database后就不用加s了
  6. 创建完之后可以再次用show databases检查数据库
  7. 使用数据库:use 数据库名;->Database changed(数据库发生改变)表示使用数据库成功
  8. 删除数据库:drop database 数据库名;->显示Query OK,表示删除数据库成功
  9. net stop mysql:关闭数据库
  10. net start mysql:启动数据库
  11. 查看当前数据库名称:select database();->先使用数据库,再查看数据库,查看数据库的名字
  12. 数据表是用来表示和存储数据对象之间关系的二位数组的集合
    1. 数据库包含数据表
    2. 现有数据库,再有数据表
    3. 数据表的组成(表名)
    4. 创建数据表:create table 名称(注意先使用数据库,再创建数据表,这个创建方式后面没有分号(;)),以下是全面的(创建数据表时创建里面的类型)

 create table student(

    -> id int comment'学生学号',(不写长度的话,默认为11)

    -> name varchar(255) comment'学生姓名',(必须写255,因为这里动态的)

    -> sex char(4) comment'学生性别',(一个汉字表示两个字节)

    -> score double(6,2) comment'学生成绩'(2表示小数点位数,6包括小数点位数,这里后面不用加,)

-> );(最后有一个分号)

格式:字段名 字段类型 字段说明注释(注释用comment)

    1. create database 表名 charset utf8;创建一个类型为utf8类型的表
    2. 创建数据表:create table 名称(注意先使用数据库,再创建数据表,这个创建方式后面没有分号(;)),以下是全面的(创建数据表时创建里面的类型)

 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.总结一下

  1. 连接数据库   mysql -uroot -p123456
  2. 查看数据库   show  databases;
  3. 创建数据库   create database 数据库名;
  4. 使用数据库   use  数据库名;
  5. 删除数据库   drop database 数据库名;

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.约束是为了确保表中数据完整性而做出的限制

(1)主键约束:一个表中最多只能有一个主键,不能为空

字段名 字段类型 primary key auto_increment comment’注释信息’;

(2)唯一约束:数据不能重复;

字段名 字段类型 unique comment’注释信息’;

(3)非空约束:数据不能为空;

字段名 字段类型 not null’注释信息’;

(4)默认约束:先有默认数据;

字段名 字段类型 default(“默认信息”)’注释信息’;

Eg:Default NOW();默认值为当前系统时间

(5)检查约束:比如性别,进行检查

字段名 字段类型 check(字段名=‘名称’Or字段名=‘名称’) comment’注释信息’;

(6)外键约束

①主表和从表

主表不会做增删改,只在从表里做增删改,主表只做显示的作用,操作都在从表里

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...);

数据操作语言

35.查询表内数据

Select * from 表名->*:查询所有字段

显示特定的字段:将*改成想要查询的字段名

36.修改物资表的信息用update

公式:Update 表名 set name=新的值(想修改多个字段时用,分隔开) where 编号名=数字

37.删除物资表数据

公式:delete from 表名 where 编号名=内容

批量删除数据

公式:delete from 表名 where 编号名 in(内容,内容,内容)

另一个删除公式(清空表里的所有数据,并让id自动从1递增)

truncate table 表名;

  1. 当前系统时间:default now();
  2. 数据迁移

Create table 另一个表名(

Select * from 表名

);

重点DQL(数据查询语言)

基本查询、条件查询、条件查询、多添建查询、模糊查询、分组查询、连接查询、子查询

基本查询:Select * from 表名;

条件查询:Select * from 表名 where 字段名称=数字(字段名称比较(>|<|=)数字)(灵活运用)(并且用and,或者用or);

模糊查询:select * from 表名 where 字段名称 like ‘%查询的内容%’;

不:not like

只模糊首位的:‘内容%’

只模糊末位的:‘%内容’

只显示查询:select 字段名称 as ‘名称’(有多个用,分隔开) from 表;名

(as可有可无) (字段名称 as ‘名称’是换另一种好理解的名称)

排序

  1. 排序的关键字是order by

倒叙/降序是desc

正序/升序是asc

公式:order by 字段名称 降序/升序;

  1. a-b之间的信息
  1. 字段名称>=a and 字段名称<=b;
  2. 字段名称 between a and b;

分页

  1. 分页的关键字limit

公式:limit a,b

a:从第几条数据开始(0代表第一条数据,以此类推)

b:显示的条数

a的公式:(当前页-1)*每页显示的条数

  1. 分组(结合聚合函数)(其实就是查询每一组有几个)

关键字group by,只要出现各个、每个,就要考虑分组

select count(*) b,字段名 from sum Group by 字段名;

字段名:就是按照它来进行分组的

可以显示两列,第一列显示字段名的个数,第二列显示的是字段名

b是将count(*)改成b名字

聚合函数

  1. 聚合函数是对一组值值进行计算,并返回单个值的函数

求总数:count()

求最多:max()

求最少:min()

求平均值:avg()

求最大值:max()

求最小值:min()

除了求总数,其它的括号内灵活取值

*表示所有

语法:select 聚合函数 from 表名

Having

公式having 条件

先分组,分组完成后,再进行having

可以给聚合函数后进行一个赋值,方便进行having

  1. distinct去重

Select distinct 字段名称 from 表名;

  1. 查询为空的数据

Select * from 表名 where 字段名称 is null;

查询不为空的数据

Select * from 表名 where 字段名称 is not null;

  1. where可以理解成分组前进行筛选,having可以理解成分组后进行筛选,limit放在sql语句的最后用

E-R图

正方形:实体

椭圆:属性

菱形:关系(联系)

实体间的关系:一对一、一对多、多对多

  1. 主表可以有多个

商品品牌表、商品类型表、商品表

商品品牌表和商品类型表是主表,不会动的表

商品表是从表,是能动的表

  1. 字符串函数
    1. 字符串拼接函数:concat(str1,str2,str3);
    2. Select insert(str1,a,b,str2);

注意:a是从1开始的,b是个数

Str1的a-b替换成str2

  1. Select LOWER(str):将大写变为小写
  2. Select UPPER(str):将小写变为大写
  3. Select Substring(str,a,b);

注意:a是从1开始的,b是截取的个数,作用str字符串

  1. select CHAR_LENGTH(str);

作用:计算str(字符串)的个数/长度

  1. select TRIM(str);

作用:去除空格

  1. 日期函数

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());可以获取年加周

  1. 两表联查

  1. 显示内连接

Select * from a a1 innor join b b1 on a1.a2=b.b2

a1:是将a的名称转换成a1

相当于以相交的地方来查

  1. 显示外连接

左连接(以左边表为基础查询)

右连接(以右边表为基础查询)

  1. 最终省略inner来写

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

  1. a.b:调用a里的字段b

  1. 子查询

是嵌套其它sql语句的查询方式

查询的数据能作为条件进行查询,但增、删、改不行

所以要把条件再进行查询,比如条件叫a,公式如下:

Slect * from (a) b;意思是将条件a换成b表再进行查询

最后就可以把Slect * from (a) b作为查询结果作为条件进行增、删、改了,其实就是将条件a整体当作一个表进行查询

查询轻松多了,呜呜!

  1. 存储过程和触发器

Procedure:存储过程

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都能筛选出来

你可能感兴趣的:(关系型数据库,mysql,数据库)