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

mysql大杂烩

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