MySQL 基础知识-01

目录

前言

一、第一次使用mysql

二、数据定义语言DDL

三、数据操作语言DML(对表中的数据进行插入,删除,更新操作)

四、约束

五、数据查询语言DQL(select语句)


前言

(1)SQL语言语法特点:

SQL对关键字大小写不敏感

SQL语句可以以单行或多行书写,以分号;结束

SQL的注释:

-- 单行注释,--后面一定要加一个空格

# 单行注释,#后面可加可不加空格

/*

...多行注释

...多行注释

*/ 

(2)数据库系统分类:关系型数据库RDBMS(MySQL、Oracle、SQL server、PostgreSQL、SQLite)、非关系型数据库NoSQL(Redis、Hbase、Elasticsearch、MongoDB、Cassandra)

关系型数据库存数据就是一张一张的表,表与表之间有关系

非关系型数据库存数据是通过key-values形式存放

(3)SQL适用于所有的关系性数据库,对非关系型数据库不太支持

(4)数据库管理系统DBMS主要由数据库DB和表table组成,一个系统可以有很多数据库,每个数据库可以有很多表

一、第一次使用mysql

(1)手动安装方式:

详细教程请看07-MySQL安装-方式1-解压方式_哔哩哔哩_bilibili

首先去官网下载mysql安装包,并解压。

如果在mysql界面输入命令出错,只需要输入';即可重新输入,使用quit退出mysql,登录mysql可以直接指定密码:mysql -uroot -p'密码'

(2)自动安装方式:请看08-MySQL安装-方式2-安装包方式_哔哩哔哩_bilibili

(3)mysql的卸载:

a : 停止服务  net  stop  mysql   或win  +  R  输入services.msc进入服务窗口关闭mysql服务

b  : 在控制面板删除mysql(可选,手动安装方式控制面板不会有mysql)

c  :找到mysql的安装位置,删除mysql-x.x.x-winxx文件夹

d  :显示隐藏文件后,删除"C:\ProgramData\MySQL"所有文件(可选,同b)

e  :  清除注册表:win  + R  输入regedit删除以下文件:(如果有的话删除)

 f  :删除环境变量中的配置,MYSQL_HOME和path中的路径

g  :管理员权限cmd -->sc delete 自己电脑mysql服务的名字

h  : 删除完毕

二、数据定义语言DDL

1、对数据库的常用操作

(1)show  databases;                   :    查看所有数据库

(2)create  database  [if  not  exists]  要创建的数据库名字  [charset=utf8];   : 创建数据库

                                    if  not  exists  : 不存在才创建,如果存在则无操作

(3)use   要切换的数据库名字;    : 切换数据库

(4)drop  database  [if  exists]  要删除的数据库名字;                  : 删除数据库

(5)alter  database  要修改的数据库名字   character  set  utf8;  : 修改数据库编码

2、对表结构的常用操作

(1)创建表

或:直接指明表属于哪个数据库,同理下文的其它操作都可以这样写。

