码神营地-Mysql基础知识

<一>Linux下的mysql的安装方法:
更过关于mysql操作和学习教程请进入码神营地官网:www.icodegod.com

  1. ####ubtun 采用apt-get在线安装:
    1.首先检测系统中是否已经安装了mysql
    sudo netstat -tap | grep mysql

    2.如果没有安装,则安装mysql
    sudo apt-get install mysql-client mysql-server
    3.过程中会让输入root密码进行输入继续安装

    4.测试安装是否成功
    sudo netstat -tap | grep mysql

    5.也可以通过登陆mysql测试
    mysql -uroot -p

    6.mysql的简单管理命令
    启动mysql服务:sudo start mysql
    停止mysql服务:sudo stop mysql
    修改mysql管理员密码:sudo mysqladmin -u root newpassword
    设置远程访问(正常情况下,mysql占用3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问(通过netstat可以查看到)。取消本地监听需要修改 my.cnf文件:):
    sudo vi /etc/mysql/my.cnf文件):
    bind-address = 127.0.0.1//找到此内容并且注释掉即可

    7.mysql安装后的目录机构分析(此结构只针对与apt-get install 情况)
    数据库存放目录:/var/lib/mysql/
    相关配置文件:/usr/share/mysql/
    相关命令存放目录:/usr/bin(mysqladmin mysqldump等命令)
    启动脚本存放目录:/etc/rc.d/init.d/
    8.mysql图形化管理软件
    开源:Mysql Workbench
    商业:Navicat

  2. ####Redhat 采用rpm包yum安装:
    1.查看是否yum仓库中有mysql-server的安装包
    yum list | grep mysql-server

    2.如果有则进行安装:yum install mysql mysql-server mysql-devel -y
    查看安装mysqlserver相关信息:rpm -qi mysql-server
    数据库的启动:service mysqld start
    设置开机自启动:chkconfig mysqld on
    安装完成数据目录为:/var/lib/mysql/

####<二>约束以及修改数据表
1.约束类型包括:
NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
2.外键约束的参照操作
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL:从父表删除或更新行,并设置字表的外键列
RESTRICT:拒绝对父表的删除或更新操作
NO ACTION:标准SQL的关键字,在Mysql中与RESTRICT相同
3.表级约束与列级约束
表级约束:对多个数据列建立的约束(只能在列定义后声明)
列级约束:对一个数据列建立的约束(可在定义列时声明,也可以在列定以后声明)
4.添加单列
ALTER TABLE tbl_name ADD[COLUMN] col_name column_definition [FIRST| AFTER col_name]
5.删除列
ALTER TABLE tbl_name DROP[COLUMN] col_name
6.添加约束
添加主键约束:ALTER TABLE tbl_name ADD[CONSTRAINT [symbol]] PRIMARY KEY index_type
添加唯一约束:ALTER TABLE tbl_name ADD[CONSTRAINT [symbol]] UNIQUE [INDEX|KEY][index_name] index_type
添加外键约束:ALTER TABLE tbl_name ADD[CONSTRAINT [symbol]] FOREIGN KEY index_name reference_definition
修改/删除默认约束:ALTER TABLE tbl_name ALTER[COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
7.删除约束
删除主键约束:ALTER TABLE tbl_name DROP PRIMARY KEY
删除唯一约束:ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
删除外键约束:ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
8.修改数据表
修改列定义:ALTER TABLE tbl_name MODIFY[COLUMN] col_name column_definition [FIRST | AFTER col_name]
修改列名称:ALTER TABLE tbl_name CHANGE[COLUMN] old_name new_col_name column_definition [FIRST|AFTER col_name]
数据表更名:(1)ALTER TABLE tbl_name RENAME[TO|AS] new_tbl_name
(2)RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 To new_tbl_name]…

