009-MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了009-MySQL相关的知识,希望对你有一定的参考价值。

mysql简介与安装

一、MySQL简介

1. 数据库技术是IT世界里非常重要的基础,数据非常重要,数据容器也是非常重要。

2. MySQL, Oracal, IBM DB2都是关系型数据库

3. MySQL-> Oracal公司

4. 安装mySQL on Ubuntu 14.04

1) apt-get install mysql-server

2) ps -ef|grep mysqld

3) mysql -u root -p

4) enter mysql> show database;

                         use mysql;

                         show tables;

                         quit

5) apt-get autoremove --purge mysql-server

基础命令

1. 数据库

1) show databases;

2) create database 数据库名

3) use 数据库名

4)drop database 数据库名

2. 修改、添加、删除字段,字段改名,修改字段排列顺序,更改表名:

1)alter table 表名 modify 需要修改的字段 修改的类型;

2)alter table 表名 add 需要添加的新字段名 字段类型;

3)alter table 表名 drop 需要删除的字段名;

4)alter table 表名 change 原来的字段名 新的字段名 新的字段类型;

5)alter table 表名 modify|add|字段名 字段类型 first|after 字段名;

6)alter table 愿数据表名 rename 新数据表名;

3. 创建有索引的表

create index 索引名 on 表名(列表);

或者

create table 表名 (index index1(id,name));

3. 插入数据

insert into 表名(列表名)

    values(要插入的数据);

或者

insert into 表名 set 列表1=数据,列表2=数据;

4. 更新数据

update 表名 set 列名1=数据1,列名2=数据2,...[where clause];

5. 删除数据

delete from 表名 [where clause];

6. 查询数据

select 列名1,列名2 from 表名1,表名2[where cluase];

 

二、JDBC知识点精华

1.JDBC按照如下过程连接数据库

加载驱动程序

创建连接对象

创建语句对象

编写SQL语句

使用语句对象执行SQL语句

如果有结果集对结果集进行处理

关闭结果集对象(如果有),关闭语句对象,关闭连接对象

2.JDBC事务相关知识点

start transaction 开启事务

Rollback 回滚事务,如果出错,可以回滚

Commit 提交事务,完成后向数据库提交事务

3. 创建JDBC事务的步骤

1) 设置事务的提交方式为非自动提交:conn.setAutoCommit(false);

2)将需要添加事务的代码放入try,catch块中。

3)在try块内添加事务的提交操作,表示操作无异常,提交事务;

conn.commit();

4)在catch块内添加回滚事务,表示操作出现异常,撤销事务;

conn.rollback();

5)设置事务提交方式为自动提交:

conn.setAutoCommit(true);

4. MySQL与JDBC案例

1) salary DECIMAL(9,2)整数为9位,小数为2位;作为字符串存储

      DECIMAL,NUMERIC

2)优化SQL语句执行效率

尽量选择比较小的列

将where中用的比较频繁的字段建立索引

select子句中避免使用*

避免在索引列上使用计算,not,in和<>等操作

当只需要一行数据的时候使用limit 1

保证表单数据不超过200w,适时分割表

3)事务是什么?

事务是访问并可能更新数据库中各项数据项的一个程序执行单元

事务具有原子性、一致性、隔离性、持久性的特点。

原子性指事务必须是原子工作单元;

一致性是事务在完成时,必须使所有的数据都保持一致;

隔离性是指由并发事务所做的修改必须与任何其他并发事务作的修改隔离;

持久性是指事务完成后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持;

4)Java中如何创建一个JDBC连接

JDBC连接只需要两步

注册并加载驱动:使用Class.forName(),驱动类就会注册到DriverManager里面并加载到内存里

用DriverManager获取连接对象:调用DriverManager.getConnection()方法并传入数据库连接的URL,用户名及密码,就能获取到连接对象。

5)有哪些不同的ResultSet?(结果集)

三种ResultSet对象

ResultSet.TYPE_FORWARD_ONLY 这是默认的类型,它的游标只能往下移

ResultSet.TYPE_SCROLL_INSENSITIVE:游标可以上下移动,一旦它创建后,数据库里的数据再发生修改,对它来说就是透明的

ResultSet.TYPE_SCROLL_SENSITIVE:游标可以上下移动,一旦它创建后,数据库发生了修改操作,它是能够感知的

6)JDBC异常的情况

java.sql.SQLException:这是JDBC异常的基类

java.sql.BatchUpdateException:当批处理操作执行失败的时候可能会抛出这个遗产

java.sql.SQLWarning:SQL操作出现的警告信息

java.sql.DataTruncation:字段值由于某些非正常原因被截断了(不是因为超过对应字段类型的长度限制)

 

三、MySQL连接到数据库

通过shell连接到数据库

创建数据库,创建数据表

MySQLworkbench界面化工具

phpMyAdmin通过网页访问管理MySQL,需要Apach的服务器

mysql --help

 

四、数据库语言

1.标准函数

select ABS(-5); 取绝对值

select ABS(-5.5);

select ceiling(5.8);取比它大的整数

select FLOOR(-5.8);取比它小的整数

