数据库就是数据存储的仓库,用于存储和管理数据。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
tinyint | 1 字节 | (-128,127) | (0,255) | 小整数值 |
int | 4 字节 | (- 2 31 2^{31} 231, 2 31 2^{31} 231-1) | ( 2 32 2^{32} 232-1) | 大整数值 |
bigint | 8 字节 | (- 2 63 2^{63} 263, 2 63 2^{63} 263-1) | ( 2 64 2^{64} 264-1) | 极大整数值 |
float | 4 字节 | (- 2 127 2^{127} 2127, 2 127 2^{127} 2127-1) | ( 2 128 2^{128} 2128-1) | 单精度浮点数值 |
double | 8 字节 | (- 2 1023 2^{1023} 21023, 2 1023 2^{1023} 21023-1) | ( 2 1024 2^{1024} 21024-1) | 双精度浮点数值 |
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
data | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
time | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:ss | 时间值或持续时间 |
year | 1 | 1901/2155 | YYYY | 年份值 |
datatime | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期和时间 |
timestamp | 4 | 1970-01-01 00:00:00/2038 | YYYYMMDD HHMMSS | 时间戳 |
类型 | 大小 | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-65535字节 | 变长字符串 |
text | 0-65535字节 | 长文本数据 |
通过sql语言可以操作所有的关系型数据库,因为每种数据库之间sql语句存在差异,这种差异就被称为“方言”。
create database 数据库名称;-- 创建数据库
drop database 数据库名称;--删除数据库
show database;-- 查询所有数据库的名称
create table 表名( -- 创建表
列名 类型,
列名 类型
);
drop table 表名;-- 删除表
alter table 表名 add (列名 类型);-- 添加列
alter table 表名 modify 列名 类型;-- 修改列的类型
alter table 表名 change 原列名 新列名 类型;-- 修改列名
alter table 表名 drop 列名;-- 删除列
show tables;-- 查询该数据库下所有表名称
desc 表名; -- 查询表结构
insert into 表名(列名,列名) values (值,值);-- 向表中添加数据
insert into 表名 values(值,值);-- 当给表中所有列都需要添加数据时 可以省略列名
delete from 表名 where 条件;-- 根据条件删除列
update 表名 set 列名=值 where 条件;-- 根据条件修改列
案例演示
CREATE TABLE MyTest(
id INT,
username CHAR(3),
sex CHAR(2),
age INT
);
INSERT INTO MyTest VALUES(1,"张三","男",19);
INSERT INTO MyTest(id,username,sex) VALUES(2,"王老五","女");
INSERT INTO MyTest VALUES(3,"李四","男",28);
UPDATE MyTest SET age=20 WHERE age=19;
DELETE FROM mytest WHERE age IS NULL; -- 不区分大小写
MySQL数据库权限问题:root拥有所有权限(可以干任何事情),我们可以分配权限账户。
-- 数据库中所有分配的账户信息都在mysql数据库中的user表中存储
-- 修改密码
UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';
分配权限账户
-- 语法
GRANT 权限 ON 数据库名.某张表名 TO '用户名'@'localhost' IDENTIFIED BY '123456';
语法
select 要查询的列 from 表名 where 条件
条件:where字句
=、!=、<>(不等于)、<、<=、>、>=
BETWEEN…AND 在什么范围之间
IN(set)
IS NULL 为空
IS NOT NULL不为空
AND 并且
OR 或者
NOT 非
案例演示
CREATE TABLE emp(
empno INT,
ename VARCHAR(50),
job VARCHAR(50),
mgr INT,
hiredate DATE,
sal DECIMAL(7,2),
comm DECIMAL(7,2),
deptno INT
) ;
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO emp VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO emp VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO emp VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO emp VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO emp VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO emp VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO emp VALUES(7788,'SCOTT','ANALYST',7566,'1987-04-19',3000,NULL,20);
INSERT INTO emp VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
-- 查询奖金不为null所有人的信息
SELECT *FROM emp WHERE comm IS NOT NULL;
-- 查询工资在2000到3000之间的员工编号和姓名
SELECT empno AS 编号,ename AS 姓名 FROM emp WHERE sal BETWEEN 2000 AND 3000;-- as可以给字段起个别名
-- 查询部门编号是10或20的员工
SELECT *FROM emp WHERE deptno IN(10,20);-- 用or也可以
-- 字段也可以进行计算 查询员工的年薪,编号,姓名
SELECT empno,ename,sal*12 FROM emp;
-- 字段也可以进行计算 查询员工的年薪,编号,姓名
SELECT empno,ename,sal*12 FROM emp;
-- 查询员工的年薪(包含奖金)
SELECT empno,ename,sal*12+comm FROM emp;-- 我们发现null值参与运算时的结果还是 null
-- 如果奖金是null值 我们想要当0来处理 ifnull()
SELECT empno,ename,sal*12+IFNULL(comm,0) FROM emp;
-- 去重
SELECT DISTINCT deptno FROM emp ;
模糊查询使用的通配符
-- 查询姓名中包含A的人
SELECT *FROM emp WHERE ename LIKE '%A%';
-- 查询姓名是A开头的人
SELECT *FROM emp WHERE ename LIKE 'A%';-- 啥结尾就是 '%字符'
-- 查询第二个字符是M并且工作名是5个字符组成的
SELECT *FROM emp WHERE ename LIKE '_M%'AND job LIKE '_____';
-- 查询所有员工信息 工资按升序排列
SELECT *FROM emp ORDER BY sal ASC;
-- 查询所有员工信息 工资按降序排列
SELECT *FROM emp ORDER BY sal DESC;
-- 工资按升序排列 奖金按降序排列
SELECT *FROM emp ORDER BY sal ASC,comm DESC;
注意:
count(*)是对所有的列进行计算。
count(列名)null值是不参与计算的。
案例演示
-- 查询有奖金的人的总数
SELECT COUNT(comm) FROM emp;-- 3
SELECT COUNT(*) FROM emp;-- 9
-- 查询工资最高
SELECT MAX(sal) FROM emp;
-- 工资的平均值
SELECT AVG(sal) FROM emp;
-- 工资的总和
SELECT SUM(sal) FROM emp;