下面是我的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