Mysql个人语句笔记
--一些简单语句记录:
/*mysql*/
SHOW DATABASES
CREATE DATABASE guoDROP DATABASE guo
/*查看创建的数据库*/
SHOW CREATE DATABASE zf
/*字符集*/
CREATE DATABASE guo CHARACTER SET gbk
SHOW CREATE DATABASE guo
ALTER DATABASE guo CHARACTER SET utf8;
SHOW CREATE DATABASE guo
-- 创建表
USE zf
CREATE TABLE hh
(
id INT,
sex CHAR(50),
PRIMARY KEY(id)
)
--
自增列起始数值:
ALTER TABLE tt AUTO_INCREMENT = 100;
CREATE TABLE person (
id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
NAME CHAR(60) NOT NULL,
/*创建主键一定要这样吗?不知道*/
PRIMARY KEY (id)
);
DROP TABLE person
SHOW CREATE TABLE hh
ALTER TABLE hh ADD guo VARCHAR(50)
ALTER TABLE hh MODIFY guo VARCHAR(60)
ALTER TABLE hh DROP guo
SELECT * FROM hh
RENAME TABLE hh TO tt
ALTER TABLE tt CHARACTER SET utf8
-- 查询表详情
USE zf;
DESC tt
-- 关闭链接:quit
-- 版本号
SELECT VERSION() v;
-- 当前日期
SELECT CURRENT_DATE AS c;
SELECT CURDATE()
SELECT 1+2
-- 日期+时间
SELECT NOW();
-- 用户
SELECT USER();
-- USE test 和quick一样,无需分号,不过加上也没关系;
-- SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
-- ORDER BY BINARY col_name. 对大小写排序;
--
USE zf;
-- 日期计算
SELECT YEAR('2012-4-5')
SELECT MONTH('2015-4-5');
SELECT DATE('2015-4-5');
SELECT DAYOFMONTH('2015-4-16');
-- month是整形;
SELECT YEAR(DATE_ADD(CURDATE(),INTERVAL 1 YEAR));
--
SELECT RIGHT('gzf123456',2)
SELECT LEFT('gzf',2)
SELECT * FROM tt WHERE sex IS NOT NULL
SELECT MOD(MONTH(CURDATE()), 12) + 1
SELECT MOD(14, 12)
-- 取余运算(求余数)
SELECT MOD(14, 12)
-- GROUP BY中,两个NULL值视为相同。roder by中,NULL值当做是最小;
--
-- lilke '___':包含三个字符的...
SELECT * FROM tt WHERE sex LIKE '___'
-- 正则表达式 以a开始...正则表达式
SELECT * FROM tt WHERE sex REGEXP '^a';
-- SELECT * FROM pet WHERE name REGEXP 'fy$'----------^以什么开始,$以什么结尾,以fy结尾的。
-- REGEXP 'w';包含w的。
-- 正好包含5个字符:REGEXP '^.....$' 或者是 REGEXP '^.{5}$'
-- 查询第一行:order by ...limit 1;
/*
经典查询:
可以用这样一个子查询解决该问题:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
*/
-- enum类型,指的是字符串区间:不如定义列:color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL;
SHOW CREATE TABLE tt
-- 创建表的时候添加外键: owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id),
-- REFERENCES person(id),
-- 同事插入多列:
/*
INSERT INTO shirt VALUES
(NULL, 'polo', 'blue', @last),
(NULL, 'dress', 'white', @last),
(NULL, 't-shirt', 'blue', @last);
*/
/*修改密码
UPDATE mysql.user SET Password=PASSWORD('newpwd')
-> WHERE User='root';
/*显示所有表的名称*/*/
show tables;
/*显示表结构*/
-- in ('湖南', '四川')
-- between 20 and 30
-- 包括=,<>,<,<=,>,>=)select * from students where name = '李山'
-- like '[^F-M]%' --------- (^排除指定范围)
-- 修改密码mysqladmin -uroot -password ab12
-- 增加用户
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO test1@"%" IDENTIFIED BY "abc";
GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO test2@localhost IDENTIFIED BY "abc";
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION; -- 超级账户
FLUSH PRIVILEGES;-- 刷新权限
-- 删除账户'权限,同时删除user表。
DROP USER 'test1'@'%';
-- 修改密码
/*
4.修改指定用户密码
@>mysql -u root -p
@>密码
mysql>update mysql.user set password=password('新密码') where User="test" and Host="localhost";
mysql>flush privileges;
*/
-- 对密码进行加密
SELECT PASSWORD('gzf')
-- 查询用户权限
SHOW GRANTS FOR 'test1'@'%';
-- 取消权限 但需要手动删除用户表
REVOKE ALL ON *.* FROM test1@'%' ;
DELETE FROM USER WHERE USER = "test1" AND HOST = "%" ;
FLUSH PRIVILEGES;
-- 查询当前用户
SELECT USER()
-- 查询当前数据库
SELECT DATABASE();
-- 装载文件数据[文本文件用tab隔开]
LOAD DATA LOCAL INFILE "C:/Users/ZeFeng/Desktop/gzf.txt" INTO TABLE tt;
-- 查询语句
SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
SELECT "hello", "'hello'", "''hello''", "hello", "\"hello";
-- 十六进转为字符
SELECT 0x636174
--
SELECT HEX('ert')
--
SELECT NULL=NULL
-- 和=相同
SELECT NULL<=>NULL
SET @t1='sfdsfd';
SELECT @t1
SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
-- 查询最小的
SELECT LEAST(5,7,3)
-- 查询最大的
SELECT GREATEST(34.0,3.0,5.0,767.0);
--
SELECT ISNULL('')
-- 支持not和!
SELECT NOT 0
--
SELECT !1
DECLARE @a VARCHAR(50);
SELECT a:=sex FROM tt ORDER BY id LIMIT 1;
SELECT a;
-- 支持&&和||
SELECT * FROM tt WHERE id=123 AND sex IS NULL
-- 相当于三元运算
SELECT IF(1<2,2,3);
-- 返回两者中不是null的数值,如果都为数值,返回第一个;
SELECT IFNULL(NULL,10);
SELECT IFNULL(10,12);
SELECT IFNULL(10,NULL);
--
SELECT CHAR('gzf')
--
SELECT CONCAT('My', 'S', 'QL','123');
-- 第一个参数为分隔符;这是与concat的区别;会忽略null,但不会忽略空字符串;
SELECT CONCAT_WS(',','First name','Second name','Last Name',NULL,' ','null');
-- 相当于sql的stuff
SELECT INSERT('Quadratic', 3, 4, 'What');
-- 日期:
SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
SELECT ADDDATE('1998-01-02', 31);
SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
SELECT CURTIME();
-- 转化类型
SELECT CONVERT('abc' USING utf8);
--
SELECT CAST('2000-01-01' AS DATE);
SELECT CAST(1 AS CHAR) +'1233';
SELECT '1'+'2'
-- 将两个字符串结合
SELECT CONCAT(1,2)
-- 加密
SELECT MD5('123')
SELECT PASSWORD('123')
-- 查看字符集
SELECT CHARSET('abc');
-- 强转字符集
SELECT CHARSET(CONVERT('abc' USING latin1));
--
SELECT LAST_INSERT_ID();
-- 提取字符串
SELECT SUBSTRING_INDEX(USER(),'@',1);
SELECT SUBSTRING_INDEX('guo,ze,feng,4',',',4);
--
-- DEFAULT(col_name) 查看某列的默认值
-- 保留四位小数点
SELECT FORMAT(1234.00,4)
-- 唯一标识码
SELECT UUID()
-- 修改列明,更改列的类型
ALTER TABLE tt CHANGE sex sexx INTEGER;
ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
-- 也可以使用change
-- 删除多个列:
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
-- 修改索引
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)
-- 创建索引
CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)
-- 删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
-- 查看索引
SHOW INDEX FROM tt;
-- 创建外键
ALTER TABLE tb_active ADD CONSTRAINT FK_ID FOREIGN KEY(user_id) REFERENCES tb_user(id)
-- 删除外键
ALTER TABLE `tb_active` DROP FOREIGN KEY `FK_ID`
-- 查看函数功能是否开启
SHOW VARIABLES LIKE '%func%';
-- 开启函数:
SET GLOBAL log_bin_trust_function_creators=1;
-- 创建函数
DELIMITER $$
CREATE FUNCTION first_func(param1 VARCHAR(5),parmam2 VARCHAR(5),param3 VARCHAR(10))
RETURNS TINYINT
BEGIN
RETURN 1;
END
$$
DELIMITER ;
SELECT first_func('1','2','3');
-- 删除函数
DROP FUNCTION first_func
-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE guo_pro(
canshu VARCHAR(10)
)
BEGIN
SELECT canshu;
END
$$
DELIMITER ;
CALL guo_pro('ggg');
-- 删除存储过程
DROP PROCEDURE guo_pro
-- 创建视图
CREATE VIEW guo_view
AS SELECT * FROM tt;
SELECT * FROM guo_view
-- 复制表结构1,2
-- 1新版本
CREATE TABLE t1 LIKE tt
DROP TABLE t1
-- 通用
CREATE TABLE t1 SELECT * FROM tt WHERE 1=1
-- 创建临时表
CREATE TEMPORARY TABLE guo(id INT)
INSERT INTO guo VALUES(1)
SELECT * FROM guo
-- 删除虚拟表
DROP TABLE guo
-- 备份
-- 分页:跳过前3条,取第四第五条数据;性能差
SELECT * FROM testtwo LIMIT 3,2
-- 提高性能
elect * FROM TABLE AS a INNER JOIN (SELECT id FROM TABLE ORDER BY id LIMIT m, n) AS b ON a.id = b.id ORDER BY a.id;
SQL代码1:平均用时6.6秒 SELECT * FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 30
SQL代码2:平均用时0.6秒 SELECT * FROM `cdb_posts` WHERE pid >= (SELECT pid FROM `cdb_posts` ORDER BY pid LIMIT 1000000 , 1) LIMIT 30
-- 相当于
/*
mysql中变量不用事前申明,在用的时候直接用“@变量名”使用就可以了。
第一种用法:set @num=1; 或set @num:=1; //这里要使用变量来保存数据,直接使用@num变量
第二种用法:select @num:=1; 或 select @num:=字段名 from 表名 where ……
注意上面两种赋值符号,使用set时可以用“=”或“:=”,但是使用select时必须用“:=赋值”
*/
SET @a=1;
SELECT @a;
-- 创建表
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
-- 创建触发器
CREATE TRIGGER gzf_tri BEFORE INSERT ON test
FOR EACH ROW BEGIN
-- INSERT INTO test2 SET a2 = NEW.a1;
-- DELETE FROM test3 WHERE a3 = NEW.a1;
-- UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END
--
DELIMITER ;
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE p8 ()
BEGIN
DECLARE a INT;
DECLARE b INT;
SET a = 5;
SET b = 5;
END;
//
DELIMITER ;
DROP PROCEDURE p8
-- 事务
TRUNCATE TABLE test;
DELIMITER //
SET @a=0;
START TRANSACTION;
INSERT INTO test VALUES(333,'sdfs');
IF ROW_COUNT() < 1 THEN
SET @a = -1;
INSERT INTO test VALUES(444,'sdfs',00);
IF ROW_COUNT() < 1 THEN
SET @a = -1;
IF @=0 THEN
COMMIT;
ELSE
ROLLBACK;
//
COMMIT;
ROLLBACK;
SELECT * FROM test;
-- 控制语句
SELECT CASE 1 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' ELSE 'no one' END;
SELECT IF(1=2,1,2)
-- 控制语句
DELIMITER //
CREATE PROCEDURE test_pro(
id INT
)
BEGIN
IF id>1 THEN SELECT 1;
ELSEIF id>2 THEN SELECT 2;
ELSE
SELECT 3;
END IF;
END
//
DELIMITER ;
CALL test_pro(3)
-- 存储过程测试:
DROP PROCEDURE test_pro1;
CALL test_pro1(3);
--
-- 第一个如果是null,则返回第二个,否则返回第一个;
SELECT IFNULL(0,1)
SELECT IFNULL(NULL,1)
-- 如果第一个和第二个相等,则返回null;否则返回第一个
SELECT NULLIF(1,1)
SELECT NULLIF(1,2)
-- 查询是否自动提交
SELECT @@autocommit;
-- 控制语句
DELIMITER //
CREATE PROCEDURE pro
BEGIN
DECLARE a INT DEFAULT 5;
IF a>2 THEN
SELECT @a;
ELSEIF @a<5 THEN
SELECT 2;
END IF;
END
//
-- while do用法:
DELIMITER /
CREATE PROCEDURE guo()
BEGIN
DECLARE gg INT DEFAULT 0;
DECLARE tt VARCHAR(50) DEFAULT '';
WHILE(gg<5) DO
SET gg=gg+1;
SET tt=CONCAT(tt,'a');
END WHILE;
SELECT tt;
END
/
DELIMITER ;
CALL guo();
DROP PROCEDURE guo
-- 循环控制语句
DELIMITER /
CREATE PROCEDURE ABC()
BEGIN
DECLARE a VARCHAR(50) DEFAULT '';
SET @a=1;
gzf: LOOP
SET @a=@a+1;
SET a=CONCAT(a,CONVERT(@a,CHAR));
IF @a=5 THEN
LEAVE gzf;
END IF;
END LOOP gzf;
SELECT a;
END
/
DELIMITER ;
CALL abc();
DROP PROCEDURE abc
-- 创建游标
DELIMITER /
CREATE PROCEDURE ABC()
BEGIN
DECLARE tmpName VARCHAR(20) DEFAULT '' ;
DECLARE allName VARCHAR(255) DEFAULT '' ;
DECLARE cur1 CURSOR FOR SELECT NAME FROM test ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = NULL;
OPEN cur1;
FETCH cur1 INTO tmpName;
WHILE ( tmpname IS NOT NULL) DO
SET tmpName = CONCAT(tmpName ,";") ;
SET allName = CONCAT(allName ,tmpName) ;
FETCH cur1 INTO tmpName;
END WHILE;
CLOSE cur1;
SELECT allName ;
END
/
DELIMITER ;
CALL abc();
DROP PROCEDURE abc
-- loop游标:
ELIMITER $$
DROP PROCEDURE IF EXITS cursor_example$$
CREATE PROCEDURE cursor_example()
READS SQL DATA
BEGIN
DECLARE l_employee_id INT;
DECLARE l_salary NUMERIC(8,2);
DECLARE l_department_id INT;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR SELECT employee_id, salary, department_id FROM employees;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN cur1;
emp_loop: LOOP
FETCH cur1 INTO l_employee_id, l_salary, l_department_id;
IF done=1 THEN
LEAVE emp_loop;
END IF;
END LOOP emp_loop;
CLOSE cur1;
END$$
DELIMITER ;
-- repeat游标:
/*创建过程*/
DELIMITER //
DROP PROCEDURE IF EXISTS test //
CREATE PROCEDURE test()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a VARCHAR(200) DEFAULT '';
DECLARE c VARCHAR(200) DEFAULT '';
DECLARE mycursor CURSOR FOR SELECT fusername FROM uchome_friend;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN mycursor;
REPEAT
FETCH mycursor INTO a;
IF NOT done THEN
SET c=CONCAT(c,a);/*字符串相加*/
END IF;
UNTIL done END REPEAT;
CLOSE mycursor;
SELECT c;
END //
DELIMITER ;
SHOW SESSION VARIABLES;
DROP PROCEDURE p8
--
-- 游标的使用
CREATE PROCEDURE gzf_proc ()
BEGIN
-- 需要定义接收游标数据的变量
DECLARE a VARCHAR(50);
DECLARE b VARCHAR(50);
-- 游标
DECLARE cur CURSOR FOR SELECT NAME FROM test;
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 开始循环
read_loop: LOOP
-- 提取游标里的数据,这里只有一个,多个的话也一样;
FETCH cur INTO a;
-- 声明结束的时候
IF done THEN
LEAVE read_loop;
END IF;
-- 这里做你想做的循环的事件
SET b=b+"-"+a;
END LOOP;
-- 关闭游标
CLOSE cur;
END
-- -- 与sqlserver不同的地方:mysql sqlwerver
/*
1.ALTER TABLE hh MODIFY guo VARCHAR(60) ALTER table Teacher alter column TName varchar(50)
2.ALTER TABLE hh DROP guo ALTER table Teacher drop column TName
3.RENAME TABLE hh TO tt 修改表名 sp_rename 'oldname','newname'
4.
*/
-- 与sqlserver相同的地方:
/*
创建数据库和创建表都一样
*/
Mysql个人语句笔记的更多相关文章
- MySQL基础语句【学习笔记】
放在这里,以备后查. 1. 数据库, 数据库服务器, 数据库语言 数据库,是持久性数据的集合,供给定企业的应用程序系统使用,并且由一个数据库管理系统来管理: 数据库服务器,又称数据库管理系统,用来管理 ...
- MySQL DELETE语句和TRUNCATE TABLE语句的区别
MySQL DELETE语句和TRUNCATE TABLE语句的区别 2010-10-08 16:05 佚名 互联网 字号:T | T 在MySQL数据库中,DELETE语句和TRUNCATE TAB ...
- 《高性能MySQL》读书笔记--锁、事务、隔离级别 转
1.锁 为什么需要锁?因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对表中同一行记录进行操作,比如有的在读取该行数据,其他的尝试去删除它.为了保证数据的一致性,数据库就要对这种并发操作进 ...
- MySQL数据库学习笔记(十)----JDBC事务处理、封装JDBC工具类
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量
继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...
- mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- Mysql DOC阅读笔记
Mysql DOC阅读笔记 转自我的Github Speed of SELECT Statements 合理利用索引 隔离调试查询中花费高的部分,例如函数调用是在结果集中的行执行还是全表中的行执行 最 ...
- Mysql update语句赋值嵌套与在表列中数据后面增加数据
1.Mysql update语句赋值嵌套select 点击(此处)折叠或打开 update a set col=(select col from a where id='5') where id&g ...
随机推荐
- InstallShield安装包中集成第三方安装包的方案选择
原文:InstallShield安装包中集成第三方安装包的方案选择[转] 我们在制作安装包时,有些情况下会涉及第三方安装的集成,这里将讨论如何调用安装第三方包,以及需要注意的事项. 第三方安装包的 ...
- linux内核包转发过程(三)NIC帧接收分析
[版权声明:转载请保留源:blog.csdn.net/gentleliu.邮箱:shallnew*163.com] 每一个cpu都有队列来处理接收到的帧.都有其数据结构来处理入口和出口流量,因此.不同 ...
- The maximum string content length quota (8192) has been exceeded while reading XML data
原文:The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们W ...
- java RC4加密和解码
package com.*; public class RC4 { public static String decry_RC4(byte[] data, String key) { if (data ...
- RabbitMQ (两)工作队列
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网新手教程的翻译,然后自己进行了部分的改动与 ...
- android之Fragment(官网资料翻译)
Fragment要点 Fragment作为Activity界面的一部分组成出现 能够在一个Activity中同一时候出现多个Fragment,而且,一个Fragment亦可在多个Activity中使用 ...
- 无效 URI: 故障分析证书颁发机构/主机
无效 URI: 分析证书颁发机构/主机 出现该错误的原因是URL中少了一个斜杠.正常的URL是"http:"后边有两个斜杠,而我在改动配置文件里的URL的IP地址部分时.不小心删掉 ...
- java保存获取Web内容的文件
package com.mkyong; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.F ...
- Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...
- BST(Binary Search Tree)
原文链接:http://blog.csdn.net/jarily/article/details/8679280 /****************************************** ...