####<三>操作数据表中的记录
1.插入记录:(1)INSERT [INTO] tbl_name[(col_name,…)]{VALUES|VALUE}
({expr|DEFAULT},…),(…),…
(2)INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},…
2.更新记录:UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]…
[WHERE where_condition]
3.单表删除:DELETE FROM tbl_name [WHERE where_condition]
4.WHERE语句:对记录进行过滤,如果没有指定WHERE子句,则显示所有记录
在WHERE表达式中,可以使用Mysql支持的函数或运算符
5.GROUP BY语句:[GROUP BY {col_name|position} [ASC|DESC],…]
带分组条件:[HAVING where_condition]
6.ORDER BY语句:对查询结果进行排序
[ORSER BY {col_name|expr|position}[ASC|DESC],…]
7.LINIT语句:限制查询结果返回的数量
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

####<四>mysql子查询与连接
1.子查询:是指出现在其他SQL语句内的SELECT语句(出现在圆括号内)
可包括多个关键字:DISTINCT,GROUP BY,ORDER BY,LIMIT,函数等。
子查询外层查询可以是:SELECT,INSERT,UPDATE,SET或者DO。
子查询可以返回一行,一列或者子查询。
2.比较运算符子查询
=,>,<,>=,<=,<>,!=,<=>
语法结构:operand comparison_operator subquery
any,some,all关键字:
any some all
>,>= 最小值 最小值 最大值
<,<= 最大值 最大值 最小值
= 任意值 任意值
<>,!= 任意值
3.[NOT] IN子查询
语法结构:operand comparison_operator [NOT] IN (subquery)
=ANY运算符与IN等效
!=ALL或<>ALL运算符与NOT IN等效
[NOT] EXISTS如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE
4.INSERT…SELECT插入记录
将查询结果写入数据表:INSERT [INTO] tbl_name[(col_name,…)] SELECT…
5.多表更新
语法结构:UPDATE table_references
SET col_name1={expr1|DEFAULT}
[,col_name2={expr2|DEFAULT}]…
[WHERE where_condition]
一步到位:CREATE TABLE [IF NOT EXISTS]tbl_name
[(create_definition,…)]
select_statement
6.连接
1.mysql在SELECT语句,多表更新,多表删除语句中JOIN操作。
2.语法结构:table_reference
{[INNER|CROSS]}JOIN|{LEFT|RIGHT}[OUTER]JOIN}
table_reference
ON conditional_expr(where_conditon)
table_reference:
tbl_name[[AS]alias]|table_subquery[AS] alias
数据表可以使用tbl_name AS alias_name,或tbl_name alias_name 赋予别名
table_subquery可以作为子查询使用在FROM子句中,这样的子查询必须为其赋予别名
3.连接类型(单表,多表连接)
INNER JOIN{CROSS} 内连接
LEFT [OUTER] JOIN 左外连接
RIGHT [OUTER]JOIN 右外连接
4.连接说明
A LEFT JOIN B join_condition 数据表B结果集依赖于数据表A
数据表A的结果集根据左连接条件依赖所有数据表(B除外)
左外连接条件决定如何检索数据表B(在没有指定WHERE条件的情况下)
如果数据表A的某条记录符合WHERE条件,但是在数据表B不存在符合连接条件的记录,将生成一个所有列为空的额外的B行
5.无限极分类表设计
自身连接(两个连接表相同,可分子表)
6.多表删除
语法结构:DELETE tbl_name[.][,tbl_name[,]]…
FROM table_references
[WHERE where_condition]

####<五>mysql内置函数
1.字符函数:
CONCAT() 字符连接
CONCAT_WS() 使用指定的分隔符进行字符连接
FORMAT() 数字格式化
LOWER() 转换成小写字母
UPPER() 转换成大写字母
LEFT() 获取左侧字符
RIGHT() 获取右侧字符
2.数值运算符和函数:
CEIL() 向上取整
FLOOR() 向下取整
DIV() 整数除法
MOD() 取余数(去模)
POWER() 幂运算
ROUND() 四舍五入
TRUNCATE() 数字截取
3.日期时间函数:
NOW() 当前日期和时间
CURDATE() 当前日期
CARTIME() 当前时间
DATE_ADD() 日期变化
DATEDIFF() 日期差值
DATE_FORMAT() 日期格式化
4.信息函数:
CONNECTION_ID() 连接ID
DATABASE() 当前数据库
LAST_INSERT_ID() 最后插入记录
USER() 当前用户
VERSION() 版本信息
5.聚合函数:
AVG() 平均值
COUNT() 计数
MAX() 最大值
MIN() 最小值
SUM() 求和
6.加密函数:
MD5() 信息摘要(加密)算法(主要用于web页面)
PASSWORD() 密码算法(更改用户密码)

