mysql自学习

1.DDL(数据库定义语言)
create,alter,drop
DML(数据库操控语言)
insert,update,delete
DQL(数据库查询语言)
select,单表查询,多表查询
2.数据库概念:
数据库就是一个以某种有组织的方式存储的数据集合。
3.数据库分类:
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
关系型(多张二维表):mysql,sqlserver,oracle等
非关系型(非关系型、分布式、不提供 ACID):redis,mongodb,hbase等
4.linux下载安装mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm 
  ## /etc/yum.repos.d/mysql-community.repo 
  ## /etc/yum.repos.d/mysql-community-source.repo 
  如果想删除该 mysql 源,可以直接 rm -r 这两个文件即可。 
yum install mysql-server
service mysqld status
service mysqld start
5.mysql的配置
默认是没有密码的,需设置root密码
mysql -u root  //登录mysql服务器
use mysql   //进入mysql数据库
update user set password=password('tianliangedu') where user='root'  //更改root用户密码
service mysqld restart   //重新启动
exit  //退出
mysql -uroot -ptianliangedu    //登录成功
show variable like ‘character%’ 
(默认字符集是 latin1)       
vi  /etc/my.cnf    //永久更改字符集

找到客户端配置[client] 在下面添加   
default-character-set=utf8 默认字符集为utf8   
找到[mysqld] 添加   
default-character-set=utf8 默认字符集为utf8   
init_connect='SET NAMES utf8' 
(设定连接mysql数据库时使用 utf8编码,以让 mysql数据库为utf8运行) 
show variable like ‘character%’  //再次查看字符集
6.客户端软件安装与连接(navicat)
(1)像linux一样,mysql也都是服务器端服务,必须有远程连接客户端方便连接到远程的服务器端的 mysql server 服务,让研发人员可以远程控制服务端。
(2)navicat:一套适用于 MySQL 数据库系统地图形化数据库管理、报告以及监控的工具。含简体中文文件。
优点:功能强大,适用于 mysql、sqlserver、oracle 等多个 dbms。 
缺点:收费 
(3)使用前配置:service iptables stop   //关闭防火墙
mysql -uroot -ptianliangedu   //进入mysql
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 
'tianliangedu' WITH GRANT OPTION;    //允许 root 可以从任意 host 登陆到 mysql server 中 
  flush privileges;    //刷新权限到内存中
7.基本使用:
mysql -uroot -ptianliangedu    //登录
show databases;  //查看数据库
create database  guodandan;    //创建数据库
create table stu( 
 id int, 
 name varchar(32), 
 age int, 
 sex char(1) 
);                            //创建表
insert into stu values(1,’tom’,21,’M’);    //插入数据
select * from stu;     //查看数据
8.sql基本语法与使用
(1)table:一个数据库表由一条或多条记录组成,没有记录的表称为空表。
View:虚拟的表,在数据库中不存在。
Function:函数是为了完成某些特定功能,并且最终得到返回结果。
(2)数学函数:
abs(x)    //返回 x 的绝对值
ceil(x)    //返回大于等于 x 的最小整数
pow(x,y)    //返回 x 的 y 次方
(3)字符串函数:
length(x)      //字节个数
CHAR_LENGTH(s)    //字符串长度
concat(str1,str2 ...strN)     //等多个字符串连接在一起
concat_ws(sign,str1,str2 ...strN)     //将多个字符串,通过 sign 拼接在一起
upper(str)      //小写变成大写
lower(x)         //大写变成小写
(4)日期时间函数:
current_date()          //获取当前日期的字符串表示形式
current_time()          //获取当前时间的字符串表示形式
now()                       //返回当前的日期和时间
(5)条件判断函数
if(2>1,1,0)    //相当于三目运算符
IFNULL(v1,v2)     //如果 v1 的值不为 NULL,则返回 v1,否则返回 v2
CASE
WHEN 表达式 1
THEN 值 1
WHEN 表达式 2
THEN 值 2
...
ELSE 值 n
END

CASE 表达式 e
WHEN e1 THEN r1
WHEN e2 THEN r2
...
ELSE rn
END
(6)procedure
存储过程是为完成特定的功能而汇集在一起的一组 SQL 程序语句,经编译后存储在数据库中的 SQL 程序。
(7)Index
索引是根据指定的数据库表列建立起来的顺序。它提供了快速访问数据的途径。
CREATE INDEX "INDEX_NAME" ON "TABLE_NAME" (COLUMN_NAME); 
CREATE INDEX idx_name ON person (name);
(8)主键:主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE person (
id VARCHAR(18),
name VARCHAR(32),
age INT,
primary key(id)
);
ALTER TABLE person ADD PRIMARY KEY (id);    //建表之后再添加主键 
(9)外键:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。FOREIGN KEY 约束用于预防破坏表之间连接的动作。FOREIGN KEY 约束也防止非法数据插入外键列。
CREATE TABLE Orders(
id int,
order_number int,
id_p int,
FOREIGN KEY (id_p) REFERENCES person(id)
);
ALTER TABLE Orders ADD FOREIGN KEY (id_p) REFERENCES Person(id);   //建表之后再添加外键 
(10)自定义函数:
CREATE FUNCTION IF_Adult (age INT) RETURNS VARCHAR (32)
BEGIN
IF (age < 18 AND age > 0) THEN
RETURN '未成年人';
ELSEIF (age >= 18 AND age <= 150) THEN
RETURN '成年人';
ELSE
RETURN '未知人类';
END IF;
END;
(11)alter
alter table 表名 rename 新表名     //表名更新
alter table 表名 add column 字段名 字段类型   //新增表字段 
alter table 表名 change column 旧字段名 新字段名 字段   //修改表字段
alter table 表名 modify column 字段名 类型            //更新字段
alter table 表名 drop column 字段名            //删除字段
delete 表名 from the database
     DROP TABLE table_name;      //删除表
