数据库_MySQL

基本操作

常用命令

1、登录
mysql ‐uroot ‐p
2、设置新密码
set PASSWORD=PASSWORD(‘123456’);
3、远程授权
grant all privileges on . to ‘root’ @’%’ identified by ‘123456’;
flush privileges;
4、查看版本
select version(), current_date;

5、查看数据库
show databases;
6、切换指定数据库
use test;
7、查看指定数据库所有表
show tables;
8、查看建表语句/表详情
show create table people;
desc people;
9、删除数据库
drop database test;
10、删除数据库中的表
drop table people;

11、表–导入记录
创建一个people.txt的文件(注:每个字段中用tab键隔开,字段没有值得记录用\N代替,一行一条记录)
load data local infile ‘/root/data/people.txt’ into table people;
12、表–删除记录
delete from people;
13、表–更新记录
update people set birth = ‘1989‐08‐31’ where name = ‘Bowser’;

14、删除、添加或修改表字段
mysql> ALTER TABLE testalter_tbl DROP i;
mysql> ALTER TABLE testalter_tbl ADD i INT;
15、修改字段类型及名称
mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);
16、修改表名
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

17、显示索引信息,\G 格式化输出
SHOW INDEX FROM table_name; \G

编码

1、查看
show variables like ‘character%’;
2、设置

# vi /etc/my.cnf  如下(少补): 
[mysqld]  
character‐set‐server=utf8   
collation‐server=utf8_general_ci   
sql_mode='NO_ENGINE_SUBSTITUTION' 
[mysql]  
default‐character‐set = utf8 
[mysql.server]  
default‐character‐set = utf8 
[mysqld_safe]  
default‐character‐set = utf8 
[client]  
default‐character‐set = utf8 
重启mysql 
# service mysqld restart

目录配置文件

A、/etc/my.cnf 这是mysql的主配置文件
B、/var/lib/mysql mysql数据库的数据库文件存放位置
C、/var/log/mysql数据库的日志输出存放位置
D、查看端口。Netstat –nltp 看是否能找到3306的端口

范式

概念:范式就是符合某一规范级别的关系模式的集合。共有7种范式:
1NF ⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF⊃6NF

一般需要满足前三大范式

范式一:
如果一个关系模式R的所有属性都是不可分割的基本数据项,则这个关系属于第一范式。
范式二:
若关系模式R属于第一范式,且每个非主属性都是完全函数依赖于主键,则R属于 第二范式。
范式三:
若关系模式R属于第一范式,且每个非主属性都不传递函数依赖于主键,则R属于 第三范式。

聚合函数

1.count函数:统计个数(行数)
2.sum函数:求和
3.avg函数:求平均值
4.max、min函数 求大值和小值

备份恢复

备份:
mysqldump -u 用户名 -p 数据库名> 磁盘SQL文件路径

恢复:
需要手动的先创建数据库
mysql -u 用户名-p 导入库名< 硬盘SQL文件绝对路径

数据类型

数值

TINYINT 1 字节 (-128,127) (0,255)
小 整 数 值

SMALLINT 2 字节 (-32 768,32 767) (0,65 535)
大 整 数 值

MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215)
大 整 数 值

INT或 INTEGER 4 字节 (-2 147 483 648,2 147 483 647)
(0,4 294 967 295)
大 整 数 值

BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
极 大 整 数 值

FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E38,3.402 823 466 351 E+38)
0,(1.175 494 351 E-38,3.402 823 466 E+38)
单 精 度 浮 点 数 值

DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)
0,(2.225 073 858 507 201 4 E308,1.797 693 134 862 315 7 E+308)
双 精 度 浮 点 数 值

DECIMAL 对 DECIMAL(M,D) ,如果M>D, 为M+2否则为 D+2 依赖于M和D的值 依赖于M和D的值
小 数 值

日期/时间

DATE 3 1000-01-01/9999-12-31
YYYY-MMDD
日期 值

TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS
时间 值或 持续 时间

YEAR 1 1901/2155 YYYY
年份 值

DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59
YYYY-MMDD HH:MM:SS
混合 日期 和时 间值

