《MySQL系列(一)——基础知识大总结》要点:
本文介绍了MySQL系列(一)——基础知识大总结,希望对您有用。如果有疑问,可以联系我们。
前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善.
数据库和数据库软件
数据库是保存有组织数据的容器
DBMS是为管理数据库而设计的软件管理系统,MYSQL、ORACLE 等是数据库管理系统
MYSQL
MYSQL是一种数据库管理软件
开放源码,免费使用
MYSQL命令
CREATE DATABASE NAME 创建数据库
USE DATABASE 选择数据库
DROP DATABASE NAME 直接删除数据库
SHOW DATABASE 显示可用数据库列表
SHOW TABLE 显示数据库中的表的列表
SHOW COLUMNS FROM TABLE 与 DESCRIBE TABLE 等效,显示表的字段信息
SHOW GRANTS 显示授予用户的安全权限
SHOW ERRORS SHOW WARNINGS 显示服务器错误和警告信息
SQL
STRUCTURED QUERY LANGUAGE 结构化查询语言,一种专门用于与数据库通信的语言
不是DBMS专有的语言,很多DBMS都支持SQL,但是不同DBMS对SQL的实现不同
DBMS支持的SQL语法不能完全适用于其他DBMS
SQL语句不区分大小写
多条语句需要分号分隔,单条语句可以不用分号
通常SQL语句用大写,标识符(比如表名 列名 数据库名)用小写
创建表
CREATE TABLE user (id INT NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL,password VARCHAR (50) NOT NULL DEFAULT 1,PRIMARY KEY(id)) ENGINE =INNODB
检索列
SELECT username FROM user
SELECT username,password FROM user
SELECT * FROM user 建议不是要所有的列,不用'*',要不然这种操作是很耗性能的
SELECT DISTINCT username FROM user 只返回不同的username,比如有两行用户名是一样的,只显示一行记录
限制结果
SELECT * FROM TABLE LIMIT 5 检索前五行
SELECT * FROM TABLE LIMIT 5,5 检索6到10
SELECT * FROM TABLE LIMIT 5,-1 检索6到最后一行
结果排序
SELECT * FROM user ORDER BY username,以username的字母顺序排列
SELECT * FROM user ORDER BY username,password ,如果username有相同的,那么username相同的再按password排列,如果username都是唯一,这个时候password不起作用
SELECT * FROM user ORDER BY username DESC ,降序排列,默认是升序ASC
SELECT * FROM user e ORDER BY username DESC,password 此时按照username降序排列,如果username相同的行按照password升序排列
SELECT * FROM user ORDER BY username LIMIT 1 混合使用ORDER 和 LIMIT
SELECT * FROM user WHERE username ='jiajun' ORDER BY password 这里ORDER要在WHERE 之后
过滤数据
SELECT * FROM user WHERE username <> 'jiajun' 不等于 和 != 效果相同
SELECT * FROM user WHERE id BETWEEN 1 AND 10 检索1到10的记录,包括1和10
SELECT * FROM user WHERE username IS NULL 查找列无值的行,这里的无值不等于 值为0 和 空字符串
SELECT * FROM user WHERE id=1 OR username='jiajun' AND password='666' 执行顺序是 WHERE id=1 OR (username='jiajun' AND password='666')AND的优先级更高,但是建议添加括号
SELECT * FROM user WHERE id IN (1,2) 效果和SELECT * FROM user WHERE id=1 OR id =2 如果要实现这种效果,建议使用第一种,语法更清晰,而且一般执行更快
SELECT * FROM user WHERE id NOT IN (1,2)
通配符过滤
SELECT * FROM user WHERE username LIKE 'jia%' ,匹配JIA开头的username,不管后面有多少字符,jia和jiajun都是匹配,可以配置MYSQL是否区份大小写,如果区份大小写,也就是jiajun是不匹配的 .注意LIKE '%'是不能匹配值为NULL的
SELECT * FROM user WHERE username LIKE 'jia_' , _只能匹配一个字符,也就是匹配jiaj不匹配jiajun
通配符匹配是效率不高,如果其他方式能有相同的效果,建议用其他效果,并且最好不要将通配符放在开始处,因为这样是很慢的
正则表达式过滤
SELECT * FROM user WHERE username REGEXP '.IA' ,正则表达式, . 匹配任意一个字符
SELECT * FROM user WHERE username REGEXP 'jun' 匹配包含jun的username,'jiajun'和'jun'都匹配
SELECT * FROM user WHERE username REGEXP 'jiajun|jiaj' ,'|'和'OR' 效果一样
SELECT * FROM user WHERE username REGEXP ‘[123]jun’ ,匹配包含'1jun'或者'2jun'或者'3jun'
[^123]123除外
[1-9],[A-Z],用'-'表示范围
匹配特殊字符(比如'.'和'_')可以采用'\'转义,比如匹配有'.'的可以这样表示'\.'
拼接字段
SELECT CONCAT(username,'C',password,')') FROM user,将两个字段拼接到一起,查询结果是一列,行值 jiajun(666)
SELECT CONCAT(username,'C',password,')') AS up FROM user,为拼接后的一列设置字段名
算数运算
SELECT price*count AS all FROM TABLE 将单价和数量相乘,列名为all
函数
函数可移植性不高,也就是一个函数支持一个DBMS,但不一定支持另一个DBMS,比如支持MYSQL而不支持ORACLE.所以使用函数的要写好注释.
文本处理函数
LENGTH() 返回串长度
LOWER()将串转换为小写
UPPER()将串转换为大写
LTRIM()去掉串左边的空格
RTRIM()去掉串右边的空格
日期和时间处理函数
CURDATE() 2017-07-22
CURTIME()16:20:19
NOW() 2017-07-22 16:20:19
DATE() 返回日期的日期部分 SELECT DATE(NOW()) 2017-07-22
DATE_FORMAT() 返回格式化的日期和时间串
HOUR() 返回一个时间的小时部分
MINUTE() 返回一个时间的分钟部分
MONTH() 返回一个日期的月份部分
NOW() 返回当前日期和时间
SECOND() 返回一个时间的秒部分
TIME() 返回一个日期时间的时间部分
YEAR() 返回一个日期的年份部分
文章来自博客园
“勤工俭学计划”,给你一个真正0元学习IT技术的机会!
http://www.ujiuye.com/zt/qgjx/?wt.bd=fq37300j
找工作太难?不是你不行,我们来帮你!
http://www.ujiuye.com/zt/jyfc/?wt.bd=fq37300j
交流群:345648424
维易PHP培训学院每天发布《MySQL系列(一)——基础知识大总结》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7120.html