MySQL上

MySQL
1.MySQL概述
数据库:存储数据的仓库
数据库的分类:层次是数据库,网络是数据库,关系型数据库
关系型数据库:利用表来存储数据,用表和表之间的关系存储数据之间的关系
常见的关系型数据库:
Sqlserver
MySQL
Oracle
MySQL介绍
MySQL由瑞典MySQL AB公司开发的产品,目前属于Oracle
MySQL安装:笔记
登录MySQL:mysql -uroot -proot
基本操作命令
登录:mysql -uroot -proot -h ip
-u:后面是用户名
-p:后面是密码
-h:后面是IP,如果是本机,可以省略
退出:quit或者exit
数据库相关概念
库:在一个mysql服务器中可以创建多个数据库
表:在一个数据库中可以创建多张表
表记录:一张表中可以有多条表记录
2.SQL语言
概述:SQL值结构化查询语言,是操作关系型数据库的通用语言
SQL是一个标准,各大数据库厂商都要根据该标准提供实现,实现过程中,数据库厂商为了增强数据库的功能,会添加一些非标准的SQL,称之为“方言”
SQL能干什么
对库进行CRUD
对表进行CRUD
对表记录进行CRUD
CRUD:create,read,update,delete

3.库的CRUD
(1)创建数据库
语法:create database [if not exists]db_name[character set utf8];
练习:创建一个名称为mydb1的数据库create database mydb1;
创建一个名称为mydb2,字符集为gbk的数据库
create database mydb2 character set gbk;
(2)查看数据库
显示所有的数据库
show databases;
显示数据库的创建语句
show create database db_name;
练习:查看所有的数据库show databases;
查看mydb2的建库语句show create database mydb2;
(3)修改数据库
数据库的名称无法修改
修改字符集
alter database db_name character set utf8;
练习:将mydb2的字符集修改为utf8
alter database mydb2 character set utf8;
(4)删除数据库
语法:drop database db_name;
练习:删除mudb2数据库
drop database mydb2;
(5)选择数据库
选择数据库:use da_name;
查询当前使用的数据库:select database();
练习:
使用mydb1数据库
use mydb1;
4.表的CRUD
(1)数据类型
字符串
Char(n):定长字符串,最大长度不超n,n最大值可取255,效率高通常用来存储固定长度的字符串.例如:身份证号,手机号等
Varchar(n):不定长字符串,最大长度不超n,n最大值可取65535,节省空间,通常用来存储不定长的字符串:例如,姓名,昵称等
数值类型
tinyint:byte
smallint:short
int:int
bigint:long
float:float
double:double
大数据类型
Blob:大二进制类型,如图片,音频,视频等,最大4gb
Text:大文本来行,最大4gb
注意:text为MySQL的方言,在其他数据库中为clob
日期类型:
date:日期 2008-8-8
time:事件 20:0:0
datetime:日期时间 2008-8-8 20:0:0
timestamp:时间戳 2008-8-8 20:0:0 存的是1970年1月1日到当前时间的毫秒值
逻辑值
bit:只能去0/1
(2)字段约束
主键约束:被约束的字段非空且唯一
field_name data_type primary key
自动增长:field_name data_type primary key auto_increment
非空:not null
唯一:unique
(3)表的创建
语法:
Create table table_name(
field_name1 date_type,
field_name2 date_type,

)
练习:创建一个员工表employee,字段如下:
id 整型
name 字符型
gender 字符型
birthday 日期型
entry_date 入职日期
job 字符型
salary 浮点型
resume 大文本型
 
create table employee(
id int,
name varchar(20),
gender char(1),
birthday date,
entry_date date,
job varchar(20),
salary double,
resume text
);
create table employee2(
id int primary key auto_increment,
name varchar(20) unique,
gender char(1) not null,
birthday date,
entry_date date,
job varchar(20),
salary double,
resume text
);

(4)查看表
查看所有的表 show tables;
查看表结构 desc table_name;
查看表的创建语句 show creatte table table_name;
(5)修改表
在employee表上添加一个image列
alter table employee add image blob;
修改job列的数据类型,长度变成50
alter table employee modify job varchar(50);
删除gender列
alter table employee drop gender;
修改表名为user
alter table employee rename to user;
rename table user to employee;
修改列名name为username
alter table employee change name username varchar(66);
将image插入到id的后面
alter table employee modify image blob after id;
修改表的字符集
alter table employee character set gbk;
(6)删除表
Drop table table_name;

