什么是MySQL 数据库?
M典MQLB公司开发的一个关系型数据库管理系统。通过它司以有效地组织和管理存储在数据库中的数据。MySQL 数据库可以称得上日前运行速度最快的SQL语言数据库。
MySQL 的优势
MySQL数据库是一款自由软件,任何人都可以从MySQL的官方网站下载该软件是一个真正的多用户、多线程的SQL数据库服务器。它是以客户机/服务券线经构实蔬,油一个服务器守护程序mysqld和很多不同的客户程序和库组成的。态能销关走、有效和安全地处理大量的数据。相对于 Oracle 等数据库来说,MySQI的使有还非常简单的。M:SQL主要目标是快捷、便捷和易用。
MySQL服务器的安装与配置
1、数据库:存储数据的仓库。
2、安装数据库;
- 解压mysql安装包
- 修改配置文件my.ini(basedir=设置为自己mysql安装的路径;datadir=设置为自己mysql安 装的路径\data)
- 初始化Mysql (mysqld --initialize)
- 获取初始化之后的Mysql登录密码(mysql安装目录下的DESKTOP-JA5S8TS.err文件中)
- 安装Mysql服务 (mysqld --install)
- 启动Mysql服务 (net start mysql)
- 使用初始化密码进行登录Mysql (mysql -uroot -p初始化密码)
- 修改数据加密规则(alter user 'root'@'localhost' identified by 'password' password expire never)
- 修改初始化密码(alter user 'root'@'localhost' identified with mysql_native_password by '新设置的密码')
- ctrl+z 关闭再重新用新密码进行登录
- 查询显示所有数据库信息 (show databases)
3、安装Navicat;注意:把破解文件复制到Navicat安装目录下
在创建数据库时,数据库命名有以下5项规则
- 不能与其他数据库重名,否则将发生错误。
- 名称可以由任意字母、阿拉伯数字、下划线( )和“$”组成,可以使用上述的任意字符开头,但不能使用单独的数字,否则会造成它与数值相混淆。
- 名称最长可为 64 个字符,而别名最多可长达 256 个字符。
- 不能使用MySQL关键字作为数据库名、表名
- 在默认情况下,Windows 下数据库名、表名的的大小写是不敏感的,而在 Linux 下数据库名、表名的大小写是敏感的。为了便于数据库在平台台间进行移植,建议读者采用小写来定义数据库名和表名。
MySQL数据类型
MySQL支持所有的ANSI/ISO SQL 92 数字类型。这些类型包括准确数字的数
据类型(NUMERIC、DECIMAL、INTEGER和SMALI INT),还包括近似数字的数据类型(FLOAT、REAL和 DOUBLE PRECISION)。 其中的关键词INT是INTEGER的同义词,关键词DEC 是 DECIMAL 的同义词。
数字类型总体可以分成整型和浮点型两类。
1.整数数据类型
2.浮点数据类型
在创建表时,使用哪种数字类型,应遵循盾以下原则。
- (1)选择最小的可用类型,如果值永远不超过 127,则使用 TINYINT 比INT强。
- (2)对于完全都是数字的,可以选择整类数类型。
- (3)浮点类型用于可能具有小数部分的数。如货物单价、网上购物交付金额等。
3.字符串类型
在创建表时,使用字符串类型型时应遵循以下原则。
- (1)从速度方面考虑,要选译固定的列,可以使用 CHAR 类型。
- (2)要节省空间,使用动态的列,可以使用 VARCHAR 类型。
- (3)要将列中的内容限制在一种选择,可以使用 ENUM 类型。
- (4)允许在一个列中有多于一个的条目,可以使用 SET 类型。
- (5)如果要搜索的内容不区分大小写,可以使用TEXT 类型。
- (6)如果要搜索的内容区分大小写,可以使用 BLOB 类型。
4.日期和时间数据类型
日期和时间类型包括:DATETIN ME DATE TIMESTAMP、TIME和 YEAR。其中的每种类型都有其取值的范围,3如赋予它一个不合法的值,将会被“0”代替。
安装 phpStudy和Navicat
1. 创建数据库
create database 自定义的名字;
-- 判断数据库存在就删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
#设置数据的视图---使用数据库
use mydb;
2. 创建表
create table 自定义的表名(
列名1 数据类型 [完整性约束条件],
列名2 数据类型 [完整性约束条件],
……
列名n 数据类型 [完整性约束条件],
)
#判断表存在就删除表
drop table if exists student;
#创建表
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50)
);
约束条件
- 主键约束 primary key 不能为空 不能重复
- 自增 auto_increment
- 非空约束 not null
- 唯一约束 unique 可以为空 不能重复
- 默认约束 default
- 外键约束 foreign key (本表列名) references 外表(外表列名),注意设置表的搜索引擎 ENGINE=InnoDB
3. 录入数据
第一种格式:insert into 表名(字段名1,字段名2,....字段名n) values(值1,值2,....值n)
insert into student VALUES
(101,'林彬','男',21,'郑州'),
(102,'小桃红','女',20,'开封'),
(103,'孙悟空','男',18,null);
第二种格式:默认录入所有的字段 insert into 表名 values(值1,值2,....值n)
#插入测试数据
insert into student(stuName,stuSex,stuAge,stuAddr) values ('张三','男',20,'河南');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('小美','女',18,'山东');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Rose','女',19,'美国');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Jack','男',21,'英国');
注意:
- 1.字段名和值的个数要一样
- 2. 数值类型不需要加'',字符串用''
- 3. 必须录入不能为空的数据
4. 修改数据:update 表名 set 字段名1=值1,....字段名n=值n [where 条件表达式]
-- 1. 将班级编号是151104 的班级名称修改为jsp班
update class set classname='jsp班' where classno='151104';
-- 2. 将姓名为张晶晶的学生年龄修改为25岁,语文成绩修改为83
update student set age=25,chinese=83 where stuname='张晶晶';
-- 15. 将学生表中所有年龄小于18岁的男生年龄修改为18岁
update student set age=18 where age<18 and sex='男';
5. 删除数据:delete from 表名 [where 条件表达式]
delete from student;
-- 14. 删除学生表中年龄为18岁的男学生。
delete from student where age=18 and sex='男';
6. 查询数据:select 字段名1,字段名2,....字段名n from 表名
查询所有的字段 用*代替 起别名 as
-- 3. 查询表中所有学生的信息
select * from student;
-- 4. 查询表中所有学生的姓名和对应的英语成绩 英语成绩用别名英语展示
select stuname, english as'英语' from student;
-- 5. 查询英语分数在 80-90之间的学生信息
select * from student where english between 80 and 90;
-- 6. 显示年龄小于18岁或大于20岁的学生信息
select *from student where age<18 or age>20;
6.1 过滤条件
1.>、 < 、 =、 <>(不等于) >= 、<= (between and):在XXXX区间
2. 多条件查询 and :且 or:或者
3. 模糊查询 like
- %: 0或多个
- 张%:获取姓张(以张开头)
- %张%:获取包含张的
- %张:获取以张结尾的
- _:占位符
- 张_ :两个字符的名字 第一个字为张
-- 9. 查询名字当中第二个字为‘小’的学生信息
select * from student where stuname like '%小%';
-- 10. 查询家庭住址在洛阳并且性别为女的学生信息
select * from student where address='洛阳' and sex='女';
6.2 排序
order by 字段名 asc|desc (升序|降序)
select * from 表名 [where 条件] order by 字段名 asc|desc
-- 7. 根据语文成绩从大到小排序显示前10个的学生信息
select * from student order by chinese desc limit 0,10;
6.3 限制获取的条数
limit a,b 从a条数据之后开始获取,获取b条数据
6.4 聚合函数
select count(1)| min(字段名)|max(字段名)|avg(字段名)|sum(字段名) from 表名
汇总 最小 最大 平均 求和
-- 11. 查询学生的英语的平均成绩,及最高成绩
select avg(english),max(english) from student;
-- 12. 统计学生表每个班级的总人数,输出班级编号和班级人数。
select classno,count(1) from student group by classno;
-- 13. 统计学生表,根据性别输出性别和人数
select sex,count(1) from student group by sex;
6.5 分组 group by
select 字段名,聚合函数 from 表名 group by 字段名;
分组一般和聚合函数一起使用 查询的结果只能是聚合函数或者分组的列名
--创建数据库
CREATE DATABASE keDB character set utf8;
CREATE TABLE class (
Classno CHAR (8) NOT NULL PRIMARY KEY,
classname CHAR (20) NOT NULL UNIQUE,
number INT
)engine=innodb;
CREATE TABLE student (
Stuno INT PRIMARY KEY auto_increment,
stuname CHAR (8) NOT NULL,
sex CHAR (2),
age INT,
address VARCHAR (30) default '南阳',
english int check(english >=0 and english <=100),
chinese int check(chinese >=0 and chinese <=100),
classno CHAR (8) NOT NULL,
FOREIGN KEY (classno) REFERENCES class (classno)
) auto_increment = 101,engine=innodb;
-- 1. 将班级编号是151104 的班级名称修改为jsp班
update class set classname='jsp' where classno='151104';
-- 2. 将姓名为张晶晶的学生年龄修改为25岁,语文成绩修改为83
update student set age=25,chinese = 83 where stuname ='张晶晶';
-- 3. 查询表中所有学生的信息
select * from student ;
-- 4. 查询表中所有学生的姓名和对应的英语成绩 英语成绩用别名英语展示
select stuname,english as 英语 from student;
-- 5. 查询英语分数在 80-90之间的学生信息
select * from student where english between 80 and 90;
-- 6. 显示年龄小于18岁或大于20岁的学生信息
select * from student where age>18 or age<20
-- 7.根据语文成绩从大到小排序显示前10个的学生信息
select * from student order by chinese desc limit 0,10;
-- 8.查询所有姓李的学生英语成绩
select english from student where stuname like '李%';
-- 9. 查询名字当中第二个字为‘小’的学生信息
select * from student where stuneme like '_小%';
-- 10.查询家庭住址在洛阳并且性别为女的学生信息
select * from student where address='洛阳'and sex='女';
-- 11. 查询学生的英语的平均成绩,及最高成绩
select avg(english),max(english) from student ;
-- 12.统计学生表每个班级的总人数,输出班级编号和班级人数
select classno ,count(*) from student group by classno
-- 13.统计学生表,根据性别输出性别和人数
select sex ,count(*) from student group by sex
-- 14.删除学生表中年龄为18岁的男学生
delete from student where age=18 and sex='男';
-- 15.将学生表中所有年龄小于18岁的男生年龄修改为18岁
update student set age=18 where age<18;
-- 16.查询每个学生的信息及班级名称
select s.*,c.classname from student as s
left join class as c on s.classno= c.Classno
7. 多表查询
1. 交叉连接 select * from A,B where A.字段名 =B.字段名
2. 内连接 select * from A inner join B on A.字段名 =B.字段名 [where 条件表达式]
3. 外连接分为
左连接 left join 左边表(A表)全部以及两个表内连接的数据
select * from A left join B on A.字段名 =B.字段名 [where 条件表达式]
和右连接 right join 右边表(B表)全部以及两个表内连接的数据
select * from A right join B on A.字段名 =B.字段名 [where 条件表达式]
create table teacher(
id int primary key auto_increment,
name varchar(32) not null ,
description varchar(1024)
);
create table student1 (
id int primary key auto_increment,
name varchar(32) not null,
sex varchar(8) not null,
teacher_id int ,
age int not null
);
INSERT INTO teacher (name,description)VALUES("张老师","教语文的");
INSERT INTO teacher (name,description) VALUES("王老师","教数学的");
INSERT INTO teacher (name,description)VALUES("范老师","教英语的");
INSERT INTO teacher (name,description) VALUES("赵老师","教体育的");
INSERT INTO student1 (name,sex, teacher_id,age) VALUES("张三",'男',1,35);
INSERT INTO student1 (name,sex, teacher_id,age)VALUES("李四","男",2,20);
INSERT INTO student1 (name,sex, teacher_id,age)VALUES("小红","女",2,22);
INSERT INTO student1 (name,sex, teacher_id,age)VALUES("小明","男",2,21);
INSERT INTO student1 (name,sex, teacher_id,age)VALUES("笑笑","女",2,18);
INSERT INTO student1 (name,sex, teacher_id,age)VALUES("赵六","女",3,36);
INSERT INTO student1 (name,sex, age)VALUES("张三","男",19);
INSERT INTO student1 (name,sex, age)VALUES("王五","男",18);
-- 交叉连接
select * from student1 as s,teacher as t where s.teacher_id=t.id;
-- 内连接 select * from A inner join B on A.字段名=B.字段名
select * from teacher inner join student1 on student1.teacher_id=teacher.id;
-- 外连接的左连接
select * from teacher left join student1 on student1.teacher_id=teacher.id;
-- 外连接的右连接
select * from teacher right join student1 on student1.teacher_id=teacher.id;
8. 创建视图
create view 自定义的视图名称 as +sql语句
创建观图自定义的视图名称as+sq1语句create VieW
create view teacherXinxi as
SELECT
teachername as tname
teacher.description,
student1. name as sname r
student1.age
FROM
teacher
LEFT JOIN student1 ON studentl.teacher id = teacher.id
查看视图
select *from teacherXinxi order by age;
代码示例
#设置数据的视图---使用数据库
use mydb;
#判断表存在就删除表
drop table if exists student;
#创建表
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50)
);
#插入测试数据
insert into student(stuName,stuSex,stuAge,stuAddr) values ('张三','男',20,'河南');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('小美','女',18,'山东');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Rose','女',19,'美国');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Jack','男',21,'英国');
#查询数据表
select * from student;
#根据id查询数据
#删除数据
delete from student where stuName ="李四";
#修改数据
update student set stuName="王五" where stuId=1;
#模糊查询
select * from student where stuName like '%o%';
枚举类型
MySQL 枚举类型如何定义比较好 tinyint?enum?varchar?_mysql中枚举类型符号_羁士的博客-CSDN博客