文档章节

Mysql学习总结

playgame
 playgame
发布于 2016/06/27 16:27
字数 1790
阅读 5
收藏 0

下面是我的Mysql总结,请大家参考。

-- mysql 添加一个用户(请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密)
-- 注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;


-- 方法二:
GRANT INSERT,UPDATE,SELECT,DELETE,CREATE,DROP ON bank.* TO 'tester'@'localhost' IDENTIFIED by  '123456';
FLUSH PRIVILEGES;

-- 查看数据库
SHOW databases;

USE bank;
SHOW tables;
-- 显示列和索引
SHOW COLUMNS FROM customer;
SHOW INDEX FROM customer;

-- 显示状态
SHOW TABLE STATUS FROM bank;
-- 在navicat中无法执行
SHOW TABLE STATUS FROM bank LIKE 'admin%'\g;
SHOW TABLE STATUS from bank LIKE 'ad%'\G; 
-- 用户连接
mysql -u root -p

-- 创建、删除、查看数据库
create database oo_test;
DROP DATABASES oo_test;
show databases;

-- 选择数据库
use bank;


-- 创建数据表
CREATE TABLE borrower(
b_id INT NOT NULL AUTO_INCREMENT,
b_name VARCHAR(50) NOT NULL,
borrow_date DATE,
borrow_balance INT NOT NULL,
PRIMARY KEY (b_id)
);

-- 删除数据表
DROP TABLE borrower;

-- 插入数据(NOW() 是一个 MySQL 函数,该函数返回日期和时间)
INSERT INTO borrower(b_name,borrow_date,borrow_balance) VALUES('zhangsan',NOW(),20000);
INSERT INTO borrower(b_name,borrow_date,borrow_balance) VALUES('lisi',NOW(),30000);
INSERT INTO borrower(b_name,borrow_date,borrow_balance) VALUES('wangwu',NOW(),50000);

-- 查询数据
SELECT * FROM borrower;

-- where 子句(需要扩充查询)
-- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
-- 你可以在WHERE子句中指定任何条件。
-- 你可以使用AND或者OR指定一个或多个条件。
-- WHERE子句也可以运用于SQL的 DELETE 或者 UPDATE 命令。
SELECT * FROM borrower WHERE b_name='zhangsan';


-- UPDATE 查询 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause]
-- 可以同时更新一个或多个字段。
-- 可以在 WHERE 子句中指定任何条件。
-- 可以在一个单独表中同时更新数据。
update borrower SET b_name='liubei',borrow_balance=90000 where b_id=1;

-- DELETE 语句 DELETE FROM table_name [WHERE Clause]
DELETE FROM borrower WHERE b_id=1;

-- LIKE 子句
SELECT * FROM borrower WHERE b_name LIKE 'wang%';

-- 排序 升序:ASC (默认升序) 降序:DESC
SELECT * FROM borrower ORDER BY borrow_balance DESC;

-- 分组 (ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)
SELECT Count(*),SUM(borrow_balance),AVG(borrow_balance),borrow_date FROM borrower GROUP BY borrow_date;


-- 表连接 (两个或多个表中查询数据)
-- INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)
SELECT c.custIdCard,c.custMoney,c.custName,b.b_name,b.borrow_balance FROM customer c INNER JOIN borrower b ON c.cust_id=b.b_id;

SELECT c.custIdCard,c.custMoney,c.custName,b.b_name,b.borrow_balance FROM customer c LEFT JOIN borrower b ON c.cust_id=b.b_id;

SELECT c.custIdCard,c.custMoney,c.custName,b.b_name,b.borrow_balance FROM customer c RIGHT JOIN borrower b ON c.cust_id=b.b_id;


-- NULL 值处理 (IS NOT NULL、IS NULL、<=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true)

SELECT * FROM borrower WHERE return_date IS NOT NULL;

-- 正则表达式
-- 包含
SELECT * FROM borrower WHERE b_name REGEXP 'g';
-- 以z开头
SELECT * FROM borrower WHERE b_name REGEXP '^z';
-- 以u结尾
SELECT * FROM borrower WHERE b_name REGEXP 'u$';


