目录
一:MySql的简介
二:MySql的启动
三:MySql的基本操作以及实例代码
一:MySql的简介:
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
二:MySql的启动:
如果不可以启动,可以这样做,然后再试试:
三:数据库基本操作以及代码示例(以下操作我在命令提示符中完成,SQLyog和navicat代码一致):
一:表的建立以及基本增删改查操作.
1.1:先修改字符集编码:Alter table 表名 charset=UTF-8;
1.2:创建数据库:create database 数据库的名字;
create database practice;
1.3:创建好之后进行查看数据库:
show databases;
2.1创建表:ceate table 表名();
create table student(id int comment '学号',name char(20),adress char(20));
2.2修改表名:alter table 老表名 to 新表名;
alter table student to my_student;
2.3创建完表之后查看表的结构看是否和我们所需要的一致:desc 表名;
desc student;
2.4创建好之后进行插入需要的数据:insert into 表名 values(值列表);
insert into student values(20170003,'小陈','西安');
2.5查看下我们刚才插入的数据:select *from 表名;
select *from student;
2.6修改表的数据(将姓名修改成小王):update 表名 set 字段=值[where 条件] ;
update student set name='小王' where id =20170003;
2.8重命名字段:alter table 表名 change 旧字段 新字段名 数据类型[属性][位置];
alter table student change id id1 int;
2.9删除数据:delete from 表名[where 条件];
delete from student where id=20170003;
2.10删除表:drop 表名;
drop student;
二:主键,自增长,唯一键的介绍。
3.1:主键:primary key,主要的键,一张表只能有一个字段可以使用对应的键,用来唯一的约束字段里面的数据,不能重复,这种键称之为主键, 一张表只能最多一个主键增加主键。
3.2:在创建表的时候,直接在字段之后添加primary key 关键字
create table my_pri1(name varchar(20) not null comment '姓名',number char(10) primary key comment '学号:idcast+0000');
--并且添加数据:
insert into my_pri1 values('小陈','idcast0001');
3.3:添加复合主键:
create table my_pri2(number char(10) comment '学号:idcast0000',course char(10) comment '课程代码:3901+0000',score tinyint unsigned default 60 comment '成绩');
追加主键:
alter table my_pri2 add primary key(number course);
3.4;更新主键,删除主键(没有办法更新主键,主键必须先删除才能增加):
alter table 表名 drop primary key;
alter table my_pri1 drop primary key;
3.5自动增长:当对应的字段,不给值,躲着说给默认值,或者给NULL的时候,会自动给的被系统触发,系统会从当前字段中已有的最大值再进行+1操作,得到一个新的不同的字段自增长通常是跟主键搭配自增长特点;auto_increment1:任何一个字段要做自增长必须前提是一个索引(key 一栏有值)2:自增长字段必须是数字(整形)3:一张表最多只能有一个自增长。
3.6创建自增长的表:
create table my_auto(id int(1) primary key auto_increment,name varchar(10) not null);
--当给定自增长时,给定的值为NULL或者默认值的时候会触发自动增长
--插入数据
insert into my_auto values(null,'王一');
insert into my_auto values(default,'王二');
3.7:修改自增长: 自增长如果涉及字段该表,必须先删除自增长,后增加(一张表只能有一个自增长) 修改当前自增长已经存在的值,修改只能比当前已有的自增长的最大值大,不能小,小不生效。
alter table my_auto auto_increment=值;
--自增长时字段一个属性,可以通过mmodify来进行修改(保证字段没有auto_increment即可)
alter table 表名 modify 字段 类型;
3.8:增加唯一键:在创建表的时候字段之后跟上unique/unique key
例如:
create table my_unique1(number char(10) unique comment'学号',name varchar(20) not null);
3.10:在创建表之后添加唯一键
例如:
create table my_unique2(number char(10) comment'学号',name varchar(20) not null,unique key(number));
3.11:更新唯一键,先删除后增加(唯一键可以有多个。可以不删除)
格式:alter table 表名 drop index 索引名字;--唯一键默认使用字段名作为索引名字
3.12:唯一键与主键的区别:唯一键和主键的本质区别时唯一键默认允许为空,而且时多个为空。
三:主键冲突,蠕虫复制,select选项,where子句示例代码介绍。
4.1:当主键存在冲突的时候(Duplicate key),可以选择性的进行处理,更新和替换。
更新操作:insert into 表名[(字段列表:包含主键)]values(值列表) on duplicate key update 字段=新值;
insert into my_pri1 values('王二','idcast0002')on duplicate key update number='idcast0002';
--表在之前已经建好了
4.2:主键冲突:替换replace into 表名[(字段列表:包含主键)] values(值列表);
replace into my_pri1 values('王二','idcast0002');
4.3:蠕虫复制:从已有的数据中去获取数据,然后将数据又进行新增操作,数据成倍的增加
例如:insert into 表名[(字段列表)] select 字段列表*from 数据表名
4.4:select 选项
ALL:默认的,保留所有的结果
例如:
select *from my_pri1;
select all *from my_pri1;
4.5:去重(distinct) 查出来的结果,将重复给去除(所有字段相同)
例如:
select distinct *from my_pri1;
4.6:字段别名:select id as i,name as a,adress as as from stuent;--为了减少代码的书写量
4.7:where子句:用于判断数据,筛选数据,where子句返回结果:0或者1,0代表false,1代表true;
判断条件:>,<,>=,<=,!=,<>,like,between and,in ,not int
4.8:查找学生表中id为20170001,20170002,20170003的学生
select *from student where id=20170001||id=20170002||id=20170003;
或者:
select *from student where id in(20170001,20170003);--落在集合里
四:group by,having,limit子句
5.1group by:分组的意思,根据某个字段进行分组(相同的放一组,不同的分到不同的组)基本语法:group by 字段名;
--给表student增加sex字段
alter table student add column sex varchar(2);
--例如:
select *from student group by sex;
5.2:多字段分组:先根据一个字段进行分组没然后再对分组的结果再次按照其他字段进行分组.
例如:
select id sex count(*) from student group by id,sex;
5.3:有一个函数可以对分组的结果中的某个字段进行字符串连接(保留改组所有的某个字段)group_concat(字段);
select id,sex,count(*),group_concat(name) from student group by id,sex;
5.4:Having 子句:Where 是针对磁盘数据进行判断,进入到内存之后,会进行分组操作,分组结果就需要having来处理 ,Having 能做where能做的几乎所有事情,但where却不能做having能做的很多事情 ,分组统计的结果或者说统计函数都只有having能够使用
例如:求出所有班级人数大于等于2的学生人数
select id count(*) from student group by id having count(*)>=2;
5.5:模糊查询:
格式:select name as a ,number as i from student having a like '陈%';
5.6:排序:order by:排序,根据某个字段进行升序或者降序排序,依赖校对集,语法:order by 字段名 [asc|desc],asc时升序,desc时降序。
例如:select *from student order by id;
5.7:limit 子句:limit只能用来限制数量:limit 数据量
例如:select *from student limit 2;--查找前两个学生
五:增加外键,交叉连接示例代码。
6.1:外键:foreign key,外面的键(键不在自己表中):如果一张表中有一个字段(非主键)指向另外一张表的主键,那么该字段称之为主键增加外键,外键可以在创建表的时候或者创建表之后增加(但要考虑数据的问题)创建表的时候增加外键:在所有的表字段之后,使用foreign key(外键字段)references 外部表(主键字段)。
6.2:外键的作用:可以使得两张表关联,保证数据的一致性和实现一些级联操作。那么保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值!可以使得两张表关联,保证数据的一致性和实现一些级联操作。
6.3:例如:创建外键:
create table my_foreign2(id int primary key auto_increment,name varchar(20) not null comment '学生姓名',c_id int comment '班级id');
6.4:在新增表之后增加外键:修改表结构。 语法:Alter table 表名 add[constraint 外键名字]foreign key(外键字段)references 父表 (主键字段);
alter table my_foreign1 add constraint student_class1 foreign key (c_id)references class(id);
6.5修改外键&删除外键
外键不可以修改,只能先删除后新增
语法:Alter table 表名 drop foreign key 外键名;一张表可以有多个外键,但名字不能相同,外键删除不能通过查看表结构体现,应该通过查看表创建语句查看
alter table my_foreign2 drop foreign key student_class1;
show create table my_foreign1;--查看创建语句查看
6.6:外键条件
1:外键要存在,首先必须保证表的存储引擎是innodb(默认的存储引擎):如果不是innodb存储引擎,那么外键可以创建成功,但是没有约束效果
2:外键字段类型(列类型)必须与父表的主键类型完全一致
3:一张表中的外键名字不能重复
4:增加外键的字段(数据已经存在),必须保证数据与父表主键要求对应,对父表的约束:父表数据进行写操作(删除和修改都必须涉及到主键本身),如果对应的主键在子表中已经被数据所引用,那么就不允许操作
6.7:创建表之后增加外键:
alter table my_foreign2 add constraint student_class2 foreign key(c_id)references class(id);
6.8:删除外键:(删除的时外键的名字)
alter table class drop foreign key student_class1;
6.9:外键约束:所谓的外键约束:就是值外键的作用,外键约束又三种约束模式:都是针对父表的约束
District:严格模式(默认的),父表不能删除或者更新一个已经被子表数据引用的记录
Cascade:级联模式:父表的操作,对应子表关联的数据也跟着被删除
Set null:置空模式:父表的操作之后,子表对应的数据(外键字段)被置空
通常的一个合理的做法(约束模式);删除的时候子表置空,更新的时候子表级联操作
例如:
create table my_foreign3(id int primary key auto_increment,name varchar(20)not null,c_id int,foreign key(c_id)references class(id)on delete set null on update cascade);
6.10:交叉连接:从一张表中循环取出每一条记录,每条记录都去另外一张表进行匹配:匹配一定保留(没有条件匹配),而连接本身字段就会增加(保留),最终形成的结果叫做:笛卡儿积。
基本语法:左表 cross join 右表;===from 左表,右
--交叉链接:select * from student cross join class;
6.11:内连接:[inner]join,从左表中取出每一条记录,取右表与所有记录进行匹配:匹配必须是某个条件在左表中与右表中相同最终才会保留,否则不保留
2:基本语法
左表[inner]join 右表 on 左表.字段=右表.字段;on表示连接条件:条件字段就是代表相同的业务含义(如:student.id和class.id)
例如:
select *from student inner join class on student.id=class.id;
字段别名以及表名的使用:在查询数据的时候,不同表有同名字段,这个时候需要加上表名才能区分,而表名太长,通常额可以使用别名,内连接还可以使用where代替on关键字(where没有on效率高)
6.12:外连接:outer join,以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留:能匹配,正确保留,不能匹配,其他表的字段都置为NULL
外连接分为两种:是以某张表为主:有主表
Left join:左外连接(左连接),以左表为主表
Right join:右外连接(右连接),以右表为主表
语法:左表left/right join 右表 on 左表.字段=右表.字段;
例如:左连接
select s.*,c.name as c_name,c.room from student as s left join class as c on s.id=c.id;