06 MySQL 基础知识

//MYSQL数据表类型
整型
BIT 范围为从1到64

tinyint 带符号的范围是-128到127。无符号的范围是0到255
smallint 小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535
MEDIUMINT  中等大小的整数。带符号的范围是-8388608到8388607。无符号的范围是0到16777215
int INTEGER 普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。
BIGINT 大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615

二进制
BLOB 存的是二进制数据

字符串
char 4 固定长度字符串 对字符串  0-255  --牺牲空间,提高效率
varchar 0-65535  --节约空间,降低效率
text 65535
tinytext 最大长度为255
MEDIUMTEXT 中型 最大长度为16,777,215
LONGTEXT 大长度为4,294,967,295
ENUM 枚举 ENUM列最多可以有65,535个截然不同的值 单选
set SET列最多可以有64个成员 多选

浮点
FLOAT 小(单精度)浮点数。允许的值是-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38
DOUBLE 普通大小(双精度)浮点数。允许的值是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308


日期
DATE 日期。支持的范围为'1000-01-01'到'9999-12-31' MySQL以'YYYY-MM-DD'格式显示DATE值,但允许使用字符串或数字为DATE列分配值
DATETIME 日期和时间的组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值
TIMESTAMP 时间戳。范围是'1970-01-01 00:00:00'到2037年


写SQL的规范:
1.SQL语句的保留字都大写
2.SQL命令本身是不区分大小写的,但是PHP区分,所以字段名,表名之类的都按真实的大小写来写。
3. 分号是一条SQL命令的结束。PHP里面单条语句一般不需要写。
4.整型值一般不需要加引号,加了也不为错。
5.--代表SQL语句的注释
6.写UPDATE语句和DELETE语句时,最好先写WHERE条件,避免对数据造成灾难性的破坏。
7.SELECT * FROM TTT --*代表所有字段,一般情况下,用什么字段就写什么字段,少用*号。
8.·字段名·,这里的点指的是数字1旁边的那个符号,它可以防止字段名和SQL语句中的保留字重复。如果重复一样可以使用。否则,会报语法错误。该符号只用来包字段名。
9.常用的一些运算符
AND
IN
OR
=
!=不等于
<>不等于
>
<
BETWEEN 数值 AND 数值
RAND() 用在ORDER BY 的后面
DISTINCT(字段名) -- SELECT DISTINCT(Fnum) FROM ttt --去掉重复值的结果
COUNT(字段名) --统计行数,一般字段为主键
MAX(字段名)
MIN(字段名)
ASC(正序),DESC -- 排序,默认情况下都是ASC



查询语句
SELECT 字段列表 FROM 表名 WHERE 条件
SELECT fname,id FROM ttt WHERE id=1;
SELECT fname,id FROM ttt WHERE fname='bbb';
SELECT fname,id FROM ttt WHERE fname='bbb' OR fname='aaa';
SELECT fname,id FROM ttt WHERE fname IN('bbb' ,'aaa');
SELECT fname,id FROM ttt WHERE fname LIKE '%b%';
SELECT fname,id FROM ttt WHERE fname LIKE '%b';
SELECT fname,id FROM ttt WHERE fname LIKE '%b_';
SELECT Fname from ttt where id>1;
SELECT fname FROM ttt WHERE id>1 AND id<3; == SELECT fname FROM ttt WHERE id=2;
SELECT * FROM ttt ORDER BY id ASC或者DESC --排序功能,ASC正序,DESC倒序
SELECT * FROM ttt ORDER BY RAND() --随机取值
SELECT * FROM ttt ORDER BY RAND() LIMIT 1; --随机并且每次只显示一条
SELECT * FROM ttt LIMIT 1; --只显示一条
SELECT * FROM ttt ORDER BY id DESC LIMIT 1;
SELECT * FROM ttt LIMIT 3,2;
SELECT * FROM ttt ORDER BY id DESC LIMIT 3,1;
SELECT * FROM ttt ORDER BY id DESC,Fnum ASC;
SELECT * FROM test ORDER BY CONVERT(Fname USING gb2312); 中文排序
SELECT * FROM TTT GROUP BY Fnum;
关联查询:
SELECT A.Fid,B.Fname,B.Fsex FROM product_category_test A,t2 B WHERE A.Fid=B.Fid;

SELECT COUNT(Fid) AS totals FROM ttt;
AS后面的名称自定义,即别名

SELECT * FROM tb_school WHERE Fid IN(select fid from tb_users);

SQL指令的书写顺序
SELECT * FROM 表名 【WHERE 条件 或 GROUP BY 字段名 HAVING】 ORDER BY 字段名 排序方式 LIMIT 初始值,数量;
如果有GROUP BY的话,一般情况下,ORDER BY 的排序就不生效了。


增加
INSERT INTO 表名(字段列表) VALUES(字段值列表,与字段名一定要一一对应);
INSERT INTO ttt(fname,fnum) VALUES('崔俊涛',1);
INSERT INTO ttt(fname,fnum) VALUES('田宇',1);
INSERT INTO ttt(fname,fnum) VALUES('小云',1);

更新表
UPDATE 表名 SET 字段名='字段值' WHERE 条件
UPDATE ttt SET fname='崔俊涛' WHERE 条件;
UPDATE ttt SET fname='崔俊涛';
UPDATE ttt SET fname='cccc' WHERE id=4; --不存的数据,表不会被做任何更改
UPDATE ttt SET Fnum=Fnum+1 WHERE id=1;


删除语句
DELETE FROM 表名 WHERE条件 --清空表,删除数据,不是删除表

多表查询
SELECT * FROM tb_student,test WHERE tb_student.Fid=test.Fid;
SELECT * FROM tb_student WHERE Fid IN(SELECT Fid FROM test);

左连接右连接
LEFT JOIN
RIGHT JOIN
JION ON

表操作
CREATE 表名(字段设置) --创建表
DROP 表名 --删除表

锁表操作
LOCK TABLES trans READ, customer WRITE;
SELECT SUM(value) FROM trans WHERE customer_id=some_id;
UPDATE customer
SET total_value=sum_from_previous_statement
WHERE customer_id=some_id;
UNLOCK TABLES;

INNODB
事务
BEGIN;
sql语句,每一条用;结束
COMMIT;执行
ROLLBACK;回滚
END;

连接非本机的mysql数据库服务器
[1]允许任何IP连接,%
[2]指定IP连接,设置指定的IP


数据表的导入导出操作(备份和还原)

 

posted @ 2013-06-04 09:24  Kiwi0921  阅读(185)  评论(0编辑  收藏  举报