(2) 常见数据类型:(默认定义的类型都是有符号的类型,添加关键子unsigned即可设置为无符号类型

        例如sid  int  unsigned,   # 表示无符号的int类型

declmal(M,D)M表示有效数字,D表示小数点的位数,declmal类型是一种可以自己设置的类型

        timestamp类型可以根据时区自动获取当前的时间

(3)show  tables;                          :    查看当前数据库的所有表名称

(4)show  create  table  表名;   : 查看指定某个表的创建语句(查看该表创建的SQL语句)

(5)desc   表名;                          : 查看表结构

(6)drop  table   表名;                : 删除表

3、修改表结构格式

(1)添加列

语法:    alter  table  表名   add   列名   类型(长度)  [约束];

例如:    alter  table  student  add  dept  varchar(20);

(2)修改列名和类型

语法:    alter  table  表名   change  旧列名   新列名   类型(长度)  [约束];

例如:    alter table  student  change  dept   department   varchar(30);

(3)删除列

语法:   alter  table   表名   drop   列名;

例如:   alter  table   student  drop   department;

(4)修改表名

语法:   rename  table  旧表名   to   新表名;

例如:   rename  table   student   to  stu;

三、数据操作语言DML(对表中的数据进行插入,删除,更新操作)

(1)数据插入insert

语法:

insert     into     表名(列名1,列名2,.....)    values(值1,值2,....);  : 向表中某些列插入一个数据

insert     into     表名    values(值1,值2,值3,.....);     :   向表中所有列插入一个数据

insert     into     表名(列名1,.....)    values(值1,...),(值1),......;  : 插入多行数据

(2)数据修改update

语法:

update    表名    set     字段名=值,字段名=值......;  :  对表中所有数据的某列修改

update    表名    set     字段名=值,字段名=值......     where   条件;  :  对表中符合条件的数据修改其列值

例如:

 (3)数据删除delete

语法:

delete  from   表名    [where   条件];       

truncate   table   表名;

truncate    表名; 

四、约束

对表加入约束的目的是为了保证表中的记录完整性和有效性,比如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。

1、约束的分类

主键约束primary key---PK      :       该列的值唯一且不为空

自增长约束auto_increment    :     该列的值可以自动增长,一般与PK一起使用

非空约束not null                     :     值不为空

唯一性约束unique                  :     值必须唯一

默认约束default                      :     该列的值如果没给,则使用默认值

零填充约束zerofill                   :     根据该列值的长度填充0,如果该值的长度小于定义的长度,则

                                                        在该值的前面补0

外键约束foreign key--FK         :     涉及多张表时使用

2、主键约束

PK是一列或多列的组合,其值能唯一的标识表中的每一行,每个表最多只允许有一个主键。

(1)单列主键

方式1:在设计字段的同时直接指定主键

方式2:设计完所有字段后指定主键

         约束名可随意取。

 (2)联合主键

当主键是由多个字段组成时,不能直接在字段后面声明主键约束

联合主键的各列都不能为空

 (3)创建完表之后指定主键(单列,联合都可以)

 (4)删除主键约束

 3、自增长约束

(1)基本概念

在mysql中,当主键定义为自增长后,这个主键的值就不在需要用户输入数据了,每增加一条记录,主键会自动以相同的步长进行增加,自增长约束都是和PK一起使用的。

 默认情况下,auto_increment初始值为1,步长为1

auto_increment约束的字段必须具备not null属性,且只能是整数类型,auto_increment约束字段的最大值受该字段的数据类型约束,如果达到上限,auto_increment就会失效。

(2)指定自增字段初始值

方式1:创建表时指定

 方式2:创建表之后指定

alter   table    表名    auto_increment=初始值;

注意:delete数据之后自动增长从断点开始

           truncate数据之后自动增长从默认初始值   1   开始

4、非空约束

(1)指定非空约束

一张表可以有多个非空约束

字段名    数据类型      not  null

alter   table    表名     modify      字段名     数据类型      not    null;

(2)删除非空约束

 alter   table    表名    modify      字段名     数据类型;

5、唯一约束

(1)指定唯一约束

指所有记录中字段的值不能重复出现,由于在mysql中NULL和任何值都不同,甚至和自己都不相同,所有唯一约束允许多个NULL出现

 (2)删除唯一约束

alter    table    表名     drop    index    唯一约束名;

方式2有约束名,但方式1没有定义约束名,这时字段名默认就是约束名

6、默认约束

(1)指定默认约束

 (2)删除默认约束

alter    table    表名     modify     字段名     数据类型     default    null;

7、零填充约束

插入数据时,当该字段的值的长度小于定义的长度时,会在该值前面补0,zerofill默认为int(10)

当使用zerofill时默认自动加unsigned(无符号)属性

(1)指定约束

字段名     数据类型      zerofill

(2)删除约束

alter   table   表名    modify    字段名    数据类型;

五、数据查询语言DQL(select语句)

(1)语法:

all:显示所有包括重复的值(默认)    distinct  : 去掉重复值

对表起别名主要用于多表查询例如:

select  s.sid,t.sid   from student   s,  teacher   t;

对列起别名,用于控制查询的输出例如

select  sid  as  "学号"   from   student;   # 输出结果中列名是“学号”而不是sid了

(2)数据准备:

  (3)简单查询

select * from product;

select pname,price from product;

select * from product as p;
select * from product p;

select pname as "商品名",price as "价格" from product;

select price from product;
select all price from product;

select distinct price from product;  # 去掉重复值
select distinct * from product;  #一行所有内容都一样的行会去掉

select pname, price from product;
select pname, price+10 from product;  # 只是显示的时候加10,原始表格不会变化,显然这个时候列名不好看
select pname, price+10 as new_price  from product;

(4)运算符

算术运算符:+,-,*,/或DIV,%或MOD

select  pname,price  +  10  as  new_price   from   product;

比较运算符:

  逻辑运算符:NOT或!,AND或&&,OR或||,XOR(异或)

select * from product where pname = "海尔洗衣机";

select * from product where price = 400;

select * from product where price != 400;
select * from product where price <> 400;
select * from product where not(price = 400);

select * from product where price > 400;

select * from product where price >=400 && price <=3000;
select * from product where price >=400 and price <=3000;
select * from product where price between 400 and 3000;   # [400,3000]

select * from product where price = 400 or price =340;
select * from product where price in (400,340);

select * from product where pname like "%机";   # %表示任意字符 
select * from product where pname like "海%";
select * from product where pname like "%尔%";

select * from product where pname like "____机";  # _表示一个字符
select * from product where pname like "香_";

select * from product where ISNULL(category_id);
select * from product where category_id is null;
select * from product where category_id is not null;

select least(10,20,30);   # 10
select least(10,null,30);    # null  求最小值、最大值时如果有个值位null,则不会进行比较,直接输出null

select greatest(10,20,30);    # 30
select greatest(10,null,30);    #  null 

 位运算符:

(5)排序查找order  by

 asc表示升序,desc表示降序,默认升序

order  by  子句放在查询语句的最后面,limit子句除外

order  by 子句用于将查询的结果进行排序,order by后面可以加入一个或多个字段,如果是多个字段时,先根据字段1排序,然后如果字段1的值相同则使用字段2再次进行排序

select * from product order by price desc;

select * from product order by price desc,category_id asc;

select distinct price from product order by price desc;

select * from product where category_id = "c001" order by price;

select * from product order by price,pid desc;

(6)聚合查询

之前的查询都是基于行的查询,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值,另外聚合函数会忽略空值,即认为含null的数据完全不存在。

常见的聚合函数有:

select count(pid) from product;
select count(*) from product;   # count(1) 等价于count(*)

select count(pid) from product where price > 200;

select sum(price) from product where category_id = "c001"

select max(price) from product;
select min(price) from product;
select max(price) max_price,min(price) min_price from product;

select avg(price) from product where category_id="c002"

(7)分组查询group  by

分组查询是先分组,然后对每组进行查询,得到查询的统计结果,最后利用having对统计的结果再次筛选,这里不能使用where

如果使用了group by语句则select子句之后只能出现分组的字段和聚合函数

group by语句之后可以有多个分组字段,只有所有字段都相同时才可分为同一组

select category_id , count(*) from product GROUP BY category_id;  # 统计各个分类商品的个数
/*
category_id     count(*)
c001	            5
c002	            4
c003	            2
c004	            3
(Null)              1
*/

select category_id , count(*) from product GROUP BY category_id having count(*) > 1;
/*
category_id     count(*)
c001	            5
c002	            4
c003	            2
c004	            3
*/

select category_id , count(*) c from product GROUP BY category_id having c > 1 order by c;
/*
category_id     c
c003	        2
c004	        3
c002	        4
c001	        5
*/

(8)分页查询limit

在实际应用中,由于数据量巨大,显示屏长度有限,因此对数据需要采用分页显示方式。例如共30条数据,每页显示5条,共6页。

select * from product limit 5;

select * from product limit 5, 6;  # 从第m+1个数据开始,显示6个数据(从索引m开始显示6个数据)mysql的索引从0开始

假设有一个购物网站,规定每页显示60个商品问,第10页第一个商品的索引是多少(540)

 (9)insert  into   select语句

将一张表的数据导入到另一张表中,可以使用insert  into   select语句

 注意:目标表table2必须存在

(10)正则表达式

 ?                                  匹配前面的子表达式0次或1次

(.....)                          把多个字符作为整体去匹配,即必须是括号中的内容

例子:

# 正则表达式就是判断给定的字符串是否与规则匹配,若匹配返回1,否则返回0
select "abc" regexp "^a";   # 1 
select * from product where pname regexp "^海";

select "abc" regexp "a$";   # 0
select "abc" regexp "c$";   # 1 
select * from product where pname regexp "水$";

select "abc" regexp ".b";   # 1 
select "abc" regexp ".c";   # 1 
select "abc" regexp "a.";   # 1 

select "abc" regexp "[xyz]";   # 0
select "abc" regexp "[xaz]";   # 1 

select "a" regexp "[^abc]";   # 0
select "x" regexp "[^abc]";   # 1 
select "abc" regexp "[^a]";   # 1 

select "stab" regexp ".ta*b";   # 1 
select "stb" regexp ".ta*b";   # 1 
select "" regexp "a*";   # 1 
select "stab" regexp ".(ta)*b";   # 1 

select "stab" regexp ".ta+b";   # 1 
select "stb" regexp ".ta+b";   # 0

select "stb" regexp ".ta?b";   # 1 
select "stab" regexp ".ta?b";   # 1 
select "staab" regexp ".ta?b";   # 0

select "a" regexp "a|b";   # 1 
select "b" regexp "a|b";   # 1 
select "b" regexp "^(a|b)";   # 1 
select "a" regexp "^(a|b)";   # 1 
select "c" regexp "^(a|b)";   # 0

select "auuuuc" regexp "au{4}c";   # 1
select "auuuuc" regexp "au{3}c";   # 0

select "auuuuc" regexp "au{3,}c";   # 1
select "auuuuc" regexp "au{4,}c";   # 1
select "auuuuc" regexp "au{5,}c";   # 0

select "auuuuc" regexp "au{3,5}c";   # 1
select "auuuuc" regexp "au{4,5}c";   # 1
select "auuuuc" regexp "au{5,10}c";   # 0

select "xababy" regexp "x(abab)y";   # 1
select "xababy" regexp "x(ab)*y";   # 1
select "xababy" regexp "x(ab){1,2}y";   # 1
select "xababy" regexp "x(ab){3}y";   # 0

(1)点击新建查询,会弹出一个界面,在此界面内我们可以输入SQL语言

(2)CTRL + /  :  注释      CTRL +  鼠标的滑轮   : 控制字体大小    CTRL+D:复制该行到下一行

注意:

ifnull(sal,0)   #如果sal的值为null,则当作0,否则还是使用原来的值 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值