MySQL入门很简单

MySQL

特殊数据类型

enum(‘m’,‘w’) 单选
set(‘java’,‘c’,‘linux’) 多选

插入,更新,删除数据

1.插入数据:

insert into 表名 values(插入属性对应的值);

2.将查询结果插入到表中:

insert into 表名1 (属性列表1select 属性列表2 from 表名2 where 条件表达式;

注意:必须保证‘列表1’和‘列表2’中字段个数和数据类型是一样的,

3.更新数据:

update 表名 set 属性名 = 新值 where 条件表达式;

4.删除数据:

delete from 表名 where 条件表达式;

创建,修改,删除表

设置表的主键:

1.单字段主键
属性名 数据类型 pirmary key;
2.多字段主键
primary key(属性名1,属性名2,,,属性名n)

设置表的外键:

外键可以为空值,

constraint 外键别名 foreign key(属性名1.1,属性名1.2,,,,属性名1.n) references 父类表名(属性名2.1,属性名2.2,,,,属性名2.n)

‘外键别名’指外键的代号,‘属性1’是子表中设置的外键,‘父类表名’指父类的名称,‘属性2’是父类的主键

删除表的外键约束:

alter table 表名 drop foreign key 外键别名;

修改表名:

alter table 旧表名 rename [to] 新表名;

修改字段的数据类型:

alter table 表名 modify 属性名 新数据类型;

‘属性名’指需要修改的字段的名称
‘数据类型’指修改后的新数据类型

修改字段名和字段数据类型:

alter table 表名 change 旧字段名  新字段名  新数据类型;

增加字段:

第一个位置添加元素:

alter table 表名 add 属性名1 数据类型 [约束条件] first;

指定位置添加元素:

alter table 表名 add 属性名1 数据类型 [约束条件] [first | after 属性名2];

删除字段:

alter table 表名 drop 属性名;

删除字段约束条件:

alter table 表名 drop 约束名;

修改字段的排列位置:

alter table 表名 modify 属性名1 数据类型 first | after 属性名2

更改表的存储引擎:

alter table 表名 engine=存储引擎名;

改动字符集:

表的字符集:

alter table 表名 character set utf8;

属性的字符集:

alter table 表名 modify 属性名 数据类型 character set utf8;

视图

视图:
视图起着类似于筛选的作用;

create [algorithm = {undefined | merge | temptable }]
           view 视图名 [(属性清单)]	
           as select 属性名 from 表名
          [with [cascaded | local ] check option];

'algorithm’表示视图选择的算法;
'with check option’表示更新视图时要保证在该视图的权限范围之内;

使用create view 语句创建视图时,最好加上with cascaded check option 参数,这样,从视图上派生出来的新视图后,更新新视图需要考虑其父视图的约束条件。这种方式比较严格,可以保证数据的安全性;

查看是否具有select,create view,drop的权限

select Select_priv,Create_view_priv,drop_priv from mysql.user where user='用户名';

‘Y’表示有权限,‘N’表示没有权限;

在单表上创建视图:

1.create view 视图名 as select * from 表名;
2.create view 视图名(属性名) as select 属性名 from 表名;

在多表上创建视图:

 create algorithm=merge 
    -> view stu_view3(name,id,sex,address,course)
    -> as select name,num,sex,address,grade.course
    -> from student,grade where student.num=grade.id
    -> with local check option;

查看视图:

1.desc 视图名;
2.show table status like '视图名';
视图为虚拟表,同样这句查询语句,结果不同
3.show create view 视图名;

在views表中查看视图的详细信息:

select * from information_schema.views;

修改视图语句:

create or replace [algorithm = {undefined | merge | temptable }]
          	              view 视图名 [(属性清单)]	
         	              as select 属性名 from 表名
        	              [with [cascaded | local ] check option];
alter [algorithm = {undefined | merge | temptable }]
           view 视图名 [(属性清单)]	
           as select 属性名 from 表名
          [with [cascaded | local ] check option];

更新视图:

update 视图名 set 属性名1=新数据1,属性名2=新数据2

删除视图:

drop view [if exists] 视图名;

drop 语句可以同时删除多个视图

触发器

触发器:

创建一个由insert出发的触发器:

create trigger 触发器名 before insert
          on 表名 for each row
          insert into 记录时间的表 values(now());

创建多个执行语句的触发器:

delimiter &&
create trigger 触发器名 before | after 触发事件
            on 表名 for each row
            begin
	执行语句列表
            end
delimiter ;

在创建触发器过程中需要用到‘;’,MySQL默认结束语句为分号,因此用delimiter语句修改结束符号,
注意:delimiter后需要加空格 delimiter &&

查看触发器:

1.show triggers\G
无法查询指定的触发器,该语句只能查询所有的触发器;
在触发器很少时,可以使用show triggers\G ;
2.select * from information_schema.triggers\G
select * from information_schema.triggers where trigger_name=‘触发器名’\G

删除触发器:

drop trigger 触发器名;

一定要删除不需要的触发器;
如果没有将这个触发器删除,那么每次执行触发事件时,都会执行触发器中的执行语句,执行语句会对数据库中的数据进行某些操作,这回造成数据的变化。

查询语句

带in关键字查询:

in关键字可以判断某个字段的值是否在指定的集合中

select * from 表名 where 属性名 in(元素1,元素2...,元素n);

带between and 的范围查询:

between and 关键字可以判断某个字段的值是否在指定的范围内

select * from 表名 where 属性名 between1 and2

带like的字符匹配查询:

like关键字可以匹配字符串是否相等

select * from 表名 where 属性名 like '元素';

匹配一个完整的字符串,like 和 = 效果是相同的;
如果查询的字符串中包含了通配符,就只能使用like 来查询;
‘%’表示多个字符;
‘_’表示一个字符;

查询空值:

select * from 表名 where 属性名 is [not] null;

‘is’ 不能换成 ‘=’;

带and的多条件查询:

同时满足所有查询条件的数据才会被查询

select * from 表名 where 条件表达式1 and 条件表达式2 [...and 条件表达式n];

带or的多条件查询:

只要满足其中一个查询条件的数据就会被查询出来

select * from 表名 where 条件表达式1 or 条件表达式2 [...or 条件表达式n];

注意:当 and 和 or 一起使用时,and 要比 or 先运算;

查询结果不重复:

select distinct 属性名 from 表名;

对查询结果排序:

select * from 表名 order by 属性名 [asc | desc];

asc表示按升序排序,desc表示按降序排序;

MySQL中,可以指定按多个字段进行排序,排序过程中,按代码顺序第一种字段进行排序,遇到值相同的情况,再将相同的值进行下一个字段排序;

select * from 表名 order by 属性名1 [asc | desc],属性名2 [asc | desc];

分组查询:

将查询结果按某个字段或多个字段进行分组;

1.单独使用group by 关键字来分组:

select * from 表名 group by 属性名;

group by 单独使用时,只能查询出每个属性分组的一条数据,

2.group by 与group_concat()函数一起使用:

select 属性名1,group_concat(属性名2) from 表名 group by 属性名1

通过属性名1来分组,查询出属性名1数据相同的全部属性名2的数据

3.group by 与集合函数一起使用:

可以通过集合函数计算分组中的总记录,最大值,最小值等;
总记录:

select 属性名,count(属性名) from 表名 group by 属性名;

4.group by 与having 一起使用 :

可以限制输出的结果,只有满足条件表达式的结果才会显示;

select 属性名,count(属性名) from 表名 group by 属性名 having count(属性名)>3;

只有当所需要查询的属性的数据总量大于3才会显示出来;

5.按多个字段进行分组:

先按属性名1进行分组,遇到值相同的情况,再把相同的值按属性名2进行分组,以此类推。

select * from 表名 group by 属性名1,属性名2...,属性名n; 

6.group by 与 with rollup 一起使用:

使用with rollup 后缀时,会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和;

limit关键字限制查询

用 limit 限制查询结果的数量:

1.limit 关键字不指定初始位置

limit 关键字不指定初始位置时,记录从第一条记录开始显示,显示记录的条数由limit关键字指定;

select * from 表名 limit 记录数;

2.limit 关键字指定初始位置时

select * from 表名 limit 初始位置,记录数;

‘初始位置’指定从哪条数据开始显示,
‘记录数’表示显示数据的条数,
第一条数据的位置时0,第二条数据的位置时1;

集合函数查询

1.count() 函数:

统计总数据的条数;

select count(*) from 表名;

统计单个属性的相同数据的条数:

select 属性名,count(属性名) from 表名 group by 属性名;

2.sum() 函数:

求和函数,可以求出表中某个字段取值的总和;

select sum(求和属性名) from 表名;

sum()函数一般与group by 关键字连用;

3.avg() 函数:

求平均值,可以求出表中某个字段取值的平均值;

4.max(),min() 函数;

求最大值或者最小值;

连接查询

1.内连接查询:

可以查询两个或者两个以上的表,当表中存在表示相同意义的字段时,可以通过该字段来连接这两个表:当该字段的值相等时,就查询出该记录;

select 属性名 from 表名1,表名2 where 表的相同字段值相等;

2.外连接查询:

外连接查询需要通过指定字段来进行查询,当该字段值相等时,查询出该记录,而且,该字段取值不相等的记录也可以查询出来。

select 属性名列表 from 表名1 left | right join 表名2 on 表名1.属性名 1 = 表名2.属性名2

使用左查询,表1 的数据全部显示,表2 只显示匹配条件的记录;
使用右查询,表2 的数据全部显示,表1 只显示匹配条件的记录;

子查询

1.带in关键字的子查询:

一个查询语句的条件可能落在另一个select语句的查询结果中

select * from  表名1 where 属性名 [not] in (select 相关属性名 from2);

2.带比较运算符的子查询:

<> 与 != 是等价的

select * from  表名1 where 属性名 比较运算符 (select 相关属性名 from2);

3.带exists关键字的子查询:

exists表示存在,使用exists关键字时,内层查询语句不返回查询的数据,而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true),否则,将返回一个假值(false)。当返回true时,外层查询进行查询;当返回false时,外层查询不进行查询或查询不出任何数据;

当exists与其他查询条件一起使用时,条件表达式与exists关键字之间用and 或者 or连接。

3.带any关键字的子查询:

表示满足其中任一条件;

4.带all关键字的子查询:

表示满足所有条件;

合并查询

进行合并操作使用union 和 union all 关键字
union:将查询结果合并到一起,然后出点相同的记录;
union all:简单的合并到一起;

select 语句1
   union | union all
select 语句2
   union | union all 
select 语句n;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值