*******************************************
drop,truncate和delete的区别
第一:相同点:
truncate和不带where子句的delete,以及drop 都会删除表内的数据
第二:不同点:
1. truncate和delete只删除数据不删除表的结构(定义)
drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
2. delete 语句是数据库操作语言(dml),这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的trigger执行的时候将被触发。
truncate、drop 是数据库定义语言(ddl),操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发 trigger。
9.ddl(create,alter,drop如上)
dml(insert,update,delete)
dql(select)
SELECT distinct name FROM student;          //去重查询
SELECT * FROM student limit 5;             //限制条数查询 
SELECT age,count(1) as ct FROM student group by age;    //分组查询 
SELECT age,count(1) as ct FROM student group by age HAVING ct > 3;   //过滤人数大于 3 的年龄
count(),sum(),max(),min(),avg()   //聚合函数
SELECT * FROM student order by age desc;     //倒序排序
SELECT * FROM student where id = (SELECT id FROM scores WHERE  score>80);  //表关联,分数大于80
10.多表联合查询
(1) inner join,left join,right join 
join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果左表中的行在右表中没有匹配,就不会列出这些行。
LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行。
RIGHT JOIN 关键字会从右表那里返回所有的行,即使在左表中没有匹配的行。 
(2)union all,union 
默认地,UNION 操作符选取不同的值。如果允许重复的值,且有序,请使用UNION ALL。
11.行转列和列转行
SELECT   SNAME, MAX( 
 CASE CNAME 
 WHEN 'JAVA' THEN 
 SCORE 
 END ) JAVA, 
 MAX( 
 CASE CNAME 
 WHEN 'mysql' THEN 
 SCORE 
 END 
 ) mysql FROM   stdscore GROUP BY   SNAME; 
SELECT SNAME, group_concat(CNAME, ":", SCORE) FROM score GROUP BY SNAME ORDER BY CNAME; 
12.数据导入导出
LOAD DATA LOCAL INFILE filename INTO TABLE table_name; 
SELECT * FROM table_name  INTO OUTFILE filename; 
13.jdbc需要练代码
//
1.事务及事务特性
是用户定义的一个数据库操作序列,这些操作要么都做,要么都不做,是一个不可分割的工作单位。
在关系数据库中,一个事务可以是一条SQL语句,也可以是多条SQL语句。(事务的通俗理解)
如果只是查询操作,不牵扯对数据库内容的更改,不需要开启事务。
A(atomicity),原子性。原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到事务前的状态。(通过日志)
C(consistency),一致性。一致性是指事务将数据库从一种状态转变为另一种状态。在事务的开始之前和事务结束以后,数据库的完整性约束没有被破坏。
I(isolation),隔离性。隔离性还有其他的称呼,如并发控制、可串行化、锁。事务的隔离性要求每个读写事务的对象与其他事务的操作对象能互相分离,即该事务提交前对其他事务都不可见,这通常使用锁来实现。数据库系统中提供了一种粒度锁的策略,允许事务仅锁住一个实体对象的子集,以此来提高事务之间的并发度。(如果是全表锁,事务之间基本就无法实现并发,但是如果只锁住表中处理的行,可以提高事务的并发度)
D(durability),持久性。事务一旦提交,其结果就是永久性的。即使发生宕机等故障,数据库也能将数据恢复。需要注意的是,持久性只能从事务本身的角度来保证结果的永久性,如事务提交后,所有的变化都是永久的,即使当数据库由于崩溃而需要恢复时,也能保证恢复后提交的数据都不会丢失。
2.mysql相比较其他数据库的优势
1、mysql开放源代码且无版权制约,自主性及使用成本低。(免费)
2、mysql软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
3、mysql支持多种操作系统,提供多种API接口,支持多种开发语言
4、mysql性能卓越,服务稳定,很少出现异常宕机。
3.什么是主键?什么是外键?他们的作用?
主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,主键不为空。
外键:
若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。
A为基本表,B为信息表。
关系:外键一定是另外某个表的主键。
5.取前几的关键字
SQL server  top
oracle row_number
mysql limit
select * from table limit (start-1)*limit,limit; 其中start是页码,limit是每页显示的条数。//分页
6.存储引擎,使用场景
Mysql中的数据都是用各种不同的技术存储在文件(或内存中的)。这些技术中的每一个技术会使用不同的存储机制、索引技巧等。我们应该根据应用的不同需求,来选择合适的存储引擎,从而改善应用的整体功能。
有myisam(全文检索),innerdb(默认索引用它,不支持全文检索,索引不可以太大,事务型),memory,索引的底层是hash索引和Btree索引,hash是精准的值==,Btree相当于一个范围。索引是经常在where后的搜索字段。
7.数据查询的优化:
sql语句优化
构建索引,模糊查询like %走不了索引
表结构优化,非空类型,优化字段数据类型,varchar不建议,在oracle中char,varchar不一样,空
分库分表
8.关联与子查询
关联代替子查询,避免全表扫描,提高效率。where ,order by索引避免了全表扫描。
9.锁的内容,锁表,锁行,并行加锁。
10.jdbc方法,存储过程,创建其定期执行的存储过程。


版权声明:本文为zhizubaby0519原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。