5.表记录的CRUD
(1)insert
语法:insert into table_name(field_name1,field_name2,…)values(value1,value2,…);
注意:
插入数据的数据一定要和字段的数据类型一致
数据的长度要在规定范围内
前面指定字段名的顺序需要和后面value值的顺序一致
字符串类型和日期类型需要用单引号引起来
如果插入的数据包含了所有的字段,前面可以不指定字段名
练习:
向employee2中插入3条数据
insert into employee2(id,name,gender,birthday,entry_date,job,salary,resume) values(null,‘tom’,‘m’,‘2008-8-8’,‘2020-8-8’,‘student’,88.8,‘good student’);
 
insert into employee2 values(null,‘rose’,‘w’,‘2000-1-1’,‘2020-2-2’,‘teacher’,3000,‘good teacher’);
 
insert into employee2(id,name,gender,salary) values(null,‘jerry’,‘m’,5000);
 
insert into employee2 values(null,‘张三’,‘男’,‘2000-1-1’,‘2020-2-2’,‘程序员’,6000,‘java程序员’);
中文乱码问题

原因:cmd窗口使用的编码为gbk,而MySQL服务器使用的编码为utf-8,两端编码不一致
 
解决乱码:
方式一:set names gbk; 只在当前窗口有效,通知服务器用哪种编码读取数据
方式二:修改MySQL的配置文件,修改[mysql]/my.ini的第57行,将utf8改为gbk,永久生效

(2)update
语法:update table_name set field_name=value where…
练习:将所有员工的工资改为1000
update employee2 set salary=1000;
将张三的工资在原有的基础上增加1000;
update employee2 set salary=salary+1000 where name=‘张三’;

(3)delete
语法:
delete from table_name where…
练习:
删除张三
delete fromemployee2 where name=’张三’;
删除所有数据
delete from employee2;
(4)select
基本查询
语法:select [distinct]*|field_name1,field_name2,…from table table_name;
distinct:表示去重
练习:
准备数据
create table exam(
id int primary key auto_increment,
name varchar(20) not null,
chinese double,
math double,
english double
);
insert into exam values(null,‘关羽’,85,76,70);
insert into exam values(null,‘张飞’,70,75,70);
insert into exam values(null,‘赵云’,90,65,95);
insert into exam values(null,‘张三丰’,85,79,null);
 
查询所有学生的姓名和语文成绩
select name,chinese from exam;
查询所有学生的语文成绩,并去重
select distinct chinese from exam;
在所有成绩基础上加10分显示
select name,chinese+10,math+10,english+10 from exam;
null和任何值相加都是null,可以利用函数:ifnull(english,0)
select name,chinese+10,math+10,ifnull(english,0)+10 from exam;
查询每个学生的总分
select name,chinese+math+ifnull(english,0) from exam;
添加列别名
select name,chinese+math+ifnull(english,0) 总分 from exam;
where子句查询
语法:
select *|field_name1,field_name2,… from table_name where…;
练习:
查询id=3的学生信息
select * from exam where id=3;
查询英语成绩大于90分的学生
select * from exam where english>90;
查询总分大于230的同学
select name,chinese+math+ifnull(english,0) 总分 from exam where chinese+math+ifnull(english,0)>230;
查询语文分数在80-100之间的同学
select * from exam where chinese>80 and chinese<100;
select * from exam where chinese between 80 and 100;
查询数学分数为75、77、79的同学,再查询不在这个范围的同学
select * from exam where math=75 or math=77 or math=79;
select * from exam where math in(75,77,79);
 
select * from exam where !(math=75 or math=77 or math=79);
select * from exam where math not in(75,77,79);
查询语文大于80,数学大于70分的同学
select * from exam where chinese>80 and math>70;
查询所有姓张的学生成绩
模糊查询:like
特殊符号:
%:匹配0个或者多个字符
:匹配1个字符
where salary like ‘200%’ 以200开头的数字
where salary like ‘%200%’ 数字中包含200即可
where salary like '00%’ 数字的第二位和第三位为0
where salary like '2
%
%’ 数字以2开头,并至少3位数
where salary like ‘%2’ 以2结尾的数字
where salary like ‘_2%3’ 第二位为2,以3结尾的数字
where salary like ‘2___3’ 以2开头,以3结尾的五位数
 
select * from exam where name like ‘张%’;
查询数学成绩带6的
select * from exam where math like ‘%6%’;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值