-- 事务,事务是必须满足4个条件(ACID):Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
-- 1. 事务的原子性:一组事务,要么成功;要么撤回。
-- 2. 稳定性 : 有非法数据(外键约束之类),事务撤回。
-- 3. 隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
-- 4. 可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。


-- 1. 开始一个事务
start transaction;
-- 2. 做保存点
savepoint test_point;
-- 3. 操作
-- 4. 可以回滚,可以提交
rollback to test_point;
ROLLBACK;
COMMIT;


-- ALTER命令(删除,添加或修改表字段)
-- 增加字段
ALTER TABLE borrower ADD ttt INT;
-- 删除字段
ALTER TABLE borrower DROP ttt;
-- 修改字段
ALTER TABLE borrower MODIFY borrow_balance VARCHAR(20);
-- 修改字段
ALTER TABLE borrower CHANGE ttt num BIGINT;
-- 指定字段 num 为 NOT NULL 且默认值为100 
ALTER TABLE borrower MODIFY num BIGINT NOT NULL DEFAULT 100;

-- 修改表名
ALTER TABLE borrow RENAME TO borrower;

-- 索引 (单列索引、组合索引) CREATE INDEX indexName ON mytable(username(length)); 
-- 添加索引
CREATE INDEX bname ON borrower(b_name);
ALTER TABLE borrower ADD INDEX (return_date);

-- 删除索引 DROP INDEX [indexName] ON mytable; 
DROP INDEX rdate ON borrower;

-- 唯一索引
CREATE UNIQUE INDEX bid ON borrower(b_id);
ALTER TABLE borrower ADD UNIQUE INDEX (b_id);

DROP INDEX bid ON borrower;
ALTER TABLE borrower DROP INDEX b_id;


-- 临时表 (临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间)

CREATE TEMPORARY  TABLE tmp_borrower(
b_id INT NOT NULL AUTO_INCREMENT,
b_name VARCHAR(50) NOT NULL,
borrow_date DATE,
borrow_balance INT NOT NULL,
PRIMARY KEY (b_id)
);

INSERT INTO tmp_borrower(b_name,borrow_date,borrow_balance) VALUES('wangwu',NOW(),50000);

SELECT * FROM tmp_borrower;

DROP TABLE tmp_borrower;

