码迷,mamicode.com
首页 > 数据库 > 详细

Mysql数据库基本操作

时间:2017-10-21 00:16:26      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:mysql   数据库   

一、MySql数据库表操作

1、操作数据库

创建数据库:create database 数据库名;

删除数据库:drop database 数据库名;

修改数据库编码格式:alter database 数据库名 character set 要修改的字符集名称;

查询数据库:show databases; 查看所有数据库名称

选择数据库:use 数据库名;

2、操作表

创建表:create table 表名(

列名1 数据类型1,

列名2 数据类型2,...

);

常用列的数据类型:int double char varchar(字节长度) date:yyyy-MM-dd time: hh:mm:ss datetime: yyyy-MM-dd hh:mm:ss

删除表:drop table 表名;

修改表:

添加列:alter table 表名 add 列名 数据类型;

修改列数据类型:alter table 表名 modify 列名 数据类型;

修改列名:alter table 表名 change 旧表名 新表名 数据类型;

删除列:alter table 表名 drop 列名;

修改表名称:alter table 旧表名 rename to 新表名;

查询表:

show tables; 查询数据库下所有的表的名称

desc 表名; 查询该表的表结构

3、操作表中数据

增加数据:

insert into 表名(列名1,列名2,...) values(值1,值2,....);

insert into 表名 values(按顺序给出所有列对应的值);

删除数据:

delete from 表名 where 限定条件;

delete from 表名; -- 删除全部无法删除自增长约束,可以回滚,而truncate table不可以回滚

truncate table 表名; -- 删除全部重置自增长约束,只能删除全表数据,不能删除单个数据

修改数据:

update 表名 set 列名1 = 值1 , 列名2 = 值2... where 限定条件;

基本查询数据:

select * from 表名; 查看所有列

select 列名1,列名2,...from 表名; 查看所需列

select 列名1 as ‘别名1‘,列名2 as ‘别名2‘,...from 表名; 查看所需列并给列起别名

select (列名1 + 列名2) as ‘别名‘ from 表名; 

-- 和并列的时候,两个列的字段要类型一致;null参与的运算,结果都为null;ifnull 字段名称 会将null替换为0

4、表数据查询

1)where限制条件查询

=、!=、<>(不等于)、<、<=、>、>=;

between...and 在什么范围之间

IN(set);

is null 为空

is not null 不为空

and 并且

or 或者

not 非

2)模糊查询 like

通配符

_ 匹配单个任意字符

% 匹配对个任意字符

select * from 表名 where 列名 like ‘通配符组合‘; 

3)去除重复记录 distinct

select distinct 列名 from 表名;

4)排序 order by ASC 默认升序排列 DESC 降序排列

select * from 表名 order by 列名 asc;

select * from 表名 order by 列名1 desc,列名2 desc;

5)聚合函数 ———— 纵向运算

count(): select count(* 或者不含null值的列名) from 表名;

max(): select max(列名) as ‘最大值‘ from 表名;

min(): select min(列名) as ‘最小值‘ from 表名;

sum(): select sum(列名) as ‘和‘ from 表名;

avg(): select avg(列名) as ‘平均值‘ from 表名;

6)分组查询 ———— 配合聚合函数使用 查出的数据才有意义

select 列名1 聚合函数 from 表名 where 限定条件 group by 列名1; 按列名1分组

select 列名1 聚合函数 from 表名 group by 列名1 having 限定条件;

where:在分组之前对条件进行限定 不满足条件,就不会参与分组

having:在分组之后,对结果集的筛选

7)分页查询

select * from 表名 limit 开始的记录索引,每一页显示的条数;

开始的记录索引 = (页码-1)*每一页显示的条数

* oracle:rownum 分页方言

* sqlserver:top 分页方言

5、约束

1)主键约束(primary key)

被修饰的字段唯一且非空;一张表只能有一个主键,这个主键可以包含多个字段

格式一:

create table 表名(

字段名称 字段类型 primary key

);

格式二:

create table 表名(

字段名称 字段类型;

primary key(字段名称)

);

格式三:

alter table 表名 add primary key(字段名1,字段名2..);

2)唯一约束(unique) ———— 被修饰过的字段唯一,对null不起作用

3)非空约束(not null) ———— 被修饰过的字段非空

4)外键约束(foreign key)

1)自增长约束 auto_increment

1.被修饰的字段类型支持自增. 一般int

2.被修饰的字段必须是一个key 一般是primary key

2)在多表的一方添加外键约束

alter table 外表名称 add foreign key(外键字段名称) references 主表名称(主键字段名称);

6、多表查询

1)内连接 a表,b表的连接

格式1:显式的内连接

select a.*,b.* from a [inner] join b on ab的连接条件;

格式2:隐式的内连接

select a.*,b.* from a,b where ab的连接条件;

2)外连接

格式1:左外连接

select a.*,b.* from a left [outer] join b on 连接条件;

先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.

格式2:右外连接

select a.*,b.* from b right [outer] join a on 连接条件;

先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.

3)子查询 ———— 一个查询依赖另一个查询

例:SELECT emp_fname,emp_lname FROM employee WHERE emp_no = (SELECT emp_no FROM works_on WHERE enter_date = ‘1998-01-04 00:00:00‘);