TIMESTAMP 4
1970-01-01 00:00:00/2038结束时间是 第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07
YYYYMMDD HHMMSS
混合 日期 和时 间 值, 时间 戳

字符串

CHAR 0-255字节 定长字符串
VARCHAR 0-65535 字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65 535字节 二进制形式的长文本数据
TEXT 0-65 535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

查询

多表查询

1、内连接:取交集记录
select * from 表名1 inner join 表名2 on 条件

2、左连接:显示左表记录为主
select * from 表1 left outer join 表2 on 条件;

3、右连接:显示右表记录为主
select * from 表1 right outer join 表2 on 条件;

关联子查询

1、in和exist关键词的用法
in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。
exists:表示存在,当子查询的结果存在,就会显示主查询中的所有数据。

2、union 和union all使用法
UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)
UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

3、case when 语句
select *,
case
when salary < 5000 then “低等收入”
when salary>= 5000 and salary < 10000 then “中等收入”
when salary > 10000 then “高等收入”
end as level,
case sex
when “female” then 1
when “male” then 0
end as flag
from employee;

函数

字符串函数

ASCII(s)
返回字符串 s 的第一 个字符的 ASCII 码。
返回 CustomerName 字段第一个字母的 ASCII 码: SELECT ASCII(CustomerName) AS NumCodeOfFirstCharFROM Customers;
CHAR_LENGTH(s)
返回字符串 s 的字符 数
返回字符串 vander 的字符数 SELECT CHAR_LENGTH(“vander”) AS LengthOfString;
CHARACTER_LENGTH(s)
返回字符串 s 的字符 数
返回字符串 vander 的字符数 SELECT CHARACTER_LENGTH(“vander”) AS LengthOfString;
CONCAT(s1,s2…sn)
字符串 s1,s2 等多个 字符串合并为一个字 符串
合并多个字符串 SELECT CONCAT("SQL ", “vander “, “Gooogle “, “Facebook”) AS ConcatenatedString;
CONCAT_WS(x, s1,s2…sn)
同 CONCAT(s1,s2,…) 函数,但是每个字符 串直接要加上 x,x 可以是分隔符
合并多个字符串,并添加分隔符: SELECT CONCAT_WS(”‐”, “SQL”, “Tutorial”, “is”, “fun!”)AS ConcatenatedString;
FIELD(s,s1,s2…)
返回第一个字符串 s 在字符串列表 (s1,s2…)中的位置
返回字符串 c 在列表值中的位置: SELECT FIELD(“c”, “a”, “b”, “c”, “d”, “e”);
FIND_IN_SET(s1,s2)
返回在字符串s2中与 s1匹配的字符串的位 置
返回字符串 c 在指定字符串中的位置: SELECT FIND_IN_SET(“c”, “a,b,c,d,e”);
FORMAT(x,n)
函数可以将数字 x 进 行格式化 “#,###.##”, 将 x 保 留到小数点后 n 位,后一位四舍五 入。
格式化数字 “#,###.##” 形式: SELECT FORMAT(250500.5634, 2); ‐‐ 输出 250,500.56
INSERT(s1,x,len,s2)
字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串
从字符串第一个位置开始的 6 个字符替换为 vander: SELECT INSERT(“google.com”, 1, 6, “runnob”); ‐‐ 输出:vander.com
LOCATE(s1,s)
从字符串 s 中获取 s1 的开始位置
获取 b 在字符串 abc 中的位置: SELECT INSTR(‘abc’,‘b’) ‐‐ 2
LCASE(s)
将字符串 s 的所有字 母变成小写字母
字符串 vander 转换为小写: SELECT LOWER(‘vander’) ‐‐ vander
LEFT(s,n)
返回字符串 s 的前 n 个字符
返回字符串 vander 中的前两个字符: SELECT LEFT(‘vander’,2) ‐‐ it
LEFT(s,n)
返回字符串 s 的前 n 个字符
返回字符串 abcde 的前两个字符: SELECT LEFT(‘abcde’,2) ‐‐ ab
LOCATE(s1,s)
从字符串 s 中获取 s1 的开始位置
返回字符串 abc 中 b 的位置: SELECT LOCATE(‘b’, ‘abc’) ‐‐ 2
LOWER(s)
将字符串 s 的所有字 母变成小写字母
字符串 vander 转换为小写: SELECT LOWER(‘vander’) ‐‐ vander
LPAD(s1,len,s2)
在字符串 s1 的开始 处填充字符串 s2, 使字符串长度达到 len
将字符串 xx 填充到 abc 字符串的开始处: SELECT LPAD(‘abc’,5,‘xx’) ‐‐ xxabc
LTRIM(s)
去掉字符串 s 开始处 的空格
去掉字符串 vander开始处的空格: SELECT LTRIM(” vander”) AS LeftTrimmedString;‐‐ vander
MID(s,n,len)
从字符串 s 的 start 位置截取长度为 length 的子字符 串,同 SUBSTRING(s,n,len)
从字符串 vander 中的第 2 个位置截取 3个 字符: SELECT MID(“vander”, 2, 3) AS ExtractString; ‐‐ UNO
POSITION(s1 IN s)
从字符串 s 中获取 s1 的开始位置
返回字符串 abc 中 b 的位置: SELECT POSITION(‘b’ in ‘abc’) ‐‐ 2
REPEAT(s,n)
将字符串 s 重复 n 次
将字符串 vander 重复三次: SELECT REPEAT(‘vander’,3) ‐‐ vandervandervander
REPLACE(s,s1,s2)
将字符串 s2 替代字 符串 s 中的字符串 s1
将字符串 abc 中的字符 a 替换为字符 x: SELECT REPLACE(‘abc’,‘a’,‘x’) ‐‐xbc
REVERSE(s)
将字符串s的顺序反 过来
将字符串 abc 的顺序反过来: SELECT REVERSE(‘abc’) ‐‐ cba
RIGHT(s,n)
返回字符串 s 的后 n 个字符
返回字符串 vander 的后两个字符: SELECT RIGHT(‘vander’,2) ‐‐ ob
RPAD(s1,len,s2)
在字符串 s1 的结尾 处添加字符串 s1, 使字符串的长度达到 len
将字符串 xx 填充到 abc 字符串的结尾处: SELECT RPAD(‘abc’,5,‘xx’) ‐‐ abcxx
RTRIM(s)
去掉字符串 s 结尾处 的空格
去掉字符串 vander 的末尾空格: SELECT RTRIM("vander ") AS RightTrimmedString; ‐‐ vander
SPACE(n) 返回 n 个空格 返回 10 个空格: SELECT SPACE(10);
STRCMP(s1,s2)
比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1
比较字符串: SELECT STRCMP(“vander”, “vander”); ‐‐ 0
SUBSTR(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
从字符串 vander 中的第 2 个位置截取 3个 字符: SELECT SUBSTR(“vander”, 2, 3) AS ExtractString; ‐‐ UNO
SUBSTRING(s, start, length)
从字符串 s 的 start 位置截取长度为 length 的子字符串
从字符串 vander 中的第 2 个位置截取 3个 字符: SELECT SUBSTRING(“vander”, 2, 3) AS ExtractString; ‐‐ UNO
SUBSTRING_INDEX(s, delimiter, number)
返回从字符串 s 的第 number 个出现的分 隔符 delimiter 之后 的子串。如果 number 是正数,返 回第 number 个字 符左边的字符串。如 果 number 是负 数,返回第(number 的绝对值(从右边数)) 个字符右边的字符 串。
SELECT SUBSTRING_INDEX(‘ab’,’’,1) ‐‐ aSELECT SUBSTRING_INDEX(‘ab’,’’,‐1) ‐‐ bSELECT SUBSTRING_INDEX(SUBSTRING_INDEX(‘abcde’,’’,3),’’,‐1) ‐ c
TRIM(s)
去掉字符串 s 开始和 结尾处的空格
去掉字符串 vander 的首尾空格: SELECT TRIM(’ vander ') AS TrimmedString;
UCASE(s) 将字符串转换为大写 将字符串 vander 转换为大写: SELECT UCASE(“vander”); ‐‐ vander
UPPER(s) 将字符串转换为大写 将字符串 vander 转换为大写: SELECT UPPER(“vander”); ‐‐ vander

数字函数

ABS(x) 返回 x 的绝对值 返回 -1 的绝对值: SELECT ABS(‐1) ‐‐ 返回1
ACOS(x)
求 x 的反余弦值(参数 是弧度)
SELECT ACOS(0.25);
ASIN(x)
求反正弦值(参数是弧 度)
SELECT ASIN(0.25);
ATAN(x)
求反正切值(参数是弧 度)
SELECT ATAN(2.5);
ATAN2(n, m)
求反正切值(参数是弧 度)
SELECT ATAN2(‐0.8, 2);
AVG(expression)
返回一个表达式的平 均值,expression 是 一个字段
返回 Products 表中Price 字段的平均值: SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x)
返回大于或等于 x 的 小整数
SELECT CEIL(1.5) ‐‐ 返回2
CEILING(x)
返回大于或等于 x 的 小整数
SELECT CEIL(1.5) ‐‐ 返回2
COS(x) 求余弦值(参数是弧度) SELECT COS(2);
COT(x) 求余切值(参数是弧度) SELECT COT(6);
COUNT(expression)
返回查询的记录总 数,expression 参数 是一个字段或者 * 号
返回 Products 表中 products 字段总共有多少条 记录: SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
DEGREES(x) 将弧度转换为角度 SELECT DEGREES(3.1415926535898) ‐‐ 180
n DIV m
整除,n 为被除数,m 为除数
计算 10 除于 5: SELECT 10 DIV 5; ‐‐ 2
EXP(x) 返回 e 的 x 次方
计算 e 的三次方: SELECT EXP(3) ‐‐ 20.085536923188
FLOOR(x)
返回小于或等于 x 的 大整数
小于或等于 1.5 的整数: SELECT FLOOR(1.5) ‐‐ 返回1
GREATEST(expr1, expr2, expr3, …)
返回列表中的大值
返回以下数字列表中的大值: SELECT GREATEST(3, 12, 34, 8, 25); ‐‐ 34 返回以下字 符串列表中的大值: SELECT GREATEST(“Google”, “itcast”, “Apple”); ‐‐ itcast
LEAST(expr1, expr2, expr3, …)
返回列表中的小值
返回以下数字列表中的小值: SELECT LEAST(3, 12, 34, 8, 25); ‐‐ 3 返回以下字符串列表中的 小值: SELECT LEAST(“Google”, “itcast”, “Apple”); ‐‐ Apple
LN
返回数字的自然对数
返回 2 的自然对数: SELECT LN(2); ‐‐ 0.6931471805599453
LOG(x)
返回自然对数(以 e 为 底的对数)
SELECT LOG(20.085536923188) ‐‐ 3
LOG10(x) 返回以 10 为底的对数 SELECT LOG10(100) ‐‐ 2
LOG2(x) 返回以 2 为底的对数
返回以 2 为底 6 的对数: SELECT LOG2(6); ‐‐ 2.584962500721156
MAX(expression) 返回字段 expression 中的最大值
返回数据表 Products 中字段 Price 的最大值: SELECT MAX(Price) AS LargestPrice FROM Products;
MIN(expression)
返回字段 expression 中的小值
返回数据表 Products 中字段 Price 的小 值: SELECT MIN(Price) AS LargestPrice FROM Products;
MOD(x,y)
返回 x 除以 y 以后的 余数
5 除于 2 的余数: SELECT MOD(5,2) ‐‐ 1
PI()
返回圆周率 (3.141593)
SELECT PI() ‐‐3.141593
POW(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POW(2,3) ‐‐ 8
POWER(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POWER(2,3) ‐‐ 8
RADIANS(x) 将角度转换为弧度
180 度转换为弧度: SELECT RADIANS(180) ‐‐ 3.1415926535898
RAND() 返回 0 到 1 的随机数 SELECT RAND() ‐‐0.93099315644334
ROUND(x) 返回离 x 近的整数 SELECT ROUND(1.23456) ‐‐1
SIGN(x)
返回 x 的符号,x 是负 数、0、正数分别返回 -1、0 和 1
SELECT SIGN(‐10) ‐‐ (‐1)
SIN(x) 求正弦值(参数是弧度) SELECT SIN(RADIANS(30)) ‐‐ 0.5
SQRT(x) 返回x的平方根 25 的平方根: SELECT SQRT(25) ‐‐ 5
SUM(expression) 返回指定字段的总和
计算 OrderDetails 表中字段 Quantity 的总 和: SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
TAN(x) 求正切值(参数是弧度) SELECT TAN(1.75); ‐‐ ‐5.52037992250933
TRUNCATE(x,y)
返回数值 x 保留到小 数点后 y 位的值(与 ROUND 大的区别是 不会进行四舍五入)
SELECT TRUNCATE(1.23456,3) ‐‐ 1.234

日期函数

ADDDATE(d,n) 计算其实日期 d 加上 n 天的日期
ADDTIME(t,n) 时间 t 加上 n 秒的时间
CURDATE() 返回当前日期
CURRENT_DATE() 返回当前日期
CURRENT_TIME 返回当前时间
CURRENT_TIMESTAMP() 返回当前日期和时间
CURTIME() 返回当前时间
DATE() 从日期或日期时间表达式中提取日期值
DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数
DATE_ADD(d,INTERVAL expr type)
计算起始日期 d 加上一个时间段后的日期
DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d
DATE_SUB(date,INTERVAL expr type)
函数从日期减去指定的时间间隔。
DAY(d) 返回日期值 d 的日期部分
DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday
DAYOFMONTH(d) 计算日期 d 是本月的第几天
DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推
DAYOFYEAR(d) 计算日期 d 是本年的第几天
EXTRACT(type FROM d)
从日期 d 中获取指定的值,type 指定返回的值。 type可取值 为: MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECON
ROM_DAYS(n) 计算从 0000 年 1 月 1 日开始 n 天后的日期
HOUR(t) 返回 t 中的小时值
LAST_DAY(d) 返回给给定日期的那一月份的后一天
LOCALTIME() 返回当前日期和时间
LOCALTIMESTAMP() 返回当前日期和时间
MAKEDATE(year, day-ofyear)
基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期
MAKETIME(hour, minute, second)
组合时间,参数分别为小时、分钟、秒
MICROSECOND(date) 返回日期参数所对应的毫秒数
MINUTE(t) 返回 t 中的分钟值
MONTHNAME(d) 返回日期当中的月份名称,如 Janyary
MONTH(d) 返回日期d中的月份值,1 到 12
NOW() 返回当前日期和时间
PERIOD_ADD(period, number)
为 年-月 组合日期添加一个时段
PERIOD_DIFF(period1, period2)
返回两个时段之间的月份差值
QUARTER(d) 返回日期d是第几季节,返回 1 到 4
SECOND(t) 返回 t 中的秒钟值
SEC_TO_TIME(s) 将以秒为单位的时间 s 转换为时分秒的格式
STR_TO_DATE(string, format_mask)
将字符串转变为日期
SUBDATE(d,n) 日期 d 减去 n 天后的日期
SUBTIME(t,n) 时间 t 减去 n 秒的时间
SYSDATE() 返回当前日期和时间
TIME(expression) 提取传入表达式的时间部分
TIME_FORMAT(t,f) 按表达式 f 的要求显示时间 t
TIME_TO_SEC(t) 将时间 t 转换为秒
TIMEDIFF(time1, time2) 计算时间差值
TIMESTAMP(expression, interval)
单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和
TO_DAYS(d) 计算日期 d 距离 0000 年 1 月 1 日的天数
WEEK(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53
WEEKDAY(d) 日期 d 是星期几,0 表示星期一,1 表示星期二
WEEKOFYEAR(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53
YEAR(d) 返回年份
YEARWEEK(date, mode) 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推

高级函数

BIN(x) 返回 x 的二进制编码
15 的 2 进制编 码: SELECT BIN(15); ‐ 1111
BINARY(s) 将字符串 s 转换为二进制字符串
SELECT BINARY “itcast”;‐> itcast
CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 … WHEN conditionN THEN resultN ELSE resultEND
CASE 表示函数开始,END 表示函数结 束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result, 而当有一个成立之后,后面的就不执行 了。
SELECT CASE   WHEN 1 > 0  THEN ‘1 > 0’  WHEN 2 > 0   THEN ‘2 > 0’  ELSE ‘3 > 0’  END‐>1 > 0
CAST(x AS type) 转换数据类型
字符串日期转换为日 期: SELECT CAST(“2017‐08‐29” AS DATE);‐> 2017‐08‐29
COALESCE(expr1, expr2, …, expr_n)
返回参数中的第一个非空表达式(从左 向右)
SELECT COALESCE(NULL, NULL, NULL, ‘itcast.com’, NULL, ‘google.com’);> itcast.com
CONNECTION_ID() 返回服务器的连接数
SELECT CONNECTION_ID();‐> 4292835
CONV(x,f1,f2) 返回 f1 进制数变成 f2 进制数
SELECT CONV(15, 10, 2);‐> 1111
CONVERT(s USING cs) 函数将字符串 s 的字符集变成 cs
SELECT CHARSET(‘ABC’)‐>utf‐8 SELECT CHARSET(CONVERT(‘ABC’ USING gbk))‐>gbk
CURRENT_USER() 返回当前用户
SELECT CURRENT_USER();‐> guest@%
DATABASE() 返回当前数据库名
SELECT DATABASE(); ‐> itcast
IF(expr,v1,v2)
如果表达式 expr 成立,返回结果 v1; 否则,返回结果 v2。
SELECT IF(1 > 0,‘正 确’,‘错误’) ‐>正确
IFNULL(v1,v2)
如果 v1 的值不为 NULL,则返回 v1, 否则返回 v2。
SELECT IFNULL(null,‘Hello Word’)‐>Hello Word
ISNULL(expression) 判断表达式是否为空
SELECT ISNULL(NULL);‐>1
LAST_INSERT_ID() 返回近生成的 AUTO_INCREMENT 值
SELECT LAST_INSERT_ID();‐>6
NULLIF(expr1, expr2)
比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1
SELECT NULLIF(25, 25);‐>
SESSION_USER() 返回当前用户 SELECT SESSION_USER();‐> guest@%
SYSTEM_USER() 返回当前用户
SELECT SYSTEM_USER();‐> guest@%
USER() 返回当前用户
SELECT USER();‐> guest@%
VERSION() 返回数据库的版本号
SELECT VERSION()‐> 5.6.34

索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不 是组合索引。组合索引,即一个索引包含多个列。
创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表 时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。

普通索引

方式一
CREATE INDEX indexName ON mytable(username(length));
备注:如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length
方式二
ALTER table tableName ADD INDEX indexName(columnName)
方式三
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
删除索引的语法
DROP INDEX [indexName] ON mytable;

有四种方式来添加数据表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引 值必须是唯一的,且不能为NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须 是唯一的(除了NULL外,NULL可能会出现多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现 多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。
以下实例为在表中添加索引。
mysql> ALTER TABLE testalter_tbl ADD INDEX ©;
你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:
mysql> ALTER TABLE testalter_tbl DROP INDEX c;

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值 的组合必须唯一。它有以下几种创建方式:
方式一
CREATE UNIQUE INDEX indexName ON mytable(username(length))
方式二
ALTER table mytable ADD UNIQUE [indexName] (username(length))
方式三
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:
mysql> ALTER TABLE testalter_tbl MODIFY itcast INT NOT NULL; mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (itcast);
你也可以使用 ALTER 命令删除主键:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。

事务

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据 库操作语句就构成一个事务!

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

事务用来管理 insert,update,delete 语句

事务是必须满足4个条件(ACID):
原子性(Atomicity,或称不可分割性)
一致性(Consistency)
隔离性(Isolation,又称独立性)
持久性(Durability)

事务隔离分为不同级别:
读未提交(Read uncommitted)
读提交(read committed)
可重复读(repeatable read)
串行化 (Serializable)

MYSQL 事务处理主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
BEGIN 开始一个事务
ROLLBACK 事务回滚
COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
SET AUTOCOMMIT=0 禁止自动提交
SET AUTOCOMMIT=1 开启自动提交

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值