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 数据表的导入导出操作(备份和还原)