MYSQL
mysql是最流行的关系型数据库管理系统,它是由瑞典MYSQL AB公司开发,开源的,目前隶属于Oracle旗下产品;
什么是数据库?
数据库是按照数据结构来组织,存储和管理数据的仓库;
MySQL 的查询流程具体是?or 一条SQL语句在MySQL中如何执行的?
客户端请求 —> 连接器(验证用户身份,给予权限) —> 查询缓存(存在缓存则直接返回,不存在则执行后续操作) —> 分析器(对SQL进行词法分析和语法分析操作) —> 优化器(主要对执行的sql优化选择最优的执行方案方法) —> 执行器(执行时会先看用户是否有执行权限,有才去使用这个引擎提供的接口) —> 去引擎层获取数据返回(如果开启查询缓存则会缓存查询结果)
一.数据库操作
创建数据库
create database 数据库名;
删除数据库
drop database 数据库名;
选择数据库
use 数据库名;
删除表
drop table 表名
插入数据
insert into table_name (field1, field2) values (value1,value2);
创建表
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
`runoob_id` INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
实例解析:
- IF NOT EXISTS当判断的表不存时,我可以执行创建数据库,创建表,增加列,可以执行相应的SQL语句;
- 如果不想字段为NULL.可以设置字段属性为NOT NULL,在操作时,如果数据输入为空,则会报错;
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1;
- PRIMARY KEY关键字用于定义列为主键,多个列定义主键,列间以逗号分隔;
- ENGINE 设置存储引擎, CHARSET 设置编码
MYSQL连接的使用
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接) :获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接): 获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
MYSQL NULL值处理
-
IS NULL: 当列的值是 NULL,此运算符返回 true。
-
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
注:不建议使用,在建表时给定默认值
SELECT * FROM table_name WHERE column IS NULL;
SELECT * FROM table_name WHERE column IS NOT NULL;
select ifnull(columnName2,0) from tableName;
MYSQL 事务处理
主要有两种方法:
1、用 BEGIN, ROLLBACK, COMMIT来实现
- BEGIN 开始一个事务
- ROLLBACK 事务回滚
- COMMIT 事务确认
2、直接用 SET 来改变 MySQL 的自动提交模式:
- SET AUTOCOMMIT=0 禁止自动提交
- SET AUTOCOMMIT=1 开启自动提交
MYSQL ALTER命令
当我们需要修改数据库表名或者修改数据表字段时,使用ALTER
删除表中的字段
alter table table_name drop column1;
添加表字段
alter table table_name add column2 INT;
修改字段类型及名称
alter table table_name modify column2 char(20);
修改字段默认值
alter table table_name alter column3 set DEFAULT 0;
删除字段的默认值
alter table table_name alter column3 drop DEFAULT;
修改表名
alter table table_name RENAME TO table_new
SHOW的用法
查看字段默认值 查看表格的结构
show columns from 表名
显示表格详细信息
show full columns from 表名
查看指定数据库下面指定表格的结构
show columns from tableName from dbName(数据库)
查询数据表类型
show table status LIKE '表名';
MYSQL索引
普通索引
创建索引
create index indexName ON table_name(column_name)
修改表结构(添加索引)
alter table tableName ADD index indexName(columnName)
删除索引
drop index indexName on table_name
查看索引
show index from table_name
创建表时直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
2.存储引擎
一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能 。
-- 查看支持的存储引擎
SHOW ENGINES
-- 查看具体某一个表所使用的存储引擎
show create table tablename
-- 查看某个数据库中的某一个表所使用的存储引擎
show table status like 'tablename'
show table status from database where name="tablename"
常见的存储引擎就 InnoDB、MyISAM、Memory、NDB。