Mysql - 基础
命令行
# 查看当前有哪些数据库
show databases;
# 查看当前的使用的数据库
select database();
# 使用student数据库
use student;
# 查询当前数据库有哪些表
show tables;
# 查看表结构
mysql> desc `order`;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| order_no | varchar(20) | NO | UNI | NULL | |
| user_id | int(11) | NO | MUL | NULL | |
| delete_time | int(11) | YES | | NULL | |
| create_time | int(11) | YES | | NULL | |
| total_price | decimal(6,2) | NO | | NULL | |
| status | tinyint(4) | NO | | 1 | |
| snap_img | varchar(255) | YES | | NULL | |
| snap_name | varchar(80) | YES | | NULL | |
| total_count | int(11) | NO | | 0 | |
| update_time | int(11) | YES | | NULL | |
| snap_items | text | YES | | NULL | |
| snap_address | varchar(500) | YES | | NULL | |
| prepay_id | varchar(100) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
14 rows in set (0.00 sec)
# 查询创建表时的sql语句
show create table `order`;
# 加载sql文件:
# 方式一:
source xxx.sql
# 方式二, school为database:
mysql -uroot -p123456 school < student.sql
约束
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的: 保证数据库中数据的正确、有效性和完整性
分类:
案例需求:
实现SQL:
create table user(
id int PRIMARY auto_increment comment '主键',
name VARCHAR(10) not null UNIQUE comment '姓名',
age int check( age >0 && age <= 120) comment '年龄',
STATUS CHAR(1) DEFAULT '1' comment '状态',
gender char(1) comment '性别'
) comment '用户表';
注意:
如果插入的age 不满足条件会报错:
DQL 执行顺序
验证1:
SELECT name,age myAge from emp where myAge > 15 order by age asc;
执行失败:
select 对 age 起别名,但是where 子句 识别不到age的别名
SELECT name,age myAge from emp where age > 15 order by myAge asc;
执行成功:
order by 子句可以识别到select 子句 age的别名,说明 select 的执行顺序在 where 子句 后 order by 子句前
函数
字符串函数
案例:企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0,比如: 1号员工的工号应该为00001
update emp set workno = LPAD(workno,5,'0');
效果:
需要注意的是workno 需要是varchar类型
数值函数
案例:通过数据库的函数,生成一个6位随机验证码
# 生成一个0-1的随机数
SELECT rand();
# rand() * 1000000 夸大10000000 倍,保留0位小数
SELECT round(rand()*1000000,0);
# 不够6位左补0
SELECT LPAD(round(rand()*1000000,0),6,'0');
日期函数
案例:查询所有员工的入职天数,并根据入职天数倒序排序
select name, DATEDIFF(CURDATE(),entrydate) AS join_days from emp order by join_days desc;
结果:
流程函数
参考if 语句的三种用法:
Lhttps://blog.csdn.net/weixin_45659364/article/details/115468039
第三个函数案例:成绩表各门成绩>=85,展示优秀;>=60 展示及格;否则展示不及格
SELECT
id,
NAME,
(
CASE
WHEN math >= 85 THEN
'优秀'
WHEN math>= 60 THEN
'及格'
ELSE
'不及格'
END
) '数学',
(
CASE
WHEN english >= 85 THEN
'优秀'
WHEN english>= 60 THEN
'及格'
ELSE
'不及格'
END
) '英语',
(
CASE
WHEN chinese >= 85 THEN
'优秀'
WHEN chinese>= 60 THEN
'及格'
ELSE
'不及格'
END
) '语文'
FROM
score;
执行结果:
第四个函数 案例:如果dept_id 等于1,展示开发,如果为2展示测试,其他展示为前端
SELECT
name,
(case dept_id when 1 then '开发' when 2 then '测试' else '前端' end) '职位'
from emp;
执行结果:
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/17742701.html