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

数据类型:

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

原文地址:https://www.cnblogs.com/yuan-x/p/12252717.html

时间: 2024-10-12 21:39:54

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

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

0708关于理解mysql SQL执行顺序

转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开始不再先生成笛卡尔积,而是进行SQL改写和评估,看使用哪个索引 扫描行数更少,成本更低.然后利用mysql嵌套循环的机制,找到表的执行顺序.最后确定好读取方式以后 先通过索引找到最佳左表,然后嵌套循环找到右表,然后按照SQL执行顺序进行. 这个也解释了索引 先加在WHERE 字段 然后处理GROUP

Mysql体系结构及sql执行过程总结

Mysql体系结构及sql执行过程总结 一.体系结构图 各模块说明: 1.Connectors:各应用程序与SQL的交互 2. Management Serveices & Utilities:系统管理和控制工具 3.Connection Pool:连接池 管理缓冲用户连接,线程处理等需要缓存的需求 4.SQL Interfaces:SQL接口 接受用户的SQL命令,并且返回用户需要查询的结果.例如select from就是调用SQL Interface 5.Parser:解析器 (1)将SQL

Mysql 常见数据类型及约束

Mysql 常见数据类型及约束 最近在跟几个不太懂技术的同事(哈哈, 其实我也不懂), 要整一个数据库项目, 然后前端, 后端, 都没有像样的, 数据输出还不是由我们控制.... 这可难受了, 然后总数被围绕着, 怎么导入数据, 导出EXCEL .... 之类的, 或者是说导入数据不方便, 怎么字段还要有类型.... 每至于此, 我其实内心是崩溃的, 但非常理解. 不理解, 还能怎么办呢.(当然, 开个玩笑) 这里引出一个问题, 为啥要舌设置类型以及约束? 因为数据类型影响着数据存储的资源占用空

mysql触发器_begin end 执行多次语句

//多SQL中导出的触发器语句: DROP TRIGGER IF EXISTS `t_trig`; DELIMITER // CREATE TRIGGER `t_trig` BEFORE INSERT ON `t_goods` FOR EACH ROW beginset NEW.add_date = current_date();INSERT INTO test2 SET a2 = NEW.id;end // DELIMITER ; /******************************

mysql 常见数据类型

---恢复内容开始--- MySQL常见的数据类型 一.数据类型是什么? 数据类型是指列.存储过程参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型. 有一些数据是要存储为数字的,数字当中有些是要存储为整数.小数.日期型等... 二.MYSQL常见数据类型 MySQL支持多种类型,大致可以分为四类:数值型.浮点型.日期/时间和字符串(字符)类型. 1.数值类型 MySQL支持所有标准SQL数值数据类型. 这些数值类型包括严格数值数据类型(INTEGER.SMALLIN

获取分组后统计数量最多的纪录;limit用法;sql执行顺序

CREATE TABLE emp(id INT PRIMARY KEY,NAME VARCHAR(11),dep_id INT ,salary INT); CREATE TABLE dept(id INT PRIMARY KEY,NAME VARCHAR(11),parentid INT); 获取各部门人数信息: SELECT e.dep_id,d.name,COUNT(e.dep_id) FROM emp e,dept d WHERE e.dep_id=d.id GROUP BY e.dep_

mysql常见数据类型

mysql常见数据类型 1.数值型 1.1.整型 特点: a.如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加 unsigned关键词 b.如果插入的数值超出了整型的范围,会报 out of range 异常,并且插入临界值 c.如果不设置长度,会有默认的长度 d.长度代表了显示的最大宽度,如果不够用会用0在左边填充,但必须搭配 zerofill 使用! 1.2.定点型 1.3.浮点型 原文地址:https://www.cnblogs.com/xiao-yuge/p/1260

SQL UPDATE 语句:更新表中的记录语法及案例剖析

SQL UPDATE 语句 UPDATE 语句用于更新表中的记录. SQL UPDATE 语句 UPDATE 语句用于更新表中已存在的记录. SQL UPDATE 语法 UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value; 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新.如果您省略了 WHERE 子句,所有的记录都将被