MySql常见数据类型,SQL执行顺序,条件语句,转储,查看表中字段属性

时间:2022-05-04 01:18:14

数据类型:

  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个结果集排序。