mysql基础篇

 

mysql简介:关系型数据库管理系统,免费开源,支持多语言[访问使用方便],跨平台[移植性好],高效[mysql核心程序采用多线程编程],支持大量数据库查询和存储[可承受大量的并发]

 

连接登录mysql:mysql -u 用户 -p密码

显示所有数据库:show databases;

选定默认数据库:use 数据库名;

显示默认数据库中所有表:show tables;

放弃正在输入的命令:\c

显示命令清单:\h

退出mysql程序:\q  或者  exit

查看mysql服务器状态信息:\s

创建数据库:create database 数据库名 CHARSET=utf8;  ---RSET=utf8定义字符集,不会产生乱码  --前提条件:没有创建该数据库,并拥有创建条件

显示数据库结构:show create database 数据库名;

删除数据库:drop database 数据库名;  ---删除数据库会删除数据库所有表和数据、索引等

常用存储引擎:   ---存储引擎指表的类型,数据库存储引擎决定表的存储方式

      InnoDB存储引擎:行级锁

      MyLSAM:表级锁---查询效率高

      MEMORY:直接存内存,不存磁盘----临时表

查看支持存储引擎:show engines;

 

指定表的存储引擎:create table tmp(…) engine=存储引擎;  

设置默认存储引擎:set default_storage_engine=c存储引擎;

      ---临时修改,重启后恢复默认,永久需修改mysql配置文件

 

创建表:create table 表名(

             列名1 列类型 [<列的完整性约束>],

             列名1 列类型 [<列的完整性约束>],

             ...

         );

create table sudents(

    Id int(10) primary key not null auto_increment,

    Name varchar(20) not null,

    Sex varchar(4),

    age int(10),

    class varchar(20) not null,

    Addr varchar(50)

);

 

常见约束:

      primary key  主键约束   唯一标示一条记录,不能重复,不能为空,主键只能一个,可以多个字段联合为主键

      foreign key  外键约束

      unique       唯一约束     

      not null     非空约束

      auto_increment    整数列默认自增1

      default 默认值    默认值约束

查看表结构:

      desc 表名;

      show create table 表名;

 

修改表:    ---不需要重新加载数据,不会影响正在进行的服务

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

修改字段数据类型:

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

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

增加字段:alter table 表名 add 属性名1 数据类型[完整性约束条件] [first|after 属性名2];

增加外键: alter table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(对应表主键字段名);

删除表的外键约束:alter table 表名 drop foreign key 外键别名;

修改字段的排列位置:alter table 表名 modify 属性名1 数据类型 first|after 属性名2;   --after 属性名2 参数指定 属性名1 插入在 属性名2之后

删除字段:alter table 表名 drop 字段名;

                 

 清空表:truncate 表名;  

tuncate和delete区别:

       truncate列的id也从建表时设置的起始id开始

       delete数据会清空,但是自增长列的id不会从起始id开始,可以回滚

 

 删除表:drop table 表名; 

 更改表的存储引擎:alter table 表名 engine=存储引擎名;

 

 insert插入记录

 为表的所有字段插入数据:insert into 表名 values(所有字段对应值,并按字段显示顺序插入);

 为表的指定字段插入数据:insert into 表名(属性列1,属性列2,...,属性列n) values (值1,值2,...,值n);

 同时插入多条数据:insert into 表名[(属性列)] values (取值列表1),(取值列表2)...,(取值列表n);

 将查询结果插入到表中:insert into 表名1(属性列1) select 属性列2 from 表名2 where 条件表达式;

 

复制表结构:create table score_new like score; -

备份表: create table score_bk as select * from score;-

 

 

 注:1.value和values区别:没有区别

     2.字符串:单双引号都可以

     3.不指定需要写全字段,包含自增长

     4.Mysql默认自动提交

     5.set  autocommit=0;---设置不自动提交

    

replace插入记录 

        replace into 表名[(字段列表)] values(值列表);

        replace [into] 目标表名[(字段列表1)] select (字段列表2) from 源表 where 条件表达式

        replace [into] 表名 set 字段1=值1,字段2=值2

insert和replace区别:replace向表插入新记录,如果新记录的主键值或者唯一性约束字段值与已有记录相同,则已有记录先删除,然后再插入新记录.

       

更新数据:

update 表名 set 属性名1=取值1,属性名2=取值2,...,属性名n=取值n where 条件表达式;

 

删除数据:

delete from 表名 [where条件表达式];

 

查询数据:

select 属性列表 from 表名和视图列表 [where 条件表达式1] [group by 属性名1 [having 条件表达式2]] [order by 属性名2 [asc |desc]]   ---asc:升序,默认升序  --desc降序

