常用命令
1创建用户test,密码为password该用户没有任何权限
create user test@localhost identified by 'password';
2指定用户拥有创建表的权限远程 %可以换成ip
grant all on database.* to 'test'@'%' identified by 'password';
grant select,insert,update,delete,create,drop on database.* to test@localhost identified by "test";
3.刷新数据库
flush privileges;
4.查看用户信息
select host,user from mysql.user;
cmd mysql的bin目录下,使用mysql命令备份,还原能避免一些报错,解决兼容问题
备份MySQL数据库的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
mysqldump -h192.168.1.240 -uroot -ppassword testa>"F:\test.sql"
备份MySQL数据库为带删除表的格式
备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql
直接将MySQL数据库压缩备份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
备份MySQL数据库某个(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同时备份多个MySQL数据库
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
仅仅备份数据库结构
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
备份服务器上所有数据库
mysqldump –all-databases > allbackupfile.sql
还原MySQL数据库的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
还原压缩的MySQL数据库
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
将数据库转移到新服务器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
导入数据
mysql>use abc;
mysql>set names utf8;
mysql>source /home/abc/abc.sql;
不存在就创建
CREATE TABLE IF NOT EXISTS `basegraphics` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`content` text NOT NULL COMMENT '文本内容',
`src` varchar(100) NOT NULL COMMENT '图片地址',
`width` varchar(30) NOT NULL COMMENT '图片宽度',
`height` varchar(30) NOT NULL COMMENT '图片高度',
`createtime` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
如果表存在则删除
DROP TABLE IF EXISTS orders
DISTINCT 替换GROUP by
select count(1) from (select order_id FROM `sales_flat_order_item` GROUP by order_id)a;
SELECT count(DISTINCT order_id) FROM `sales_flat_order_item`;
#即可查看建表sql语句
SHOW CREATE TABLE test;
#表的字段数
SHOW COLUMNS FROM test;
上一条
SELECT * FROM A WHERE id < $id ORDER BY id DESC LIMIT 1
下一条
SELECT * FROM A WHERE id > $id ORDER BY id ASC LIMIT 1
如果有字段自增和默认值可写成:
INSERT INTO Persons VALUES ('Bill', 'Xuanwumen 10');
常用函数
ABS(x) 返回x的绝对值
SELECT ABS(-1);
---- 返回1
CEIL(x)返回大于或等于 x 的最小整数
SELECT CEIL(1.5);
---- 返回2
--判断是否是整数
SELECT 10<>ceil(10.23),10<>ceil(10.0)
FLOOR(x) 返回小于或等于 x 的最大整数
SELECT FLOOR(1.5);
---- 返回1
ROUND(x)返回离 x 最近的数
SELECT ROUND(1.23456, 2);
TRUNCATE(x,y)返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入
SELECT TRUNCATE(1.23456,3);
---- 返回1.234
LPAD (str,len,padstr)
返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。
mysql> SELECT LPAD('hi',4,'?');-> '??hi'
mysql> SELECT LPAD('hi',1,'?');-> 'h'
RPAD(str,len,padstr)
返回字符串str, 其右边被字符串 padstr填补至len 字符长度。假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。
FORMAT(x,n)函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入
SELECT FORMAT(250500.5634, 2);
---- 返回250,500.56
LTRIM/RTRIM/TRIM 去掉字符串两端的空格
SELECT TRIM(' RUNOOB ');
---- 返回RUNOOB
INSERT(str,pos,len,newstr)
返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。 如果pos 超过字符串长度,则返回值为原始字符串。 假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为NULL。
mysql> SELECT INSERT('Quadratic', 3, 4, 'What');-> 'QuWhattic'
mysql> SELECT INSERT('Quadratic', -1, 4, 'What');-> 'Quadratic'
mysql> SELECT INSERT('Quadratic', 3, 100, 'What');-> 'QuWhat'
LENGTH(str)
返回值为字符串str 的长度,单位为字节。一个多字节字符算作多字节。这意味着 对于一个包含5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。
mysql> SELECT LENGTH('text');-> 4
REPEAT(str,count)
返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。若 count <= 0,则返回一个空字符串。若str 或 count 为 NULL,则返回 NULL 。
mysql> SELECT REPEAT('MySQL', 3);-> 'MySQLMySQLMySQL'
测试表数据
GREATEST(求最大值)和LEAST(求最小值)
mysql> SELECT c_id, GREATEST( num1, num2 ) AS max, num1, num2 from comment where
num1 != "" and num2 != "";
+------+------+------+------+
| c_id | max | num1 | num2 |
+------+------+------+------+
| 1 | 21 | 21 | 12 |
| 2 | 219 | 133 | 219 |
| 3 | 67 | 67 | 16 |
+------+------+------+------+
3 rows in set (0.00 sec)
mysql> SELECT c_id, LEAST( num1, num2 ) AS max, num1, num2 from comment where nu
m1 != "" and num2 != "";
+------+------+------+------+
| c_id | max | num1 | num2 |
+------+------+------+------+
| 1 | 12 | 21 | 12 |
| 2 | 133 | 133 | 219 |
| 3 | 16 | 67 | 16 |
+------+------+------+------+
3 rows in set (0.00 sec)
REGEXP函数
mysql> SELECT * FROM `comment` WHERE content REGEXP '[0-9]+';
+------+------+------+------------+---------------------+------+------+
| c_id | u_id | name | content | datetime | num1 | num2 |
+------+------+------+------------+---------------------+------+------+
| 1 | 1 | test | 2222222211 | 2010-11-10 15:16:00 | 21 | 12 |
+------+------+------+------------+---------------------+------+------+
1 row in set (0.00 sec)
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。 IFNULL()返回一个数字或字符 串值,取决于它被使用的上下文环境 。
mysql > select IFNULL(1,0);
-> 1
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,'yes');
-> 'yes'
判断字段值是否为null或者空串''
SELECT * FROM `table_name' WHERE ifnull(col_name,'')='';
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。 IF()返回一个数字或字符串值,取决于它被使用的上下文。
mysql> select IF(1>2,2,3);
-> 3
mysql> select IF(1<2,'yes','no');
-> 'yes'
mysql> select IF(strcmp('test','test1'),'yes','no');
-> 'no'
expr1作为整数值被计算,它意味着如果你正在测试浮点或字符串值,你应该使用一个比较操作来做。
mysql> select IF(0.1,1,0);
-> 0
mysql> select IF(0.1<>0,1,0);
-> 1
在上面的第一种情况中,IF(0.1)返回0,因为0.1被变换到整数值, 导致测试IF(0)。这可能不是你期望的。在第二种情况中,比较测试原来的浮点值看它是否是非零,比较的结果被用作一个整数。
select * from stock_moves where abs (qty)=1140
CONCAT
可以连接一个或者多个字符串,MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
mysql> SELECT CONCAT(2,' test');
-> '2 test'
CONCAT_WS
即有分隔符的字符串连接如连接后以逗号分隔。优先使用
mysql> SELECT CONCAT_WS(';',2,' test');
-> '2;test'
SELECT CONCAT_WS(';', null,' test');
-> 'test'
COALESCE()
函数表示可以返回参数中的第一个非空表达式,当你有N个参数时选取第一个非空值(从左到右)。
mysql->select coalesce(null,"carrot","apple")
->carrot
mysql-> select coalesce(1,"carrot","apple")
->1
select coalesce(a,b,c);
如果a==null,则选择b;
如果b==null,则选择c;
如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
INSTR(str,substr)
返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。
mysql> SELECT INSTR('foobarbar', 'bar');
-> 4
LOCATE(substr,str) 包含
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
select substr('1分29秒',1,LOCATE('分','1分29秒')-1)*60+substr('1分29秒',LOCATE('分','1分29秒')+1,2)
SELECT LOCATE("0316", "03162774952")
SUBSTRING
SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) ,SUBSTRING(str FROM pos FOR len)
不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
mysql> SELECT SUBSTRING('Quadratically',5);
-> 'ratically'
mysql> SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar'
mysql> SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica'
mysql> SELECT SUBSTRING('Sakila', -3);
-> 'ila'
SUBSTRING_INDEX(str,delim,count)
在定界符 delim 以及count 出现前,从字符串str返回自字符串。若count为正值,则返回最终定界符(从左边开始)左边的一切内容。若count为负值,则返回定界符(从右边开始)右边的一切内容。
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
MAKE_SET(bits,str1,str2,...)
返回一个设定值 (一个包含被‘,’号分开的字字符串的字符串) ,由在bits 组中具有相应的比特的字符串组成。str1 对应比特 0, str2 对应比特1,以此类推。str1, str2, ...中的 NULL值不会被添加到结果中。
mysql> SELECT MAKE_SET(1,'a','b','c');
-> 'a'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');
-> 'hello,world'
mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world');
-> 'hello'
LEFT(str,len) 返回从字符串str 开始的len 最左字符。
mysql> SELECT LEFT('foobarbar', 5);-> 'fooba'
RIGHT(s,n) 函数返回字符串 s 最右边的 n 个字符
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
select ELT(1, 'ej ', 'Heja ', 'hej ', 'foo '); //-> 'ej '
REPLACE(str,from_str,to_str)
返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
update user set created =replace(replace (replace(created, "年 ", "- "), "月 ", "- "), "日 ", " ");
GROUP_CONCAT()
是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,
1.例如:
select student_id,group_concat(courses_id order by courses_id desc) as courses_id from student_courses group by student_id;
+------------+-------------+
| student_id | courses_id |
+------------+-------------+
| 2 | 5,4,3 |
2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:
SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;
+------------+---------+
| student_id | courses |
+------------+---------+
| 2 | 3|||4|||5 |
+------------+---------+
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
UNION 指令的目的是将两个 SQL 语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些许类似,因为这两个指令都可以由多个表格中撷取资料。 UNION 的一个限制是两个 SQL 语句所产生的栏位需要是同样的资料种类。另外,当我用 UNION 这 个指令时,我们只会看到不同的资料值 (类似 SELECT DISTINCT )。
UNION 的语法如下:
[SQL 语句 1]
UNION
[SQL 语句 2]
而我们要找 出来所有有营业额 (sales) 的日子。要达到这个目的,我们用以下的 SQL 语句:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
trim函数可以过滤指定的字符串:
mysql> SELECT TRIM(' bar '); //默认删除前后空格
-> 'bar'
mysql> SELECT TRIM(LEADING ',' FROM ',,barxxx'); //删除指定首字符 如',‘
-> 'barxxx'
mysql> SELECT TRIM(BOTH ',' FROM ',,bar,,,'); //删除指定首尾字符
-> 'bar'
mysql> SELECT TRIM(TRAILING ',' FROM 'barxxyz,,');
-> 'barxxyz'