您的位置:首页 > 数据库 > MySQL

Mysql学习总结

2016-06-27 00:00 513 查看
摘要: mysql学习总结

下面是我的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: