数据类型:
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个结果集排序。