数据类型:
1 数字:
Tinyint:小数据 用于保存一些范围的整数数值范围
有符号: -128-127
无符号: 0-255
int 整数 数据类型用于保存一些范围的整数数值范围
有符号: -2147483648--2147483647
无符号: 0-4294967295
Bigint 大整数 数据类型用于保存一些范围的整数数值范围:
有符号: -9223372036854775808--9223372036854775807
无符号: 0-18446744073709551615
float 单精度:
double 双精度:
decimal(m,n) 精准小数 :decimal实际上是按照字符串类型存的。m代表总长度,n代表小数点之后多长
2 字符串:
char:定长,如果所存入的数据不足指定长度不足,查询速度较varchar快,因为数据是定长的,数据库在查询的时候,就会直接跳过,所以建表时将char放在varchar前边
varchar:可变长度,存入的数据有多长就是多长,相比char所占储存空间小。
text:文本类型,用于保存变长的大字符串类型,最大长度65535.
mediumtext:1677215(2**24-1)
longtext:4294967295 or 4GB(2**32-1)
enum:枚举类型,先给出固定范围的值,像python中的列表中的元素。只能有 一个值 也就是单值
set:集合类型,像enum,也是给除固定范围的值,但是多个值
3 时间
time: ‘2008-12-2‘
year: ‘12:25:36‘
datetime:‘2008-12-2 22:06:44‘
timestamp:自动储存记录修改时间。此列的时间数据,会随着其他字段修改的时候自动刷新,记录数据更该的最后时间
外键和主键:
外键:
一个表中的列(需要是整数)对应另外一张表中的数据,节省空间。
Create table userinfo( Uid int auto_increment primary key, Name varchar(32), Xx_id int(10) Department_id int, Constraint fk_user_depar foreign key (department_id,xx_id) references department(‘id’,age), )engine=INNODB default charset=utf8 Create department( Id auto_increment primary key, Age int, Title char(15) )engine=INNoDB default charset=utf8 #以上userinfo中的department_id和xx_id就是外键,指向department表中的id,age字段。当然也可以指定单个字段,但是需要外键字段需要一一对应。
主键:
保证数据的唯一性,一张表只能有一个主键,但是主键内可以有多个列,叫做符合主键。
Create table t1( Nid int(11) not null, Pid int(11) not null, Primary key(nid,pid) )
查看表中字段属性和建表sql:
查看表中字段属性:
desc tablename
查看建表命令 G格式化
show create table tablename G 上述命令执行后 Create Table: CREATE TABLE `score` ( `sid` int(11) NOT NULL AUTO_INCREMENT, `student_id` int(48) DEFAULT NULL, `corse_id` int(48) DEFAULT NULL, `number` int(32) DEFAULT NULL, PRIMARY KEY (`sid`), KEY `score_student_id_student` (`student_id`), KEY `score_corse_id_course` (`corse_id`), CONSTRAINT `score_corse_id_course` FOREIGN KEY (`corse_id`) REFERENCES `course ` (`cid`), CONSTRAINT `score_student_id_student` FOREIGN KEY (`student_id`) REFERENCES `s tudent` (`sid`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 其中 AUTO_INCREMENT=4 执行下一行的主键值 可以通过 alter table tablename AUTO_INCREMENT=20 来修改 Mysql 自增步长 基于会话级别 基于会话: Show session variables like ‘auto_increment’ Set session auto_increment_increment=2 设置会话步长 Set session auto_increment_offset=0 起始值 基于全局 Show global variables like ‘auto_increment’ Set global auto_increment_increment=2 设置会话步长 Set global auto_increment_offset=0 起始值 Sql server基于表的级别
转储和导入sql文件:
1 只导出表结构:
Mysqldump -u用户名 数据库名字 >转储文件名字 -p (默认储存到当前路径)
2 导出表结构和数据
Mysqldump -u用户名 -d 数据库名字 >转储文件名字 -p
3 导入
Mysqldump -uroot -d db5(导入的目标数据库) < db1.sql(导入文件) -p
mysql中的条件语句(if else):
case when 条件 then 为真时的值 else 为假的时候的值 end
Select course_id, max(num), min(num), min(num) 1, Case when # case条件 when---if min(num)<10 then 0 #then--if 就是条件判断为真时 值是0 else min(num) end From score group by course_id
三目运算(python中的三元推倒式)
select course_id, avg(if(isnull(score.num),0,score.num)), teacher.tname from score left join course on score.course_id=course.cid LEFT JOIN teacher on teacher.tid=course.teacher_id GROUP BY course_id ORDER BY AVG( num ) DESC if(isnull(score.num),0,score.num) 如果isnull中的值是空的就用0,如果不是就用score.num
SQL语句的执行顺序:
当一个查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:
from --> where --[result 1]--> group by --[result 2]--> select (x N) --[result 3]--> having --[result 4]--> order by --> OUTPUT
1.执行where xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。