1. DBMS是一类软件的统称,比如MySQL,Oracle
2. 数据库: MySQL是一个数据库管理的软件,这个软件里面管理的是数据库。
3. 表(二元关系)是数据存储的真正单元。
不能往数据库里直接发放数据,只能将数据放在表格中。
数据库相关的语句:
create database 数据库名;
show databases; #查看所有的数据库
drop database 数据库名;
use 数据库名;
表格相关的语句:
create table 表格名(列名 列类型, 列名 列类型, 列名 列类型。。。。。。。。。。);
drop table 表格名;
show tables; 查看所有的数据库表格
表格内数据相关的:
insert into 表格名(列名,列名。。。。。) values (值,值。。。。。。);
select * from 表格名;
update 表格名 set 列名=列的新值, 列名=列的新值,........;
delete from 表名;
MYSQL这个软件只要安装在计算机上,这台计算机就成了一个数据库服务器。
服务器就是对外提供服务的一台计算机。
用DataGrip的时候,建立一个数据库连接,用户名如果是root,那么database处一般应该是mysql
mysql这个数据库本身存储的是mysql这个软件运行所必需的信息,非常重要。同时也存储了其它数据库的基本信息和用户信息。
这个数据库一旦损坏,其余数据库和mysql这个软件也随之崩溃。
我们工作后,一般会由管理员分配一个数据库和用户、密码。
注意建立/删除用户、数据库和授权的操作必须由root用户登录才能完成。
不要用你建立的普通用户再去尝试建立其它用户或者数据库。
CREATE DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT alter,select,insert,update,delete,create,drop,index,references,
CREATE VIEW,TRIGGER,show view, ALTER ROUTINE,
create routine, execute, create temporary tables ON 数据库名.* TO '用户名'@'%';
drop user 用户名; 删除用户
MySQL中表格列的常见类型
create table test(
a int,
b double,
c float,
d char(10), #类似于Java中的String,但是宽度固定是10
e varchar(20), #类似于Java中的String,但是宽度不固定,此处的20是上限
f time,
g date,
h datetime, #年月日时分秒,年一直到9999年
i timestamp,
j enum('F', 'M')
);
insert into test(a, b, c, d, e, f, g, h, i, j)
values(1, 3.14, 3.14, 'char', 'varchar', TIME'13:01:59', DATE'2021-09-19', '2021-01-01 13:08-22', '2021-01-01 13:08-22', 'F');
insert into test(a, b, c, d, e, f, g, h, i, j)
values(1, 3.14, 3.14, 'char', 'varchar', '13:01:59', '2021-09-19', '2021-01-01 13:08-22', '2021-01-01 13:08-22', 'F');
#TIME和DATE类型最好加上前缀
#枚举和字符串用单引号,数字直接写
insert into test
values (3, 3.14, 3.14, 'char', 'varchar', '13:01:59', '2021-09-19', '2021-01-01 13:08-22', '2021-01-01 13:08-22', 'F');
#插入语句当插入的数据和列数量相同的时候,可以不写列名。但是这样的做法非常不好,应该避免。
insert into test(a, c, j) values (3, 3.14, 'F');
#下面有一个MySQL的特殊写法,可以一次插入多行。但是这样的做法非常不好,应该避免。
insert into test(a, c, j) values (4, 3.14, 'F'), (5, 3.14, 'F'), (6, 3.14, 'F');
select a, now() from test; #now是MySQL内置函数,表示当前时间
select now() from dual;
select 1+2 from dual;
select 1+2, 'abc', now() from dual;
#当我们查询的内容并不在任何一个表格中时,为了sql语句的完整性,我们发明了dual这个虚表
#虚表是一个并不存在的表格,只是为了语法上的需要。
#表别名,列别名和关键字的使用
select 1+2*4-(5-4)*7 as result, 'abc' as text, now() as now from dual;
select 1+2*4-(5-4)*7 result, 'abc' text, now() now from dual;
select a, b, c from test as t;
select t.a, t.b, t.c from test as t;
select t.a, t.b, t.c from test t;
select 'select' from dual;
create table users(
`select` int
);
#聚合函数
select sum(a), max(a),min(a),avg(a) from test;
select count(*) from test; #*尽量不要使用,指所有列
select count(a), count(e) from test; #null是不会被算在总行数中的
#null的使用:数据库里尽量不要使用null,会为后期的数据仓库带来麻烦。
#null是关键字,使用的时候不需要加特殊符号
insert into test(a) values (null);
#null不能比较相等,必须使用is null或者is not null
select * from test where a < 3;
select * from test where a = null; #这句话并不是语法错误,只是结果不确定
select * from test where a is null;
select * from test where a is not null;
#where后面可以写哪些内容?
select * from test where a >= 3;
select * from test where a >= 3 or a is null; #and类似于Java中的&&, or类似于Java中的||
select * from test where e = 'varchar';
select * from test where a>=3 and a<=5;
select * from test where a between 3 and 5; #等价于 a>=3 and a<=5; between和and是一体的,是一个运算符
select * from test where e like '%a%'; #like用来判断字符串相等,其中%指代的是0或者多个字符。
select * from test where e like 'a%';
select * from test where e like '_a%'; #_表示一个任意的字符,但不能是空
select * from test where h > '2021-01-01 13:08:22';
#主键和外键
#主键是行的唯一标识,主键不允许是null,也不允许重复。主键在建立表格是就要指定。
#每一个表格今后都要带主键
drop table if exists users;
create table users(
id int primary key auto_increment, #primary key就表示id这个列是一个主键,auto_increment是让主键自动增长
name varchar(20),
age int
);
insert into users(name, age) value ('tom', 10);
insert into users(name, age) value ('jerry', 5);
insert into users(name, age) value ('ben', 12);
#自动增长的意思是让我们可以不用手动给其赋值
#外键用于表达两个表格之间存在某种关系,用于将两个表格连接在一起。
drop table if exists logs;
create table logs(
id int primary key auto_increment,
login_time datetime,
u_id int,
foreign key (u_id) references users(id)
);
# foreign key表示外键,括号里就是被选中作为外键的列名,references表示引用,后面放另一个表格的名字和主键的列名
聚合函数11
最新推荐文章于 2024-08-05 18:56:17 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)