select GREATEST(1,2,3,8);取最大

select least(1,2,3,8);取最小

select MOD(2,3); 取余数

select PI(); 返回PI

select RAND();取随机数

select RAND(2);

select ROUND(10.23685,2); 四舍五入,小数点后两位

select TRUNCATE(10.23685,2);小数点后两位截断

select SIGN(-1.4); 看某个对象是正数还是负数

select SIGN(5.4);

select COS(2);三角函数

select ACOS(2);

select DEGREE(1); 把弧度转角度

select RADIANS(57); 角度转弧度

select POWER(2,3);

select POW(2,3);

select EXP(3); e的3次方

select SQRT(4); 4 开2次方

select LOG(10);取对数

select LN(10);取对数

select OCT(10); 变成8进制

select HEX(10);变成16进制

聚合函数

SELECT * FROM TABLE_TEST;

SELECT MAX(INTSIX) FROM TABLE_TEST;

SELECT MIN(INTSIX) FROM TABLE_TEST;

SELECT AVG(INTSIX) FROM TABLE_TEST;

SELECT SUM(INTSIX) FROM TABLE_TEST:

SELECT COUNT(INTSIX) FROM TABLE_TEST;

SELECT STD(INTSIX) FROM TABLE_TEST; 标准偏差

SELECT STDDEV(INTSIX) FROM TABLE_TEST;

SELECT VARIANCE(INTSIX) FROM TABLE_TEST;标准反差

2. 字符串函数

select length(‘hello‘); 长度

select lcase(‘hLLO‘);

select lower(‘hLLO‘);

select upper(‘hLLO‘);

select ucase(‘hLLO‘);

select strcmp(‘hello‘,‘yes‘);

select position(‘yes‘ in ‘yesman‘);

select replace(‘yes‘,‘y‘,‘hh‘);

select insert(‘yes‘,2,3,‘hh‘); 第2位开始的连续3位

select concat(‘hello ‘, ‘world‘);

select concat_ws(‘:‘,‘hello ‘,‘world‘);

select left(‘helloworld‘,3); 取最左边的三个字符

select right(‘helloworld‘,3);

select lpad(‘helloword‘,15,‘x‘); 整个长度变成15,左边补x

select rpad(‘helloword‘,15,‘x‘); 整个长度变成15,右边补x

select ltrim(‘     helloworld        ‘); 去掉左边的空格

select rtrim(‘     helloworld        ‘); 去掉右边的空格

select trim(‘     helloworld        ‘); 去掉两边的空格

select substring(‘macket‘,2,3); 从第2位开始取出3位

select ASCII(‘a‘);

3. 日期和时间函数

select NOW(); 现在的时间,包含日期

select CURTIME(); 现在的时间

select curdate(); 只有日期

select year(‘20030422‘);取年份

select month(‘20030422‘);

select monthname(‘20030422‘);

select dayofyear(‘20030422‘);

select dayofweek(‘20030422‘);;

select dayname(‘20030422‘);

select week(‘20030422‘);

select hour(‘14:56‘);

select minute(‘14:56‘);

select second(‘14:54:30);

select date_add(now(), interval 3 month);

select date_add(now(), interval 3 day);

seelct date_sub(now(), interval 3 day);

select date_sub(now(), interval 3 month);

select date_sub(now(), interval 3 year);

4. 数据加密函数

select password(‘secret‘);

select password(‘secret‘) password(‘secret‘);

select encrypt(‘secret‘, ‘abc‘); abc是加密的key

 

select * from users;

insert into users (uname), values (encode(‘secret‘,‘abc‘));

select decode(uname,‘abc‘) from users;

insert into users (uname) values (aes_encrypt(‘secret‘,‘abc‘));

select aes_decrypt(uname,‘abc‘) from users;

select MD5 (‘secret‘);

select SHA (‘secret‘);

5. 控制流函数

select if ( 1 < 10, 2, 3);

select ifnull (1,2); 判断第一个参数不为空,返回第一个参数,否则返回第二个参数

select nullif(1,2); 如果第一个和第二个参数相等,就返回null

select

  case

     when 0 then 99

     when 1 then 199

     when 2 then 299

     else 10

end; 结果返回199

select

  case ‘green‘

  when ‘red‘ then 100

  when ‘green‘ then 200

  else 300

end; 结果返回200

6. 格式化函数,类型转化函数

select date_format(now(), ‘%W, %D, %M, %Y, %r);

select time_format(‘100:21:12‘, ‘%h %i %p‘); 4:21 AM

select inet_aton(‘192.168.2.10‘); ip address 转成一串数字

select inet_ntoa(‘3232236842‘); 数字转成ip address

有符号整数,无符号整数

select 1 + ‘99‘; 返回100

select 1 + cast(‘99‘ as signed); 显性转换

select ‘f‘ = binary ‘F‘, ‘f‘ = cast (‘F‘ as  binary); 返回都是0,大小写的binary值不想等

select ‘f‘ = ‘F‘; 返回1,没有大小写区分

cast支持的类型: binary, char, date, time, datetime, signed, unsigned

convert 类型转换

select convert(‘23‘, signed); 同样支持这几个类型