select 列名 from 表名 where 列名 = (select 列名 from 表名 where 限定条件);

二、储存过程 ———— 带有逻辑的sql语句

1、特点

1)执行效率非常快,储存过程是在数据库的服务器端执行的

2)移植性很差,不同数据库的储存过程是不能移植的

2、语法

创建储存过程

delimiter $

create procedure test(in 输入参数名 数据类型,out 返回值名 数据类型) 

-- 也可以没有参数和返回值

begin

-- 多条需要执行的sql语句

if 输入参数名 = 值1 then

set 返回值名 = ‘返回值1‘;

if 输入参数名 = 值2 then

set 返回值名 = ‘返回值2‘;

else

set 返回值名 = ‘返回值3‘;

end if;

end $

调用存储过程:

call tset(输入参数值,@返回值名);

select @返回值名;

3、MySQL中的变量

1)全局变量(内置变量):作用域整个链接

-- 查看所有全局变量;show variables;

-- 查看某个全局变量:select @@变量名;

-- 修改全局变量:set 

set @@character_set_client=gbk; 设置服务器端口接收的编码

set @@character_set_results=utf8; 设置显示的编码

2)会话变量:只存在当前一次连接中 如果这次链接断掉 会话变量就消失了

-- 定义会话变量:set @变量 = 值;

-- 查看会话变量:select @变量;

3)局部变量:比如存储过程中的变量 作用域在 begin和end之间

4、begin end间的逻辑sql语句

1)条件判断

if ..then ..set..;

else set..;

end if;

2)循环

whlie 变量名 判断符 值 do

set..;

set 变量名=变量名+1; -- 注意这块没有i++的说法

end whlie;

5、删除储存过程

drop procedure 储存过程名;

三、触发器 ———— 当一个操作发生时会触发另一个行为

创建触发器

create trigger 起个触发器名字 after增/改/删 on要增改删的表名 for each row

insert into 要记录的表名(字段名)values(‘增加了一条记录’);

//after insert on 添加

//after update on 修改

//after delete on 删除

例:

delimiter $

create trigger banji after insert on user for each row

begin

insert into loger values(NULL,‘你增加了一条记录‘,NULL);

end $

insert into user values(NULL,‘张三‘);

四、MySql中的函数

1、系统函数

直接调用即可.任何函数都有返回值,函数的调用是通过select调用.因为有返回值,所以只能用select 调用

1)截取字符串

substring(原字符串,起始位置,截取长度); mysql 中下标从1开始算

2)字符字节长度

set @username=‘你好世界‘;

char_length(‘@username‘) 字符长度  4 个

length(‘@username‘)  字节长度 12个

3)查找字符所在字符串的索引,没有返回0

select instr(@username,‘好‘); 返回2

4)按照指定长度填充指定字符串

lpad (@username,10,‘要填充的字符‘) 左填充

例如: select lpad(@username,10,‘欢迎‘); 注意10个长度算上原来‘你好世界‘的这4个长度,也就是说欢迎填充了6个

rpad 右填充

5)insert 替换字符串

例如: select insert(@username,2,2,‘哈哈‘); 从第二个字符开始替换两个字符 替换成哈哈

6)strcmp(字符串1,字符串2) 比较两个字符串大小 按照字典顺序去比较

2、自定义函数

1)创建自定义函数

create function 函数名(参数列表可有可无) returns 数据类型  --规定要返回的数据类型

begin

函数体

返回值:return 返回类型(我们指定的类型);

end

2)使用函数

create function show() returns int

return 100;

-- 调用函数

select show();

-- 查看所有函数 show functions status;

-- 查看创建函数  show create function test;

-- 删除函数  drop function test;

3)例:

delimiter $

create function delById(uid int) returns int

begin

delete form user where id = uid;

return (select count(*) from user);

end $

select deById(7);

五、视图

1、概述:有结构的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生

视图可以更好的进行权限控制 比如对外隐藏我的一些基表的名称

2、创建视图

create view 视图名称 as select语句;

create view my_v1 as select * from student;

create view my_v2 as select a.字段名,b.字段名 from a,b where a.id=b.id;

3、查看视图

关于查询表的语句对于视图都是可以用的 除过show create view my_v1;

视图的执行:其实本质就是执行封装的select 语句

4、删除视图:drop view 视图名称

5、修改视图,其实是对原表的修改 alter view 视图名字 as 新的select语句

6、视图数据的操作

视图插入数据:

(1)多表视图不能插入数据

(2)单表视图中可以插入数据(如果视图中字段没有基表中不能为空的字段且没有默认值的字段,是插入不成功的)

(3)视图是可以向基表中插入数据的 (视图的操作是影响基表的)

视图删除数据

(1):多表视图不能删除数据

(2):单表视图可以删除数据,也会影响到基表

视图更新数据

单表视图,多表视图都可以更新数据

    更新限制:with check option

    例如:create view my_v1 as select * from student where age>30 with check option;

    表示视图数据的来源都是年龄大于30的,with check option 决定通过视图更新的时候,不能将已得到

    数据age>30的学生 改成age<30 的.

    那么:update  my_v1 set age=20 where id=1; 就会报错 不允许改 因为做了限制


Mysql数据库基本操作

标签:mysql   数据库   

原文地址:http://378213986.blog.51cto.com/11691396/1974542

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!