MySQL数据库的介绍及其基本操作

一:数据库介绍
概念:顾名思义,是存放数据的仓库。严格来讲,数据库指长期储存在计算机内、结构化、有组织、可共享的大量数据的集合。
特点:数据按一定的数据模型组织、描述和储存,有较小的冗余度 (redundancy)、较高的数据独立性 (data independency) 和易扩展性 (scalability),并可以为多个用户共享(永久储存、有组织、可共享)。
二:数据库的操作
1.创建一个数据库指令
create database 数据库名;
结果:这里写图片描述
2.切换库
use 数据库名;
3.显示所有的数据库
show databases;
结果:这里写图片描述
4.新建一个表
语句格式:create table 表名(
列名1 类型 约束,
列名2 类型 约束,
列名3 类型 约束,

列名n 类型 约束,
约束
);
举例:
create table student(
sid int primary key,
sname varchar(20),
sex varchar(1)
);
结果:这里写图片描述
5.查看表的结构
格式:desc 表名;
举例:这里写图片描述
6.给表插入数据
格式:insert into 表名(列名1,列名2, 列名3,…,列名n)values(值1,值2, 值3,…,值n);
举例:insert into student (sid,sname,sex) values(1,’张三’,’男’);
结果:这里写图片描述
7.数据库的数据类型
整数类型
int -2^31 ~ 2^31-1 四个字节
tinyint 一个字节
smallint 两个字节
bigint 八个字节
小数类型
浮点类型
FLOAT
DOUBLE
定点类型 (小数部分不会丢失精度,占用空间高)
DECIMAL(p, s)
p 有效数字长度
s 小数位数

decimal(10, 2)
12345678.77 ok
123456789.44 存不下
12345678.456 小数部分变为46

字符串类型
char(最大长度) 定长的字符类型
varchar(最大长度) 变长的字符类型

name char(5) ‘abc’ 存储后 ‘abc ’ 用空格补齐不足的部分, 再查询时会去掉, 效率高,但占用空间多, 最大值255
name varchar(5) ‘abc’ 存储后 ‘abc’ 不会用空格补齐 , 不会占用额外空间, 效率较char低, 最大值65535

日期类型
datetime 包括年月日,时分秒 时间范围短(1000-1-1 ~ 9999-12-31)
date 只包括年月日
time 只包括时分秒
timestamp 也可以包括年月日时分秒, 时间范围短(1970-1-1 ~ 2038-1-19)
8.约束
约束主要有以下几种的约束
primary key 主键约束(既可以保证列的值的唯一又可以保证非空,主键在一个表中只能只有一个)
foreign key 外键约束(检查两表的列之间的关系是否合法,被引用的的列必须是唯一的)
not null 非空约束(列的值不能为null)
unique 唯一约束(列的值是唯一的)
约束的位置有两种
(1)列的数据类型的后面
(2)约束单独一行
举例
(1)create table student(
id int primary key, /主键约束,约束可以放在数据类型的后面/
sname varchar(20) not null,
sex varchar(1) not null
);
(2)create table sc(
cid int ,
sname varchar(20),
primary key(cid),/主键约束单独写一行/
foreign key(sname) references to student(sname)/外键约束可以单独写一行/
);
9.删除一个表
格式:drop table 表名;
10.自增列
自增列就是主要用来给主键产生一个自增长的值(注意在使用自增长之后就不能给主键赋值,否则手动赋值会覆盖应该出现的值)
auto_increment
举例:create table student(
id int primary key auto_increment,
sname varchar(20),
sex varchar(1)
) ;/主键的值自动从1开始累加/
若要让主键从规定的值来开始增加,格式如下
auto_increment
举例:create table student(
id int primary key auto_increment,
sname varchar(20),
sex varchar(1)
) auto_increment=100;/主键就会从100开始自增/
默认值
格式:
列名 数据类型 default 值
11. 修改表中的列的数据
语句的格式
update 表 set 列名=新值, 列2=值2 …; – 修改表中所有的行
update 表 set 列名=新值, 列2=值2 … where 列名=条件; – 仅更新符合条件的记录
举例
update course set cname=’java se’; – 修改表中所有课程名称
update course set cname=’spring’ where cid=1000; – 仅修改了cid=1000 这条记录的课程名称
12. 删除操作
一般的格式:delete from 表名 where..;
delete from 表名; – 删除这个表中所有记录,但表的定义不动
delete from 表名 where 列名=条件; – 仅删除符合条件的记录
drop table 表名; – 删除这个表,连同里面的数据
13. 导入数据
1) 可以用
mysql > source 路径\sql文件的名称;
例如: source C:\Users\Administrator\Desktop\第二十五天\scott.sql
2) 在cmd窗口运行
mysql -uroot -p test3 < C:\Users\Administrator\Desktop\第二十五天\scott.sql
其中test3是数据库的名字
14. 导出数据
在cmd窗口运行
mysqldump -uroot -p test3 > a.sql