select convert(‘name‘ usign utf8); 字符集的类型转换

 

五、事务

事务(Transaction):作为一个单独单元的一个活多个SQL语句组成。这个单元中的每个SQL语句是互相依赖的,而且单元座位一个整体是不可分割的。如果单元中的一个语句不能成功地完成,整个单元就会回滚,所有影响到的数据库将返回事务开始以前的状态。因此,只有事务中所有语句都被成功地执行才能说这个事务被成功的执行。

例如银行的一个账户的扣钱和另一个账号的加钱必须作为一个transaction处理。

事务与ACID属性:

作为一个事物transcation必须有ACID属性

原子性:Atomicity

一致性:Consistency

孤立性:Isolation

持久性:Durability

原子性:每个事物必须被认为是不可分割的单元。把每个事物作为一个单元;

一致性:不管事务是成功完成或者失败,事务必须要是一致的,整个系统保持一致

孤立新:每个事务在自己的空间内发生,只有在它完全被执行后才能被其他看见;每个事务相互隔离,在成功被执行前互相之间是隔离的

持久性:即使系统崩溃,提交的事务仍在坚持;插入数据,删除数据,如果事务已经被执行,事务成功执行后,系统起来后仍然显示事务执行后的结果

事务处理的生命周期

关系型数据库,以表来存储

show engines; //InnoDB 存储引擎

create table software (

    sid int,

    version int

) engine = innodb;

select * from software;

 

start transaction; // begin; begin work; //开始一个事务

insert into software (sid, version) values (1,1);

//多个语句

commit; // commit 到数据库

show * from software

update software set version = 2 sid =1;

rollback; //回滚到之前的状态

 

select @@autocommit;

set autocommit = 0自动提交的变量默认是1,例如select, insert, update的修改会自动提交;

如果autocommit为0,则一定要语句commit了之后事务才会被提交到数据库;

六、MySQL操作数据

1. 插入数据

open xampp

create table addressbook(fname VARCHAR(255) NULL,

                                      lname VARCHAR(255) NULL,

                                      phone VARCHAR(255) NULL,

                                      fax VARCHAR(255) NULL,

                                      email VARCHAR(255) NULL,);

describe;

insert into addressbook (fname, lname, phone, fax, email) values (‘James‘, ‘BOSS‘, ‘123‘, ‘234‘, ‘[email protected]‘);

insert into addressbook (fname, lname) values (‘James‘, "mike‘);

insert into addressbook values (‘Jacky‘, ‘Miky‘, ‘123‘, ‘456‘, ‘[email protected]‘);

insert into address values (‘Jacky‘, ‘Miky‘, ‘123‘, ‘456‘, ‘[email protected]‘),

                                      (‘Jacky‘, ‘Miky‘, ‘123‘, ‘456‘, ‘[email protected]‘),

                                      (‘Jacky‘, ‘Miky‘, ‘123‘, ‘456‘, ‘[email protected]‘);

select * from addressbook; //查看table

2. 进阶

insert into addressbook set fname = ‘Jordon‘;

create table forums(name varchar(150) not null,

                              category varchar(58) default ‘UNIX‘ not null,

                              postsPerpage smallint default 15 not null);

describe forums;

insert into forums (name, categroy, postsPerpage) values (‘helloworld‘, ‘Win‘, 20);

select * from forums;

insert into addressbook (name) values (‘hello‘);

 

create table users (uid tinyint not null auto_increment,

                            uname varchar(50) not null default ‘ ‘,

                            primary key (uid));

insert into users (name) values (‘john‘);

insert into users (name) values (‘lily‘);

select * from users;

alter table users add unique (uname); //每次uname不能重复,否则报错

3. 更新和删除数据

create table users (uid tinyint not null auto_increment,

                            uname varchar(50) not null default ‘ ‘,

                            primary key (uid));

insert into users (name) values (‘john‘);

insert into users (name) values (‘lily‘);

select * from users;

update users set uname = ‘jke‘ where uid =2; //更新数据

delete from users where uid = 1; //删除uid= 1的那行

delete from users; //会报错,一定要有where条件

show variable like ‘%sql_safe%‘;//查看sql_safe_updates变量的值,如果为1,则不能使用上面的语句删除整个table

set sql_safe_updates = 0;//改成0之后,可以删除整个table

delete from users; //删除每一行的数据,自动增长的uid依旧保留

insert into users values (‘hey‘); //uid是auto_increment,如果有重复的uname,没有成功插入,当时uid也会自动加1;delete之后uid的值还是保留以前的值,再次insert后uid继续加1

truncate table users; //表格被清空,自动增长的uid也被清空

alter table tbl_user rename to tbl_member; //修改表名

rename table tbl_member to tbl_user;

alter table tbl_user add email varchar(255) not null;

alter table tbl_user change id newid int(3); //修改一个字段名字

alter table tbl_user drop email; //删除一个字段

drop table tbl_user; //删除一张数据库表

Reference:

http://mysql-python.sourceforge.net/MySQLdb.html

 

以上是关于009-MySQL的主要内容,如果未能解决你的问题,请参考以下文章