码迷,mamicode.com
首页 > 数据库 > 详细

MySQL学习笔记

时间:2015-04-09 23:49:45      阅读:397      评论:0      收藏:0      [点我收藏+]

标签:

1、关系型数据库管理系统
RDBMS(Relational Database Management System)

1.1、关系型数据库的三大范式
范式简单的说就是,一张数据表的表结构所符合的某种设计标准的级别。
第一范式(1NF):符合1NF的关系中的每个属性都不可再分。
第二范式(2NF):2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
第三范式(3NF):3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。

简单理解:
第一范式:属性不可分割。(属性就是表中的字段
第二范式:要有主键,要求其他字段都依赖于主键。(附:主键的判断办法,如果主键确定了,其他所有的键就确定了)
第三范式:要消除传递依赖,方便理解,可以看做是“消除冗余”。

1.2、术语
数据库:表的集合
数据表:数据矩阵
行:
列:
主键:主键是唯一的。一张表中只能包含一个主键。主要用来查询。
外键:用于关联两个表。
索引:对表中一列或多列数据进行排序的结构。

2、安装MySQL
Linux/UNIX 平台
MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。
MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
MySQL-bench - MySQL数据库服务器的基准和性能测试工具。

Windows 平台
下载安装包

3、数据类型
类型
大小
范围(有符号)
范围(无符号)
用途
备注
TINYINT
1 字节
(-128, 127)
(0, 255)
小整数值

SMALLINT
2 字节
(-32768, 32767)
(0, 65535)
大整数值

MEDIUMINT
字节
(-8388608, 8388607)
(0, 16777215)
大整数值

INT  或
INTEGER
字节
(-2147483648, 2147483647)
(0, 4294967295)
大整数值

BIGINT
字节
(-9233372036854775808
, 9223372036854775807)
(0, 18446744073709551615)
极大整数值

FLOAT
字节
(-3.402823466E+38, 1.175494351E-38)
, 0
, (1.175494351E-38, 3.402823466351E+38)
0
, (1.175494351E-38, 3.402823466E+38)
单精度
浮点数值

DOUBLE
字节
(1.7976931348623157E+308, 2.2250738585072014E-308)
, 0
, (2.2250738585072014E-308, 1.7976931348623157E+308)
0
, (2.2250738585072014E-308, 1.7976931348623157E+308)
双精度
浮点数值

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

DATE
3 字节
1000-01-01/9999-12-31

日期值
YYYY-MM-DD
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-MM-DD
HH:MM:SS
TIMESTAMP
8 字节
1970-01-01 00:00:00/2037 年某时

混合日期和时间值,时间戳
YYYYMMDD
HHMMSS
CHAR
0-255 字节


定长字符串

VARCHAR
0-255 字节


变长字符串

TINYBLOB
0-255 字节


不超过 255 个字符的二进制字符串

TINYTEXT
0-255 字节


短文本字符串

BLOB
0-65535 字节


二进制形式的长文本数据

TEXT
0-65535 字节


长文本数据

MEDIUMBLOB
0-16777215 字节


二进制形式的中等长度文本数据

MEDUIMTEXT
0-16777215 字节


中等长度文本数据

LONGBLOB
0-4294967295 字节


二进制形式的极大文本数据

LONGTEXT
0-4294967295 字节


极大文本数据


4、常用命令
分类
说明
命令
备注
连接
登录服务器
mysql -h1.2.3.4 -u root -p

显示
库列表
SHOW DATABASES


表列表
SHOW TABLES


表的结构
SHOW CREATE TABLE table_name
DESCRIBE table_name


表的属性信息
SHOW COLUMNS FROM table_name


表的索引信息
SHOW INDEX FROM table_name


表的状态信息
SHOW STATUS LIKE ‘table_name‘


服务器 的状态信息
SHOW STATUS


服务器配置信息
SHOW VARIABLES


服务器的版本信息
SELECT VERSION()


当前库名
SELECT DATABASE()


当前用户名
SELECT USER()

选择

USE database_name

新建
CREATE DATABASE database_name


CREATE TABLE table_name (column_name column_type)


临时表
CREATE TEMPORARY TABLE table_name (column_name column_type)
临时表只在当前连接有效,连接断开后,临时表自动销毁。
插入
INSERT INTO table_name (field1, field2, ...fieldN)
                                      VALUES
                                      (value1, value2, ...valueN)

删除
DROP DATABASE database_name


DELETE FROM table_name [WHERE clause_etc]


DROP TABLE table_name

查询
SELECT field1, field2, ...fieldN FROM table_name1, table_name2, ...
[WHERE clause_etc]
[OFFSET M]
[LIMIT N]

查询( 联表
行(内联结)
隐式:
SELECT table1.column table2.column FROM table1, table2
WHERE table1.column2 = table2.column2
显式:
SELECT table1.column FROM table1 INNER JOIN table2 ON table1.column2 = table2.column2
仅支持 SELECT UPDATE DELETE

行(外左联结)
SELECT table1.column FROM table1 LEFT JOIN table2 ON table1.column2 = table2.column2
table1 中的记录全部保留,如果 table2 中无对应的,则默认留空

行(外右联结)
SELECT table1.column FROM table1 RIGHT JOIN table2 ON table1.column2 = table2.column2
table2 中的记录全部保留,如果 table1 中无对应的,则默认留空
更新
UPDATE table_name SET field1=value1, field2=value2
[WHERE clause_etc]

修改
添加列
ALTER TABLE table_name ADD column_name type
ALTER TABLE table_name ADD column_name type FIRST
ALTER TABLE table_name ADD column_name type AFTER column2
添加到最后一列 (默认)
添加到第一列
添加到指定列 column2 之后

删除列
ALTER TABLE table_name DROP column_name


修改列(类型)
ALTER TABLE table_name MODIFY column_name type
只修改列字段的类型

修改列(名称)
ALTER TABLE table_name CHANGE old_column column_name type
同时修改列字段的名称和类型

ALTER TABLE table_name RENAME TO table_name2
修改表名
限定条件
偏移量
OFFSET offset_number


行数
LIMIT limit_number


任意条件
WHERE clause_etc


正则表达式
WHERE column REGEXP ‘exp‘

排序
升序
ASC


降序
DESC

索引
CREATE [UNIQUE] INDEX index_name ON table_name(column(length))
ALTER table_name ADD [UNIQUE] INDEX [index_name] ON ( column(length))
DROP INDEX [index_name] ON table_name
column 如果是 CHAR, VCHAR 类型,length 可以小于字段长度;
如果是 BLOB, TEXT 类型,必须指定 length。

列(组合)







5、操作符
下表中,假设 A=10  B=20
操作符
描述
实例
=
等号,检测两个值是否相等,如果是返回true
(A = B) 返回false
<>, !=
不等于,检测两个值是否不相等,如果是返回true
(A != B) 返回true
>
大于,检测左边的值是否大于右边的值,如果是返回true
(A > B) 返回false
<
小于,检测左边的值是否小于右边的值,如果是返回true
(A < B) 返回true
>=
大于等于,检测左边的值是否大于等于右边的值,如果是返回true
(A >= B) 返回false
<=
小于等于,检测左边的值是否小于等于右边的值,如果是返回true
(A <= B) 返回true
IS NULL
检测值是否为NULL

IS NOT NULL
检测值是否不为NULL


6、连接符
操作符
描述
备注
AND
连接两个条件,表示左边与右边的条件必须同时成立,结果才成立

OR
连接两个条件,表示左边与右边的条件任意一个成立,结果就成立

LIKE
条件匹配,通常与 % 一起使用达到模糊查询的效果
WHERE feild LIKE ‘%abc‘

7、正则表达式
模式
描述
备注
^
匹配输入字符的 开始位置。如果设置了 RegExp 对象的 Multiline 属性,
^ 也匹配 ‘\n‘ 或 ‘\r‘ 之后的位置。

$
匹配输入字符的结束位置。如果设置了 RegExp 对象的 Multiline 属性,
^ 也匹配 ‘\n‘ 或 ‘\r‘ 之前的位置。

[...]
字符集合。匹配所包含的任意一个字符。
例如,‘[abc]‘ 可以匹配 ‘plain‘ 中的 ‘a‘。
.
匹配除 ‘\n‘ 之外的任何单个字符。
要匹配包括 ‘\n‘ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。
[^...]
负值字符集合。匹配未包含的任意字符。
例如,‘[^abc]‘ 可以匹配 ‘plain‘ 中的 ‘p‘ ‘l‘ ‘i‘ ‘n‘
{n}
n 是一个非负整数。
匹配前面表达式确定的 n 次。
例如,‘o{2}‘ 能匹配 ‘food‘
{n, m}
m n 均为非负整数,其中 n <= m。
匹配前面表达式最少 n 次,最多 m 次。

p1|p2
匹配 p1 或 p2。
例如,‘z|food‘ 能匹配 ‘z‘ 或 ‘food‘
*
匹配前面的子表达式零次或多次 。
等价于 {0,}
例如,‘zo*‘ 能匹配 ‘z‘ ‘ozz‘。
+
匹配前面的子表达式一次或多次。
等价于 {1,}


8、事务
用来保证一组 sql 命令,全部执行,如果失败回滚到执行前的状态。
事务必须满足4个条件(ACID):Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、durability(可靠性)
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

9、序列
使用关键词 AUTO_INCREMENT 来定义一个整数列自增。

10、SQL 注入
防止 SQL 注入,需要注意以下几点:
  • 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则,或限制长度;对单引号和双"-"进行转换等。
  • 永远不要使用动态拼装 sql,可以使用参数化的 sql 或者直接使用存储过程进行数据查询存取。
  • 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者 hash 掉密码和第三的信息。
  • 应用的异常信息应该给出尽可以少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
  • sql 注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用 sql 注入检测工具。


转载请注明来自隐居士(石硕)的CSDN博客:blog.csdn.net/shishuo365 如有疑问请发邮件shishuo365#126.com(将#更换为@)

MySQL学习笔记

标签:

原文地址:http://blog.csdn.net/shishuo365/article/details/44967091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!