MySQL学习笔记
学习时间 :2017.09.28—2017.10.01
整理时间:2017.10.02—2017.10.03
学习资源:职坐标网上课程《MYSQL数据库基础》
-
创建数据库:CREATE DATABASE database_name
-
删除数据库:DROP DATABASE database_name
-
创建数据表:
CREATE TABLE table_name
(
/*
至少定义一个字段,包括字段名,字段类型,是否为空可选
定义字段语句之间用’,’隔开
*/
col_name1 col_type [NOT NULL],
col_name2 col_type [NOT NULL],
col_name3 col_type [NOT NULL]
)
-
主键约束:
col_name col_type [NOT NULL]PRIMARY KEY
-
外键约束:
col_name col_type [NOT NULL]REFERENCES another_table_name(col_name_from_another_table_name)
-
检查约束:
col_name col_type [NOT NULL]CHECK(condition_expression)
-
默认约束
col_name col_type [NOT NULL]DEFAULT value
-
自增列
col_name col_type [NOT NULL]AUTO_INCREMENT
-
查看表的基本结构
DESCRIBE/DESC table_name
-
查看表的详细结构
SHOW CREATE TABLE table_name
-
修改表名
ALTER TABLE old_table_nameRENAME TO new_table_name
-
修改字段名
-
ALTER TABLE table_name CHANGE old_col_namenew_col_name new_col_type
-
修改字段类型
ALTER TABLE table_nameMODIFY col_name new_type
-
添加字段
ALTER TABLE table_name ADDnew_col_name new_col_type
-
删除字段
ALTER TABLE table_name DROPcol_name
-
添加主键约束
ALTER TABLE table_name ADDCONSTRAINT con_name PRIMARY KEY(col_name)
-
添加外键约束
/*
con_name为约束名,可写成:约束类型_表名_字段(type_table_col),其中约束类型可简写成PK——主键约束,FK——外键约束,CK——检查约束。
*/
ALTER TABLE table_name ADDCONSTRAINT con_name FOREIGN KEY(col_name) REFERENCES referenced_table_name(referenced_col_name)
-
添加检查约束
ALTER TABLE table_name ADDCONSTRAION con_name CHECK(condition_expression)
-
添加默认值
ALTER TABLE table_name ALTERcol_name SET DEFAULT value
-
添加自增
ALTER TABLE table_nameMODIFY COLUMN col_name col_type [Not NULL] AUTO_INCREMENT [NOT NULL] [PRIMARYKEY]
-
删除数据表
/*
如果table_list不存在关联,可以直接删除
table_list存在关联,即存在引用关系,先删除外键所在的表,再删除被引用的表
如果只删除被引用的表,要先解除关联关系,再删除被引用的表
*/
DROP Table [IF EXISTS]table_list
-
为所有的列插入值(插入记录)
/*
特点:列值同数,列值同序
有默认值,可用default
*/
INSERT [INTO] table_nameVALUES(value_list1),(value_list2),……,(value_listN)
-
为指定列插入值
/*
特点:列值同数,列值对应
若没指定,但有默认值,则添加默认值
*/
INSERT [INTO]table_name(col_list) VALUES(value_list1),(value_list2),……,(value_listN)
-
修改数据
/*修改特定条件的数据,若没指定条件,则修改全部数据*/
UPDATE table_name SETcol_name = expression [WHERE condition_expression]
-
删除数据
/*删除特定条件的数据,若没指定条件,则删除全部数据*/
DELETE [FROM] table_name[WHERE condition_expression]
/*删除全部数据*/
TRUNCATE TABLE table_name
-
查询列
/*
查询全部记录中col_list出现的字段,若查询全部列用’*’代替con_list
DISTINCT关键字可选,表示取消查询结果集中重复的数据
LIMIT关键字可选,表示指定结果集中数据的显示范围
有LIMIT i,l,表示从结果集第i条开始显示l条数据
有LIMIT l,表示从结果集第0条开始显示l条数据
*/
SELECT [DISTINCT] col_listFROM table [LIMIT]
-
普通条件查询
SELECT col_list FROMtable_name WHERE condition_expression
-
模糊查询
/*
表示查询col(不)在m到n范围内的数据
*/
SELECT col_list FROMtable_name WHERE col [NOT] BETWEEN m AND n
/* wildcard—通配符
查询col(不)符合某些特性的数据
*/
SELECT col_list FROMtable_name WHERE col [NOT] LIKE wildcard
/*
查询col(非)空的数据
*/
SELECT col_list FROMtable_name WHERE col IS [NOT] NULL
-
对查询结果集排序
/*
ASC是升序,默认
DESC是降序
先出现的col优先级高
*/
SELECT col_list FROMtable_name ORDER BY col1 [ASC|DESC], col2 [ASC|DESC],……,colN [ASC|DESC]
-
对查询结果分组
/*
对查询结果以col进行分组
col_list可以包含字段或聚合函数
*/
SELECT col_list FROMtable_name GROUP BY col
-
对查询结果分组筛选
/*
对查询结果以col进行分组
col_list可以包含字段或聚合函数
HAVING要写在GROUP BY之后
condition_expression要以聚合函数统计的结果作为条件
*/
SELECT col_list FROMtable_name GROUP BY col HAVING condition_expression
-
查询语句执行顺序
/*
首先在table_name中查找符合where_condition_expression的col_list,
对查询的结果集以group_by_col分组
对分组结果以having_condition_expression筛选
对筛选结果集按order_by_col [ASC|DESC]排序
*/
SELECT col_list [AS alias]FROM table_name
WHERE where_condition_expression
GROUP BY group_by_col
HAVING having_condition_expression
ORDER BY order_by_col[ASC|DESC]
-
内连接
/*
横向连接多个查询结果集
两张表的地位平等
如果一张表中在另一张表中没有不存在对应数据,则不做连接
col_list中col来自不同的表,它来自表的顺序与table_list中table的顺序相同
condition_expression应是不同表中相同col的关系
*/
/*
隐式内链接
*/
SELECT col_list FROMtable_list WHERE condition_expression
/*
显示内连接
/
SELECT col_list FROM table1
[INNER] JOIN table2 ONcondition_expression
[INNER] JOIN table3 ONcondition_expression
……
-
外连接
/*
横向连接多个查询结果集
连接的两张表地位不平等,其中一张表是基础表,基础表中每条数据必须出现,即使另一张表中没有数据与之匹配,要用NULL补齐
在语句中先出现的表是左表,后出现的表是右表
左外连接时左表时基础表,有外连接时右表是基础表
col_list中col来自不同的表,它来自表的顺序与table_list中table的顺序相同
condition_expression应是不同表中相同col的关系
*/
SELECT col_list FROM table1
LEFT|RIGHT [OUTER] JOINtable2 ON condition_expression
LEFT|RIGHT [OUTER] JOINtable3 ON condition_expression
……
-
子查询
/*
使用IN关键字
(SELECT语句)为子查询
父查询以子查询返回的结果集作为条件
*/
SELECT col_list FROMtable_name WHERE col IN (SELECT语句)
/*
使用EXISTS关键字
(SELECT语句)为子查询
如果子查询有结果才返回父查询的结果集
*/
SELECT col_list FROMtable_name WHERE col EXISTS (SELECT语句)
-
联合查询
/*
纵向连接多个查询结果集
列的数量和类型要兼容
有ALL表示数据重复部分多次显示
没ALL表示数据只出现一次
*/
SELECT col_list1 FROMtable_name1
UNION [ALL]
SELECT col_list2 FROMtable_name2
-
比较运算符
等于:=
不等于:<>
大于:>
小于:<
大于等于:>=
小于等于:<=
-
逻辑运算符
并且:AND
或者:OR
非:NOT
-
通配符
_:表示一个字符
%:表示任意长度的字符
[]:表示指定范内
[^]:不在括号中
-
聚合函数
求和:SUN(col)
求平均:AVG(col)
求最小:MIN(col)
求最大:MAX(col)
计数:COUNT(col)
-
日期与时间函数
-
返回当前日期:
SELECT CURFATE()|SELECTCURRENT_DATE()
SELECTCRDATE()+0/*将年月日拼接成数字*/
-
返回当前时间
SELECT CURTIME()|SELECTCURRENT_TIME()
SELECT CURTIME()+0/*将时分秒拼接成数字*/
-
返回当前日期时间
SELECTCURRENT_TIMESTAMP()|SELECT LOCALTIME()|SELECT NOW()|SYSDATE()
-
返回月份
SELECT MONTH(date)/*返回月份数字*/
SELECT MONTHNAME(date)/*返回月份英文名称*/
-
获取星期
SELECT DAYOFNAME(date)/*返回星期几英文名称*/
SELECT DAYOFWEEK(date)/*返回一周中第几天,星期日是第1天*/
SELECT WEEKDAY(date)/*返回一周中第几天,星期一是第0天*/
SELECT WEEK(date) /*返回一年中第几周,第一周是0*/
SELECT WEEKOFYEAR(date) /*返回一年中第几周,第一周是1*/
-
获取天数
SELECT DAYOFYEAR(date)/*一年中第几天,1月1日是第一天*/
SELECT DAYOFMONTH(date)/*一月中第几天,1日是第一天*/
-
获取年份
SELECT YEAR(date)
-
获取季度
SELECT QUARTER(date)
-
获取小时
SELECT HOUR(time)
-
获取分钟
SELECT MINUTE(time)
-
获取秒数
SELECT SECOND(time)
-
数学函数
-
绝对值函数
SELECT ABS(x)
-
符号函数
SELECT SIGN(x)
-
获取随机数数函数
/*
生成(0,1)的随机数
X为随机数种子,x固定生成的随机数固定
*/
SELECT RAND()|RAND(x)
-
获取整数函数
SELECT CEIL(x)|CEILING(x)/*取不小于x的整数中最小的一个*/
SELECT FLOOR(x) /*取不大于x的整数中最大的一个*/
-
四舍五入函数
SELECT ROUND(x)/*保留整数*/
SELECT ROUND(x,y)/*对x保留小数点后y位*/
SELECT TRUNCATE(x,y)/*对x的小数点后y位舍去*/
-
求余函数
SELECT MOD(x,y)/*求x除以y的余数*/
-
求幂运算函数
SELECT POW(x,y)|POWER(x,y)/*求x的y次方*/
SELECT EXP(x) /*求e的x次方*/
SELECT SQRT(x) /*求x的算数平方根,若x小于0,输出NULL*/
-
角度弧度互换函数
SELECT RADIANS(x)/*角度转弧度*/
SELECT DEGREES(x)/* 弧度转角度*/
-
圆周率函数
SELECT PI()/*返回π值*/
-
三角函数
SELECT SIN(x)
SELECT ASIN(x)
SELECT COS(x)
SELECT ACOS(x)
SELECT TAN(x)
SELECT ATAN(x)
SELECT COT(x)
-
字符串函数
-
计算字符串字符数函数
SELECT CHAR_LENGTH(str)
-
计算字符串字节函数
SELECT LENGTH(str)
-
合并字符串函数
SELECT CONCAT(str_list)/*如果存在NULL参数,返回结果为NULL*/
SELECT CONCAT(x,str_list)/*x为连接符/
-
替换字符串函数
SELECT INSERT(str,i,len,s)/*str从第i个字符开始len个字符替换成s*/
SELECT REPLACE(str,s1,s2)/*str中全部的s1都替换成s2*/
-
截取字符串函数
SELECT LEFT(str,len)|RIGHT(str,len)/截取str左边(右边)开始数len个长度的字符串*/
-
重复生成字符串函数
SELECT REPEAT(str,n)/*n个str连接一起*/
-
大小写转换函数
SELECT LOWER(str)|LCASE(str)/*str全部字符转成小写*/
SELECT UPPER(str)|UCASE(str)/*str全部字符转成大写*/
-
填充字符串函数
SELECT LPAD(str,len,s)/*str左边填充s到该字符串长度为len*/
SELECT RPAD(str,len,s)/*str右边填充s到该字符串长度为len*/
-
删除空格函数
SELECT LTRIM(str)|RTRIM(str)/*删除str左边(右边)空格*/
SELECT TRIM(str)/*删除两边空格*/
-
删除指定字符串函数
SELECT TRIM(s FROM str)/*从str中删除s*/
-
获取子字符串函数
SELECT SUBSTRING(str,i,len)|MID(str,i,len)/*从str的第i个字符开始截取长度为len的字符串*/
-
返回指定位置字符串函数
SELECT ELT(i,str_list)/*返回str_list中第i个字符串*/
-
返回指定字符串位置函数
SELECT FIELD(str,str_list)/*从str_list中返回str的位置,若没找到返回0*/
-
系统函数
-
获取MySQL版本号
SELECT VERSION()
-
查看当前用户连接数
SELECT CONNECTION_ID()
-
查看当前所用数据库
SELECT DATABASE()
SELECT SCHEMA()
-
获取用户名
SELECT USER()
SELECT CURRENT_USER()
SELECT SYSTEM_USER()
SELECT SESSION_USER()
-
关系型数据库常用概念
/*
关系型数据库以表格形式表示数据
字段(域)
行(记录)
列
冗余:可以不存在的数据但真实存在
完整性:数据的正确性
失去数据完整性:数据输入有误
主键:某一字段,主键的值不能重复,也不能为空
外键:表的某列数据来源于另一张表的某列
失去实体完整性:主键重复或主键为空
失去引用完整性:引用不存在数据
失去域完整性:数据输入在类型或范围或格式输入有误
*/