####<六>mysql自定义函数
1.自定义函数(UDF)用法与内置函数相同
1.参数(理论不能超过1024个)
2.返回值
2.语句:CREATE FUNCTION function_name
RETURNS (返回值类型)
{STRING|INTEGER|REAL|DECIMAL}
routine_body(函数体)
3.关于函数体:
1.函数体由合法的SQL语句构成
2.函数体可以使简单的SELECT或者INSERT语句
3.函数体如果为复合语句结构则使用BEGIN…END语句
4.出现问题:
如果在创建函数的过程中出现错误:
ERROR 1418 (HY000): This function has none of DETERMINISTIC,
NO SQL, or READS SQL DATA in its declaration and binary logging
is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
解决:set global log_bin_trust_function_creators = true;
原因:这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1.DETERMINISTIC 不确定的
2.NO SQL 没有SQl语句
3.READS SQL DATA 只是读取数据
4.MODIFIES SQL DATA 要修改数据
5.CONTAINS SQL 包含SQL语句
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。
如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
5.删除自定义函数:
DROP FUNCTION [if exists] function_name

####<七>mysql存储过程
1.存储过程语法:
CREAT [DEFAULT={user | CURRENT_USER}] PROCEDURE sp_name (proc_parameter[,…]])
[characteristic …]routine_body
其中:proc_parameter:[IN|OUT|INOUT]param_name_type
2.过程体:
过程体由任意合法的SQL语句构成;过程体如果为复合体,则用BEGIN…END来控制;复合结构可以包含声明,循环,控制结构;
3.调用过程:
CALL sp_name([parameter[,…]])
CALL sp_name[()]
4.mysql创建带有IN类型参数的存储过程
先更改定界符为//:delimiter //
CREATE PROCEDURE sp_name(IN col_name 字段属性)
BEGIN
SQL语句;
END//
5.删除存储过程
DROP PROCEDURE sp_name;
6.修改存储过程
ALTER PROCEDURE sp_name[characteristic …]
COMMENT ‘string’
|{CONTAINS SQL |NO SQL |READS SQL DATA |MODIFIES SQL DATA}
|SQL SECURITY {DEFINER | INVOKER}
7.创建带有IN和OUT类型的参数
在IN后面加个‘,'然后调用过程声明一个用户变量@name来接受返回值
8.创建带有多个OUT类型的参数
在IN后面加个多个OUT参数,用用户变量返回
9.存储过程与函数的区别:
存储过程功能要复杂一些,而函数针对性更强
存储过程可以返回多个值,函数只能返回一个恶值
存储过程一般独立执行,函数可以作为SQL语句的组成部分来实现

####<八>Mysql的存储引擎
1.存储引擎类型:
常见的:MyISAM,InnoDB,Memory,CSV,Archive
2.并发控制手段:
锁分为共享锁(读锁),排他锁(写锁)。
锁粒度:
表锁:是一种开销最小的锁策略
行锁:是一种开销最大的锁策略
3.事务处理:
事物四个特性:一致性,原子性,隔离性,持久性
4.各种存储引擎的特点
特点 MyISAM InnoDB Memory Archive
存储限制 256T 64T 有 无
事务安全 - 支持 - -
支持索引 支持 支持 支持
锁粒度 表锁 行锁 表锁 行锁
数据压缩 支持 - - 支持
支持外键 - 支持 - -
5.设置存储引擎
通过配置文件:default-storage-engine = engine
或者创建数据表时
CREATE TABLE table_name(


)ENGINE = engine;

你可能感兴趣的:(Mysql,Linux,mysql,linux)