mysql
mysql是数据库管理系统.
一个数据库管理系统都包含哪些最基本的东西:
1:数据库
2:管理软件
3:使用人员
......
什么是数据库。
所谓的数据库就是存储数据的仓库,数据存储在仓库中我们可以使用数据库提供的方式来对数据进行快速的CRUD(增删改查)。
数据库目前主要分为:
1:关系型数据库
sql server、mysql、oracle。。 关系型数据库全部都符合sql规范
2:非关系型数据库
redis、es等......
sql:结构化查询语句
sql是一个特殊目的的变成语言,其目的主要是针对关系型数据库的操作,以及对里面数据的增删改查等,sql语言诞生于1974年,于1980年的是由经由美国国家标准局数据库委员会将sql定义成关系型数据库语言的美国标准,当美国宣布不久之后ISO(国际标准化组织)宣布将sql定义成关系型数据库的语言标准。
sql主要分为六类:
1:DQL(数据查询语言,主要是查询)
关键字:SELECT(查) 、 WHERE(筛选)
2:DML(数据操作语言,增,删,改)
关键字: INSERT(增)、 DELETE(删)、 UPDATE(改)
3:TCL(事务控制语言)
4:DCL(数据控制语言,权限)
关键字: GRANT(赋予用户权限) 、 REVOKE(回收用户权限)
5:DDL(数据定义语言,创建,删除数据库,创建修改表等)
关键字: CREATE 、DROP、 ALTER
6:CCL(指针控制语言)
mysql >>>> 数据库 >>>> 表 >>>> 列>>>> 行
mysql:是一个数据库管理软件,一个mysql中有多个数据库
数据库:是一个存储数据的仓库,一个数据库中可以有个表
表:里面存放我们的数据,每一个表都有任意列。
列:列指定了存放数据的类型,如果这一列是int类型代表只能存放数字,如果指定是字符串则这一列只能存放字符串,每一列都有多个行。
行:数据库中每一列都有任意个行,行里存放了真实的数据。
如何用java的关系来形容数据库: 表java中的model类 列类中的属性 行==类产生的对象。
数据库操作:
mysql中标识符命名规则所有字母小写多个单词用‘_‘分割,mysql中大小写不敏感。
1.创建数据库
create database aaa;
create:创建的意思,创建数据库,表,用户等全部都使用create关键字
database:数据库关键字,表示数据库
aaa: 是我们自定义的数据库名称
2.删除数据库
drop datebase AAA;
drop: 删除的意思,主要用来删除数据库,删除表,删除用户等操作。
AAA: 需要删除的数据库名称
3.创建用户
create user 'admin' identified by '123456';
4.给用户赋予权限
grant create,insert,selet on test.* to 'admin';
5.回收用户权限
revoke select on test . * from 'admin';
6.查看当前登录用户
select user();
7.展示数据库
show databases;
8.展示表
show tables;
9.切换数据库
use test;
use: 使用
test: 数据库名
10.删除用户
drop user '张三@%';
11.创建表
create table u(
id int,
name varchar(10);
sex char(1);
birthday date,
date_of timestamp,
marital bit
);
create: 代表创建
table: 代表 表
u: 我们自定义的表名称(尽量避免是数据库关键字,以及Java关键字)
(): 里面定义表中的列
id,name...:都是我们自定义的列名,多个列之间需要使用','分割(尽量避免是数据库关键字,以及Java关键字)
int 表示整数
varchar: 表示字符串,可变字符串(例如varchar(20),虽然一列能存储20 个字符,但是实际占用空间是根据使用情况来决定的,如果这一列只存了2个字符的话,那么久只占用两个字符的空间,而不是20个字符的空间,varchar最多能存放65532字节的数据)。
char: 表示字符串,不可变(例如varchar(20),指定这一列能存放20个字符,如果只存放了1个字符的空间,却依然会占用20个字符空间).
date: 日期
timestamp:时间戳
bit: 只能存一个字符,如果存的是0,1,则可以和Java的Boolean互相转换
12.删除表
drop table u;
drop: 删除
table: 表
u: 表名
13.创建一张表,包含常用的数据类型
create table `table`(
id int(2),
name varchar(20),
birthday date,
brithday2 timestamp,
brithday3 datetime,
sal double
);
在表以及列名前后加上"`''可以防止关键字冲突
int 后面指定的长度是无效的
14.描述表
desc `table`;
desc: 描述用于描述表的列名,列名的类型,是否为空,默认值等
table``: 需要被描述的表名
15.查看创建表的sql语句是什么
show create table `table`;
针对数据库的最主要操作,增删改查(CRUD)
1.插入多个数据
insert into `table` values(1,null,'2020-02-02','2020-02-02 11:25:39','2020-02-02 15:25:39',8866.6);
insert into: 表示插入
table: 需要插入的表名
values: 表示插入多个数据
(): 里面写需要插入的值,多个值使用','分割
完整的语法:insert into 表名
values(插入到列1的值,插入到列2的值,插入到列3的值。。。);
重点:这种语法没一次增加数据的时候,必须添加表中的所有列,并且需要按照列的顺序来添加 ,否则会报错:列数或者类型不匹配
2.插入指定的列,可以在values前面指定需要将数据插入到哪一列之内,其他列会自动变成默认值
insert into `table` (id,sal) values(2,6666.66);
重点:values小括号内的值需要与values前面的列名顺序一致。
3.数据翻倍 经常用于测试大量数据的情况。
insert `table` (id,sal)select id,sal from `table`;
insert: 表示插入
table: 表示插入到哪张表
(): 表示插入到表中的哪些列
select: 表示查询
id,sal: 表示被查询的列
from table: 表示查询哪张表
简单点说:就是查询了自己的内容然后又将查询出来的东西插入到自己的表中
4.最简单的查询语句
select id,name from `table`;
select * from `table`;
select: 表示查询的意思
*: 表示查询的是全部列
from: 从哪查询
table: 被查询的表名
select 列名 from 表名;(多个列名之间需要‘,’分割 *可以用来表示全部列)
5.修改
update `table` set name='孙悟空';
上面的修改语句将所有的名字都改成了孙悟空,我们想要的是只改我们想改的数据,我们的修改需要加上条件
where:where关键字用来表示过滤条件
update `table` set name='猪八戒' where id=1;
6.将ID是1,并且是2020-02-02日出生的猪八戒改名字为白龙马。
update `teble` set name='白龙马' where id=1 and name='猪八戒' and birthday='2020-02-02';
and: 类似于Java中的&&用于多条件并行
7.将白龙马或猪八戒的名字改成蜘蛛精
update `table` set name='蜘蛛精' where name='猪八戒' or name='白龙马';
or: 类似于Java||用于多条件选一
8.将名字是孙悟空 或者名字是蜘蛛精并且是2020-02-02 的name改成唐三彩
update `table` set name='唐三彩' where name='孙悟空' or (name='蜘蛛精'and birthday='2020-02-02');
(): 跟Java的()一样优先运算符,可以用来隔离条件
9.删除的三种方式
1.根据条件删除
delete from `table` where id=2 or (name='蜘蛛精' and birthday='2021-04-13 15:37:35')
2.直接删除掉表,连同表中的所有数据
truncate table `table`;
3.直接删除表中的所有数据,连同表
drop table `table`;
truncate table table
和 delete fromtable
的区别
1.delete后面可以跟条件筛选truncate不能有条件
2.delete删除数据会记录在mysql日志中可以使用事务回滚,truncate删除的数据不记录在日志,无法回滚。
3.delete相当于删除数据而已,truncate相当于删除了表之后新建了一张表
约束:主要是用来限制列里面存放的内容都有哪些
1.非空约束(not null): 这一列存放的值不能位null。
2.唯一约束(unique): 这一列存放的值不能重复。
3.主键约束(primary key): 非空+唯一,这一列存放的值不能为null并且不能重复。
4.外键约束: 跟多表有关(约束了子表的增加,以及父表的删除)(外键都设置在子表之内,子表中的列,指向了父表的主键)
5.检查约束 mysql中存在,但是无法使用,在Oracle中可以使用。
个别程序员认为约束还有:默认和自证约束
一、建表时直接添加约束
1.创建班级表 有列 class_id 要求是主键 class_name 要求唯一并且非空
create table class(
class_id int primary key,
class_name varchar(20) not null unique
);
2.创建学生表 有列 id要求是主键 name 非空 sex 默认男 number唯一 class_id要求外键
create table stu(
id int primary key auto_increment,
#auto_increment 可以让列实现自增长,一个表中只能有一列是自增的
name varchar(20) default '男',
number int unique,
class_id int,
foreign key (class_id) references class(class_id),
#本表中的哪一列 绑定到哪张表中的哪一列
check(sex in('男','女'))
#检查元素存在,但是在解析时候会忽略,所以无法起到作用(在建表时候添加检查约束不报错)
);
3.添加班级表元素
insert into class values(1,'终极一班');
insert into class values(1,'终极二班');
4.添加学生表元素
insert into su values(null,'张三','中性',1,2);
insert into su values(null,'张三','中性',1,1);
父表没有班级id是3的,所以子表添加数据的时候不能添加班级id是3 (子表外键只能添加父表主键存在的内容)
5.删除父表数据
delete from class where class_id=2;
父表对应的子表中有内容,所以不能直接删除父表的数据,要先解决子表中的数据在删除父表的内容