mysql大杂烩
Posted gaoyazhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql大杂烩相关的知识,希望对你有一定的参考价值。
1. select VERSION();可查询mysql的版本
2. 创建、查看、选择数据库:
mysql> CREATE DATABASE gsmomdb;
mysql> show databases;
mysql> USE <db_name>
select databases(); --查看当前数据库
show databases; --查看所有数据库名
select current_user(); --查看当前用户
3. 创建、查看表:
mysql> SHOW TABLES;
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
4. 操作表:
insert into pet values('Fluffy' , 'Harold' , 'cat' , 'f' , '1993-02-04' , NULL );
insert into pet values('Claws' , 'Gwen' , 'cat' , 'm' , '1994-03-17' , NULL );
insert into pet values('Buffy' , 'Harold' , 'dog' , 'f' , '1989-05-13' , NULL );
insert into pet values('Fang' , 'Benny' , 'dog' , 'm' , '1990-08-27' , NULL );
insert into pet values('Bowser' , 'Diane' , 'dog' , 'm' , '1979-08-31' , '1995-07-29' );
insert into pet values('Chirpy' , 'Gwen' , 'bird' , 'f' , '1998-09-11' , NULL );
insert into pet values('Whistler' , 'Gwen' , 'bird' , NULL , '1997-12-09' , NULL );
insert into pet values('Slim' , 'Benny' , 'snake' , 'm' , '1996-04-29' , NULL );
insert into pet values('Puffball' , 'Diane' , 'hamster' , 'f' , '1999-03-30' , NULL );
insert into pet values('娃娃' , '中国人' , 'hamster' , 'f' , '1999-03-30' , NULL );
select <colume> from <tbl_name> where <(columeX = valueX AND columeY = valueY) OR columeZ = valueZ> ORDER by <columeA> DESC/ASC;
delete from <tbl_name> where <columeX = value>;
update <tbl_name> set <columeY = value> WHERE <columeX = value>;
5. 表运算:
计算年限: SELECT name, birth, CURDATE(), (YEAR(CURDATE())-YEAR(birth)) - (RIGHT(CURDATE(),5)<RIGHT(birth,5)) AS age FROM pet ORDER by age [DESC];
6. NULL: is NULL, is not NULL
没有: = NULL, 或<>NULL, 这种比较是没有结果的
7. 模糊匹配选择:
-------------------------------------------
LIKE 表示的:
"_"表示一个字符
"%"表示任意多个字符
例:
SELECT * FROM pet WHERE name LIKE '%w%';
SELECT * FROM pet WHERE name LIKE '_____';
-------------------------------------------
REGEXP 表示的:
"[a-z]"表示任何字母
"[0-9]"表示任何数字
"M*"表示任意多个M字符
"[0-9]"表示任意多个数字
"."表示任意字符
".*"表示任意多个任意字符
"^N"表示以N开始
"N$"表示以N结尾
例:
SELECT * FROM pet WHERE name REGEXP '^b'; -- 以b开头的
SELECT * FROM pet WHERE name REGEXP 'l$'; -- 以l结尾的
SELECT * FROM pet WHERE name REGEXP 'w'; -- 包含w的
8. 选择行数:
select count(*) from pet;
SELECT COUNT(*) FROM pet GROUP BY owner; -- owner相同的选项数
SELECT owner, COUNT(*) FROM pet GROUP BY owner; -- owner相同的选项数(同时显示owner)
9. 重定向:
shell: mysql < batch-file > sql.out -- 批处理及执行结果
shell: mysql -e "select * from pet" gsmomdb > sql.out -- 个别执行结果,直接完成
mysql: select * into '/gsmom/sql.out' from pet;
11. 常用查询例子:
1) 使用用户变量临时保存: select @min_date:=MIN(date), @max_date:=MAX(date) from event; select @min_date;
2) 合并条件: select owner, species from pet where owner = 'Harold' UNION select owner, species from pet where species = 'dog';
类似: select owner, species from pet where owner = 'Harold' OR species = 'dog';
3) 自动id
4) 表项为enum:
建表时,定义了ENUM字段
CREATE TABLE animals (
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (grp,id)
);
如果插入grp不在enum范围之内:
insert into animals (grp, name) values ('what', 'pig');
结果: 1) 有个告警: OK, 1 row affected, 1 warning (0.00 sec);
2) 记录中grp不存在select * from animals;
+-----+----+------+
| grp | id | name |
+-----+----+------+
| | 1 | pig |
+-----+----+------+
12. 查看mysql的用户及权限控制
select * from mysql.user;
13. mysql账户控制:
1) GRANT新增账户:
代码密码:
GRANT ALL PRIVILEGES ON *.* TO 'gaoyazhao'@'localhost' IDENTIFIED BY 'Gsmomci0' WITH GRANT OPTION;
-- 语法句式为: GRANT <权限> ON <DB> TO '<USER>'@'<HOSTNAME>' IDENTIFIED BY '<PASSWD>' WITH GRANT OPTION;
不带密码:
GRANT ALL PRIVILEGES ON *.* TO 'gaoyazhao'@'localhost';
-- 语法句式为: GRANT <权限> ON <DB> TO '<USER>'@'<HOSTNAME>';
2) INSERT修改账户:
查看user的权限和user表的字段:
select * from mysql.user;
根据user表的字段, 修改user表的内容:
INSERT INTO user VALUES('localhost','gaoyazhao',PASSWORD('Gsmomci0'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
FLUSH PRIVILEGES; --刷账户
可以通过相应的方法修改用户的权限
3) 设置账户密码:
出了GRANT、INSERT两种方法外:
shell> mysqladmin -u user_name -h host_name password "newpwd"
4) 如何自动登录又使密码安全:
将密码方在文件中,并设置文件的访问权限(400)
mysql> UPDATE user SET Password = PASSWORD('bagel') WHERE Host = '%' AND User = 'francis';
FLUSH PRIVILEGES;
14. 数据库备份恢复:
备份: mysqldump --single-transaction gsmomdb > backup_sunday_1_PM.sql
恢复: mysql gsmomdb < backup_sunday_1_PM.sql
修复: myisamchk --silent --force --fast --update-state -O key_buffer=64M -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M /path/to/datadir/*/*.MYI
note: 在表修复之前进行备份是个好习惯
15. 数据库数据的位置:
cnf文件: /usr/share/mysql
dat文件: /var/lib/mysql/mysql
chapter9--语言结构
1. 字符串: select 'string';
2. 数值型:
SELECT 0x41,CAST(0x41 AS UNSIGNED); -- 十六进制数值默认以字符形式保存,如果要以数值形式存放,要使用CAST(...AS)
SELECT 65; -- 十进制数值以数值形式存放
3. SELECT TRUE, FALSE; -- 常量名
4. SELECT NULL; -- NULL
5. 引用:
col_name
tbl_name.col_name
db_name.tbl_name.col_name
6. 大小写敏感: 取决于lower_case_tables_name的配置值, 其值为0、1、2时分别代表不同的含义
7. 用户变量: @var_name
SET @my_var=0; SELECT '0' into @my_var;
8. 系统变量:
SHOW GLOBAL VARIABLES like 'sort_buffer_size';
SET GLOBAL sort_buffer_size=value;
9. 注释:
# comment
-- comment
/* comment */
10. 保留字: 略
chapter11--列类型
1. int:
BIT[]
BOOLEAN
DECLARE bvalid boolean DEFAULT false;
TINYINT
1字节
SMALLINT
2 字节
MEDIUMINT
3 字节
INT
4 字节
BIGINT
8 字节
INT [UNSIGNED][ZEROFILL], 表示无符号数, 前置补零
2. DATE:
DATE 日期 YYYY-MM-DD
DATETIME 时间 YYYY-MM-DD HH-MM-SS
TIMESTAMP 最后一个INSERT或UPDATE的时间戳
例:
create table tbl_mydate(create_date DATE, action_date TIMESTAMP);
insert into tbl_mydate (create_date) values('2013-4-6');
mysql> select * from tbl_mydate;
+-------------+---------------------+
| create_date | action_date |
+-------------+---------------------+
| 2013-04-06 | 2013-04-07 11:38:44 |
+-------------+---------------------+
1 row in set (0.00 sec)
3. String: CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET
CHAR&VARCHAR
1) CHAR删除了首部和结尾的空格, 而VARCHAR相反
2) CHAR(num)中可以保存的数据量为num, VARCHAR(num)则是变长的
3) CHAR(num), VCHAR(num)中num均表示最多可以保存多少字符。但当字符数小于等于num时,CHAR和VCHAR消耗的存储单位不一样
BINARY&VARBINARY
1) BINARY&VARBINARY vs CHAR&VARCHAR, 前者保存的是二进制字符串, 后者保存的是字符串
ENUM
见前面的例子. 列值只能选定义好的值
SET-- 集合(去掉重复, 按定义之顺序)
CREATE TABLE tbl_myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
chapter12--函数和操作符
1. 操作符:
:=
||, OR, XOR
&&, AND
NOT
例子: SELECT NOT 0; SELECT NOT 1; -- 当操作数为0 时,所得值为 1 ;当操作数为非零值时,所得值为 0 ,而当操作数为NOT NULL时,所得的返回值为 NULL。
BETWEEN, CASE, WHEN, THEN, ELSE
例子: SELECT 1 BETWEEN 2 AND 3; SELECT 'b' NOT BETWEEN 'a' AND 'c';
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
例子: SELECT 1 is true; 错误的例子: SELECT 1 is 0; -- is和is not只能用于true和false的,判断值是否相等,要用“=”
SELECT 2 IN (0,3,5,'wefwf'); SELECT 2 NOT IN (0,3,5,'wefwf');
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
- (一元减号), ~ (一元比特反转)
!
BINARY, COLLATE
COALESCE(value1, value2, ...) -- 返回第一个非NULL
GREATEST(value1, value2, ...) -- 返回值最大的一个
LEAST(value1, value2,...) -- 返回值最小的一个
ISNULL(value1) -- 判断值是否为NULL, =NULL的判断通常是错误的, 常用的是ISNULL和IS NULL
INTERVAL(N,N1,N2,N3,...) -- 二分查找排序, N1 < N2 < N3..., N < N1返回0, N < N2返回1, N < N3返回2... N为NULL返回-1
2. 控制流函数
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。
SELECT IF(1<2, 'yes', 'no');
IFNULL(expr1,expr2) 假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。
SELECT IFNULL(NULL, 'mygod');
NULLIF(expr1,expr2) 如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。
3. 字符串函数
ASCII(str) 返回值为字符串str 的最左字符的数值。
BIN(N) 返回值为N的二进制值的字符串表示。例如BIN(3)就是11
BIT_LENGTH(str) 返回值为二进制的字符串str 长度。
CHAR(N,... [USING charset]) CHAR()将每个参数N理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串。
CHAR_LENGTH(str)/CHARACTER_LENGTH(str) 返回值为字符串str 的长度,长度的单位为字符。
CONCAT(str1,str2,...) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
CONCAT_WS(separator,str1,str2,...) CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。 第一个参数是其它参数的分隔符。
CONV(N,from_base,to_base) 将数字N从from_base进制转为to_base进制, 例如CONV(10,16,10),将10从16进制转为10进制表示
ELT(N,str1,str2,str3,...) 若N = 1,则返回值为 str1 ,若N = 2,则返回值为 str2 ,以此类推。
FIND_IN_SET(str,strlist) 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。SELECT FIND_IN_SET('b','a,b,c,d');返回2
FORMAT(X,D) 将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串。
HEX(N_or_S) 如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示;如果N_OR_S 是一个字符串,则返回值为一个N_OR_S的十六进制字符串表示
INSERT(str,pos,len,newstr) 返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。
INSTR(str,substr) 返回字符串 str 中子字符串的第一个出现位置。
LCASE(str)/LOWER(str) 字符串转为小写
UPPER(str) 字符串转为大写
LEFT(str,len) 返回从字符串str 开始的len 最左字符。
LENGTH(str) 返回值为字符串str 的长度,单位为字节。
LPAD(str,len,padstr) 返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。
LTRIM(str) 返回字符串 str ,其引导空格字符被删除。
RTRIM(str) 返回字符串 str ,结尾空格字符被删去。
MAKE_SET(bits,str1,str2,...) 返回一个设定值 (一个包含被‘,’号分开的字字符串的字符串) ,由在bits 组中具有相应的比特的字符串组成。str1 对应比特 0, str2 对应比特1,以此类推。str1, str2, ...中的 NULL值不会被添加到结果中。
MID(str,pos,len) MID(str,pos,len) 是 SUBSTRING(str,pos,len)的同义词。
OCT(N) 返回一个 N的八进制值的字符串表示,其中 N 是一个longlong (BIGINT)数。这等同于CONV(N,10,8)。
OCTET_LENGTH(str) OCTET_LENGTH() 是 LENGTH()的同义词。
POSITION(substr IN str) POSITION(substr IN str)是 LOCATE(substr,str)同义词。
QUOTE(str) 引证一个字符串,由此产生一个在SQL语句中可用作完全转义数据值的结果。 返回的字符串由单引号标注,每例都带有单引号 (‘'’)、 反斜线符号 (‘\\’)、 ASCII NUL以及前面有反斜线符号的Control-Z 。如果自变量的值为NULL, 则返回不带单引号的单词 “NULL”。
REPEAT(str,count) 返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。若str 或 count 为 NULL,则返回 NULL 。
REPLACE(str,from_str,to_str) 返回字符串str 以及所有被字符串to_str替代的字符串from_str。
REVERSE(str) 返回字符串 str ,顺序和字符顺序相反。
RIGHT(str,len) 从字符串str 开始,返回最右len 字符。
LPAD(str,len,padstr) 返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。
RPAD(str,len,padstr) 返回字符串str, 其右边被字符串 padstr填补至len 字符长度。假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。
LOAD_FILE(file_name) 读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。
LOCATE(substr,str) , LOCATE(substr,str,pos) 第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。
SOUNDEX(str) 从str返回一个soundex字符串。
SPACE(N) 返回一个由N 间隔符号组成的字符串。
数据库维护设计:
1) 每日自动备份
2) 可选择查看全部数据库
3) 可选择给定年份数据库
4) 系统启动时先进行修复工作
5)
以上是关于mysql大杂烩的主要内容,如果未能解决你的问题,请参考以下文章