多表连查:join

     左连接:left join   --以左边表的数据匹配右边表中的数据,如果左边表中的数据在右边表中没有,会显示左边表中的数据

     右连接:right join   --以右边表的数据匹配左边表中的数据,如果右边表中的数据在左边表中没有,会显示右边表中的数据

     内连接:inner join  --显示匹配数据

带in关键字的查询:[not] in (元素1,,元素2,…,元素n)

Between and范围查询:[not] between 取值1 and 取值2

带like的字符匹配查询:[not] like '字符串'  ---%零个或多个字符组成的任意字符串   ---_任意一个字符

空值查询:is [not] null

        select * from ningxin where age is null or age=’’;---空字符串

查询结果剃重:distinct

限制查询条数:limit

      1.limit 5  前5行

      2.limit 1,5  从1行到5行

聚合函数:

        统计记录条数:count()

        字段的值总和:sum()

        字段的值平均值:avg()

        字段的最大值:max()

        字段的最小值:min()

       

合并结果集:

select 字段列表1 from table1

union [all]

select 字段列表2 from table2

注:字段列表1与字段列表2的字段个数必须相同,相同的数据类型。合并的新结果集字段名与字段列表1中字段名对应.

union与union all区别:

        union:会筛选掉select结果集中重复记录[结果集合并会对新产生的结果集进行排序,效率稍低]。

        union all:直接合并两个结果集,效率高于union.

Group by子句

select s.*,c.c_name from students s inner join new_score c on s.id=c.stu_id where c.stu_id in (Select c.stu_id from new_score c where c.c_name in ('英语','计算机') group by c.stu_id having count(c.stu_id)>=2);

子查询

update students set name='天才' where name in (select name from (select s.name from students s,new_score c where s.id=c.stu_id group by s.name having sum(c.grade)<100) a);

 

备份:mysqldump –uroot –p123456 data > data.sql  --非sql命令

恢复:mysql –uroot –p123456  data < data.sql     --非sql命令

 

索引

创建普通索引:

        create index 索引名称 on 表名(列)

        alter table 表名 add index 索引名称(列)

创建唯一索引:

        create unique index 索引名称 on 表名(列名)

        alter table 表名 add unique index 索引名称(列)

删除索引:drop index 索引名 on 表名;

 

视图

创建视图:create view 视图名称(视图列1,视图列2) as select

create view st_view_a  as select s.name,sum(c.grade)as sum_grade from students s,new_score c where s.id=c.stu_id group by s.name having sum(c.grade)>160;

create view st_view_b(class,c_name,grade,name,sex) as select s.class,c.c_name,c.grade,s.name,s.sex from students s,new_score c,st_view_a a where s.id=c.stu_id and s.name=a.name ;

 

查看视图:

     desc 视图名称;

     show table status;

     show create view 视图名称

     select * form 视图名称;

修改视图:

     create or replace view 视图名称 (列1,列2) as select语句

     alter view 视图名称(列1,列2) as select语句

删除视图:drop view [if exists] 视图名列表

 

存储过程

delimiter $;

create procedure 名称(参数列表)

begin

   sql语句块

end

$;

delimiter ;

 

if语句判断格式:

if 条件 then

    语句

elseif 条件 then

    语句

else

    语句

end if;

 

case条件判断格式:

case value

when 条件 then

sql语句

when 条件2 then

sql语句

else --上面条件都不满足执行

sql语句

end case

SELECT class,

SUM(CASE WHEN score>=60 THEN 1 ELSE 0 END) as 及格人数,

SUM(CASE WHEN score<60 THEN 1 ELSE 0 END) as 不及格人数

FROM tb1 GROUP BY class;

 

while循环格式:

while 条件 do

sql语句

end while;

delimiter $;

create procedure  add_students(s_count int)

begin

declare Name varchar(20);

declare class varchar(20);

declare i int;

set i=0;

set class= '乌索布' ;

while i<s_count do

set Name=CONCAT('宁欣',i);

insert into students(name,class) values(Name,class);

set i=i+1;

end while;

end

$;

delimiter ;

 

repeat循环格式:

repeat

sql语句

until 条件

end repeat;

delimiter $;

create procedure  add_score(s_count int)

begin

declare i int;

set i=0;

repeat

insert into new_Score (stu_id) values(i);

set i=i+1;

until i>s_count

end repeat;

end

$;

delimiter ;

 

查看存储过程

show status语句:show procedure status;

show create语句:show create procedure 存储过程名称;

posted @ 2016-09-21 20:40  寕寕  阅读(132)  评论(0编辑  收藏  举报