# 字符函数
字符串处理 SELECT name,CONCAT(UPPER(SUBSTR(name,1,1)),LOWER(SUBSTR(name,2))) FROM student
去掉空格 SELECT TRIM(' ASDF') SELECT LTRIM(' ZASDF ') SELECT RTRIM(' SADF ') SELECT TRIM('@' FROM '@@ZPPX@@')
补齐多少位 SELECT LPAD('ZASDF',10,'@') SELECT LPAD('1',8,'0') SELECT RPAD('1',8,'0')
替换字符串 SELECT REPLACE('zf','f','F')
FORMAT 格式化 SELECT FORMAT(10000,2) SELECT FORMAT(888.456.3)
取左右多少位 SELECT LEFT('asdfasdf',5) SELECT RIGHT('ASDFAS',4)
# 数学函数
- 取整 SELECT CEIL(10.99) SELECT FLOOR(10.1234)
- 取模 SELECT MOD(10.4)
- 约等于 SELECT ROUND(10.3)
- 保留小数 SELECT TRUNCATE(10.88,1)
# 日期函数
当前时间 SELECT NOW()
日期 SELECT CURDATE() SELECT CURTIME()
年 SELECT YEAR(NOW()) SELECT MONTH(NOW()) SELECT DAY(NOW()) SELECT HOUR(NOW()) SELECT MINUTE(NOW()) SELECT SECOND(NOW())
# 把字符串转成日期
SELECT STR_TO_DATE('2018-09-09','%Y-%m-%d') SELECT DATE_FORMAT(NOW(),'%Y 年%m 月%d 日')
- 加日月年 SELECT DATE_ADD(NOW(),INTERVAL 1 DAY) SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH) SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)
- 和现在相差多少天 SELECT DATEDIFF('2018-09-08',NOW())
# 其他函数
- 取得连接 id SELECT CONNECTION_ID()
- 查看当前数据库 SELECT DATABASE()
- 查询当前数据库版本 SELECT VERSION()
- 查询当前用户 SELECT USER()
- md5 加密 SELECT MD5('123')
SELECT * FROM mysql.user SELECT PASSWORD('zfpx')
# 流程控制函数
- 类似三元表达式 SELECT IF(1>0,'A','B')
# case 函数
SELECT * FROM score SELECT CASE WHEN grade >= 60 then '及格' WHEN grade < 60 then '不及格' ELSE '未知' END FROM score;
SELECT level CASE 'A' then '优秀' CASE 'B' then '较好' ELSE '差' END FROM score;
# 小写变大写
SELECT * FROM student; UPDATE student SET email = UPPER(email) WHERE id = 1;
# 升序降序排序
# 查询年龄超过 18 岁的男同学
SELECT * FROM student WHERE gender _ '男' AND YEAR(NOW()) - YEAR(birthday)>18
# 查询生日月份是 9 月份的山东省的同学
SELECT * FROM student WHERE MONTH(birthday) =9 AND province ="山东省"
# 查询今天过生日的同学
SELECT * FROM student WHERE DAY(birthday) = DAY(NOW()) AND MONTH(birthday)=MONTH(NOW())
# 查询 id 为 3 的同学的域名
SELECT name, SUBSTR(email,INSTR(email,'@')+1) FORM student WHERE id=3
# 自定义函数
- 自定义函数是对 mysql 的扩展,使用方式和内置函数相同
- 语法
- CREATE FUNCTION ZNOW() RETURNS VARCHAR(20)
RETUNR DATE_FORMAT(NOW(),'%年-%月-%日 %时-%分-%秒');
SELECT ZNOW();
- CRATE FUNCTION ZADD(num1 INT,num2 INT) RETURNS INT RETURN num1+num2 SELECT ZADD(2,3)
- CREATE TABLE stu2(id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50)) SELECT * FROM stu2;
- CREATE FUNCTION addUser(name VARCHAR(50)) RETURNS INT BEGIN INSERT INTO stu2 (name) VALUES(name); RETURN LAST_INSERT_ID(); END SELECT addUser('zasdf')
- CREATE FUNCTION ZNOW() RETURNS VARCHAR(20)
RETUNR DATE_FORMAT(NOW(),'%年-%月-%日 %时-%分-%秒');
SELECT ZNOW();
- 模糊查询
- SELECT * FROM stu2 WHERE name LIKE '%'
- SELECT * FROM score WHERE grade BETWEEN 60 AND 100;
- SLEECT * FORM score WHERE grade >=60 AND grade <=100
- 查询某一列中的值在列出的内容列表中
- SELECT * FROM student WHERE city in ('北京','上海')
- SELECT * FROM student WHERE city = ()
# 聚合
- 对一组值进行计算,并返回计算后的值,一般用来统计数据
- SELECT SUM(grade) FROM score WHERE student_id =1;
SELECT * FROM score WHERE student_id=1 SELECT COUNT(grande) FROM score WHERE student_id=1
-- 如果分组的话 SELECT 后面只能跟分组的聚合函数 SELECT student_id,SUM(grade) FROM score GROUP BY student_id
- SELECT 列名
# 为何设计数据库
糟糕的数据库设计
- 数据冗余,存储空间浪费
- 内存空间浪费
- 数据和更新插入异常
2.软件项目开发周期中的数据库设计
需求分析阶段;分析客户的业务和数据处理需求
概要设计阶段;设计数据库的 E-R 模型图,确认炫耀的正确和完整性
详细设计阶段
代码编写阶段
软件测试阶段
安装部署
现实世界-->
3.设计数据库的步骤
# 数据库设计的三大范式
- 1.确保每列的原子性
- 2.每个表只描述一件事情
- 3.其他列都不传递
- RBAC
- 基于角色的权限控制
- RBAC ,就是用户通过角色与权限进行关联
- 简单的说,一个用户拥有若干个角色,每一个角色拥有若干权限,这样,就构成用户-角色-权限-资源的授权模型
- 在这种模型总,用户与角色之间,角色与权限之间,权限与资源之间一般是多对多的关系
- 在 RBAC 中最重要的概念:用户,角色,权限,资源
- 安全原则
- 最小权限原则之所以被 RBAC 所支持,是因为 RBAC 可以将
# mysql 基本命令
- mysql 启动
net start MySQL
- mysql 停止
net stop MySQL
- 连接 MySQL
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
- 断开连接
exit
- 切换数据库
use test;
- 显示有哪些表
show tables
show tables from mysql
2
- 显示当前数据库
select database();
- 查询表结构
DESC user;
- 创建表
CREATE TABLE 'student'