# 字符函数

  • 字符串处理 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')
  • 模糊查询
    • 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
1
  • mysql 停止
net stop MySQL
1
  • 连接 MySQL
mysql -h 127.0.0.1 -P 3306 -uroot -p123456
1
  • 断开连接
exit
1
  • 切换数据库
use test;
1
  • 显示有哪些表
show tables
show tables from mysql
1
2
  • 显示当前数据库
select database();
1
  • 查询表结构
DESC user;
1
  • 创建表
CREATE TABLE 'student'
1