-- 复制表
-- 创建新表结构
CREATE TABLE new_borrower (
`b_id`  int(11) NOT NULL AUTO_INCREMENT ,
`b_name`  varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`borrow_date`  date NULL DEFAULT NULL ,
`borrow_balance`  varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`return_date`  date NULL DEFAULT NULL ,
`num`  bigint(20) NOT NULL DEFAULT 100 ,
PRIMARY KEY (`b_id`),
INDEX `bname` USING BTREE (`b_name`) 
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=910
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;

-- 插入数据
INSERT INTO new_borrower(b_name,borrow_date,borrow_balance) SELECT b_name,borrow_date,borrow_balance FROM borrower;

SELECT * FROM new_borrower;


-- 元数据
-- 查询结果信息(SELECT, UPDATE 或 DELETE语句影响的记录数),在控制台就可以看到
UPDATE borrower SET return_date=NOW() WHERE return_date IS NULL;

UPDATE borrower SET return_date=NULL WHERE return_date IS NOT NULL;

-- 数据库和数据表的信息: 包含了数据库及数据表的结构信息。
SHOW TABLES;
SHOW DATABASES;

-- 服务器元数据
SELECT VERSION();
SELECT DATABASE();

SELECT USER();

-- 服务器状态
SHOW STATUS;
-- 服务器配置变量
SHOW VARIABLES;

-- 序列使用,见创建表id字段;
-- 获取AUTO_INCREMENT值 
INSERT INTO borrower(b_name,borrow_date,borrow_balance) VALUES('wangwu',NOW(),50000);

SELECT LAST_INSERT_ID();


-- 处理重复数据
-- 如果你想设置表中字段first_name,last_name数据不能重复,你可以设置双主键模式来设置数据的唯一性, 
-- 如果你设置了双主键,那么那个键的默认值不能为NULL,可设置为NOT NULL。
CREATE TABLE person(
first_name VARCHAR(20) NOT NULL,
last_name VARCHAR(20) NOT NULL,
sex CHAR(5)
);
INSERT INTO person VALUES('san','zhang','M');
INSERT INTO person VALUES('si','li','F');
-- INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据
INSERT IGNORE INTO person VALUES('si','li','F');

-- 统计重复数据
SELECT COUNT(*) as repetitions, last_name, first_name FROM person GROUP BY last_name, first_name HAVING COUNT(*)>1;

-- 过滤重复数据

SELECT DISTINCT last_name,first_name FROM person;

SELECT last_name,first_name FROM person GROUP BY (last_name);

-- SQL 注入
-- 防止sql注入
-- 不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
-- 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取,比如java中用PreparedStatement代替Statement
-- 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
-- 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
-- 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
-- 软件一般采用sql注入检测工具jsky、MDCSOFT SCAN等

-- 导出数据、导入数据 (命令控制台下运行)
mysqldump -u root -p  bank>bank.txt;

mysql -u root -p  bank  <bank.txt;

 

参考资料:http://www.runoob.com/mysql/mysql-tutorial.html

© 著作权归作者所有

共有 人打赏支持
上一篇: JS闭包
playgame
粉丝 0
博文 26
码字总数 10272
作品 0
洛阳
QA/测试工程师
私信 提问
Macbook AIR配置PHP开发环境

前言 15初买了这台破air,一直闲置到现在,为了方便准备用这台电脑来做php开发,所以准备将所有的工作环境都慢慢的迁移到Mac上来,简单的使用了一下,确实不错,用户体验真的是非常好。目前在...

微博士
2016/05/07
717
11
MySQL入门教程系列-1.5 如何学习MySQL

在这里持续更新 MySQL入门教程系列-1.5 如何学习MySQL 如何学习 MySQL 这是一个伪命题,每个人都有适合自己的一套学习方法,各

同一种调调
2016/09/28
15
0
深入理解MySQL 5.7 GTID系列(一)

MySQL GTID特性是5.6加入的一个强大的特性,它的目的在于使用GTID的MySQL能够在整个复制环境中能够自动地切换,而不像以前需要指定文件和位置,这也一定是未来发展的方向,我们熟知的MGR也是...

技术小能手
01/08
0
0
docker 制作mysql镜像(一)

最近在学习docker,在直接mysql镜像的时候发现了一些问题。 开始想直接用从docker资源库里下载镜像为了省事,但是出现了问题是。只能启动一个mysql容器,启动第二的时候就不行了。只能保证一...

并不是
2016/10/31
280
0
MySQL学习总结----数据类型

MySQL学习总结----数据类型 MySQL数据库提供了整型、浮点数型、定点数型。 ================================================================================ 一、MySQL中的表 ==========...

doublelinux
2017/10/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

支付宝api实现转账到单个账号

项目后台需要实现用户提现功能,支付宝平台对应的就是“单笔转账到支付宝账户”。具体实现见代码,无套路! 肯定需要先申请支付宝商户账号相关信息。以下为个人沙箱环境实现代码,生产上只需...

貔貅叔
26分钟前
3
0
Spark自定义维护kafka的offset到zk

import kafka.common.TopicAndPartitionimport kafka.message.MessageAndMetadataimport kafka.serializer.StringDecoderimport kafka.utils.ZkUtilsimport org.I0Itec.zkclient.ZkC......

hblt-j
26分钟前
2
0
bash运行脚本的几种方式

bash shell 脚本执行的方法有多种,本文作一个总结,供大家学习参考。 假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。 方法一:切换到shell脚本...

吴伟祥
36分钟前
2
0
看图了解RocksDB

摘要: 它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三...

阿里云官方博客
45分钟前
1
0
关于Python pandas模块输出每行中间省略号问题

关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大部分都是瞎写,根本就是复制黏贴以前的版本,你要想知道其...

上官夏洛特
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部