二:SQL的结构化的查询语言

1) DDL 数据定义语言
create 创建表、视图、索引…
drop 删除表、视图、索引…
alter 修改表
truncate 截断

2) DML 数据操控语言 (**)
insert 插入数据
update 修改数据
delete 删除数据
select 查询数据

3) DCL 数据控制语言
grant 授权
revoke 回收授权

4) TCL 事务控制语言 transaction control
start transaction 开始事务(begin)
commit
rollback

三:DDL

1.DDL
1 组合主键
unique 唯一
not null 非空
primary key 主键 (只要有一个)
foreign key 外键 (需要引用另一个表的主键或唯一列)

|     1001 | 张三     |        1 | 企业管理 |   50 |
|     1001 | 张三     |        1 | 企业管理 |   90 |  非法记录
|     1001 | 张三     |        2 | 马克思   |   70 |
|     1003 | 王五     |        2 | 马克思   |   70 |

1001 + 1
1001 + 1 非法
1001 + 2 
1003 + 2

create table sc(

primary key (sid, cid) /组(复)合/
);
2.修改
给student增加一列age :alter table student add age tinyint;
增加student的列的sname的长度到30 :alter table student modify sname varchar(30);
3.truncate 截断
delete from 表; – 如果和事务sql结合使用,是有机会恢复
truncate table 表; – 没法和事务结合,不能恢复,效率更高

四:DML

1.插入语法
格式 : insert into 表名 (列名1,列名2,列名3,…列名n) values(值1,值2 ,值3,…值n);
MySQL当中有特有的插入多个值的语法:
insert into 表名 (列明1,列名2,列名3,…列名n) values(值1,值2 ,值3,…值n),(值1,值2 ,值3,…值n),(值1,值2 ,值3,…值n),(值1,值2 ,值3,…值n)…,(值1,值2 ,值3,…值n);
例如:
insert into student values(null,’张三’,’1990-10-10’,’男’),
(null,’李四’,’1981-10-10’,’男’),
(null,’王五’,’1981-11-10’,’女’),
(null,’赵六’,’1988-10-10’,’男’),
(null,’孙七’,’1989-01-10’,’女’),
(null,’周八’,’1990-10-10’,’男’),
(null,’张三’,’1990-06-10’,’女’);
2.对已有的数据库的列进行更新
举例:
给emp表的的sal列加上100:update emp set sal=sal+100;
修改7369的员工部门为10号部门:update emp set deptno=10 where empno=7369;
给编号为3455的员工升为经理和加工资:update emp set sal=8000,job =’manager’ where empno=3455;
注意(主键主要是为了查询数据使用,一般不会执行更新操作)
3.删除操作
delete from 表; 全部删除
delete from 表 where 条件; 删除符合条件的记录
主键所在的表为主表,外键所在的表为从表,如果主表的删除记录被从表引用的话就会出现删除失败的错误应为存在外键约束,删除会违反外键约束
外键约束还有一种行为,主表记录删除,把从表中与之关联的记录一块删除(级联删除)
以员工和部门为例:foreign key(deptno) references dept(deptno) on delete cascade
例如: 删除10号部门,不仅会删除10号部门,而且会被从表(emp)中的10部门下所有员工也一块删除
4.查询操作
一般格式:select .. from 表名 where 条件;
条件:
(1)比较运算:
比较运算
表示相等的 =
大于 >
大于等于 >=
小于 <
小于等于 <=
不等于 !=

(2)逻辑运算:
and 并且
or 或者
not 取反
举例:工资在100到1000之间
where sal>100 and sal <1000;
部门编号为20或者为10
where deptno=20 or deptno=10;
(3)null值
数据库的null值不能用=来比较 一般来用 is null;
佣金为null
select * from emp where comn is null;
佣金不为null
select * from emp where comm is not null;
(4)模糊查询like
查询以李开头的学生的信息
select * from student where sname like ’ 李’;
通配符
’s%‘代表以s开头的字符% 代表多个任意字符
‘s_’ _ 代表一个任意字符
(5)between.. and…(范围匹配)
查找年龄子在10到20 之间的学生的信息
举例 select * from student where age between 10 and 20;
注意
1)数值必须按从小到大的顺序
2)between 值1 and 值2 ;包含值1和值2
(6) in 求这一列是否在一个值列表内
举例:求所有销售人员和经理
select * from emp where job=’SALESMAN’ or job=’MANAGER’;
select * from emp where job in (‘SALESMAN’, ‘MANAGER’);
(7)limit语句(MySQL 特有的语句)
格式: limit(n,m);
表示从n开始最多返回m个值,下标从0开始
8. order by 用来给结果排序
语法: order by 列名 asc|desc, 列名 asc|desc, …
例如:按工资升序:
select * from emp order by sal;
select * from emp order by sal asc;
按工资降序:
select * from emp order by sal desc;
其中如果不写asc或desc,默认升序

如果多列排序,如果第一列取值相同,再按照第二列进行排序,例如:
先按工资排序,工资相同的,再按姓名排序:
select * from emp order by sal asc, ename asc; /如果升序,两个asc都可以省略/
9.select 语句的顺序
select * from 表名 where 条件 group by 列名 having… order by…limit..;
语句的执行顺序 先执行where语句进行过滤 然后执行 group by 之后执行having操作然后执行 select 操作 然后执行 order by 的操作 最后执行 limit
10.函数
1)大小写转换
upper 将小写字母转换为大写字母
lower 将大写字母转换为小写字母
2) 时间的加减函数
date_add(原始时间 interval 数字 单位);
举例:
select date_add(now(), interval 2 day);
3)提取时间的某个部分
格式 extract(时间部分, 原始时间);
举例: select extract(year_month from now());
注意: 返回的是一个数字类型
4)类型转换函数
将字符转换为无符号数字进行运算
select cast(‘22’ as signed)+1;
将数据转化为固定精度的数字
select cast(1.4445566 as decimal(5,2));
5) 求长度的函数
char_length 按字符为单位统计长度
length 按字节为单位统计长度
utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节

6) 标准sql:
case
when 条件1 then 值1
when 条件2 then 值2

else 值n
end
整个case…end 最后返回一个值

select sal,
case
when sal>2000 then ‘高工资’
when sal between 1000 and 2000 then ‘中等’
else ‘低工资’
end from emp;

7) 组函数
最大值 max(列)
最小值 min(列)
和 sum(列)
个数 count(列) 会排除null值
count(*) 针对这次查询,看看一共有多少行
平均值 avg(列)

8) 去除重复
distinct
select distinct job from emp; /去除重复后的职位有哪些/
select count(distinct job) from emp; /有几种职位/

9) 查询帮助
? contents 总目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值