MySql教程

MySQL 学习笔记2

本文主要是介绍MySQL 学习笔记2,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

创建和显示表

  create database 数据库名 default charset=utf8; -> 声明默认编码;

  show databases; 展示数据库中的表

  show create table 表名 \G; 展示创建表的SQL语句,同时其中auto_increment=N,N为下一个插入数据的自增序列值(\G表示竖着显示)

  show session/global variables 条件。 显示对话/全局变量。

创建表

  create table 表名(

    列名 数据类型 是否为空 自增 主键;

    ....

    声明外键;

    声明主键(另一种创建主键方式,适用于多主键);

    声明唯一  -> 最后一行无";"

  ) engine = innodb auto_increment=N default charset=utf8; ->声明创建表的引擎和默认编码,其中innodb 特点为支持事务,可以进行回滚操作。以及自增的起始值和步长。

  例子:

  create table score(

    sid int not null auto_increment primary key,

    student_id int,

    course_id int,

    number int,

    constraint fk_score_student foreign key student_id references student(sid),

    constraint fk_score_course foreign key course_id references course(cid),

    unique uni (student_id,course_id),

    primary key (sid)(与第一行的primary key 可替换)

  ) engine = innodb auto_increment =N default charset=utf8;

  数据类型

    整形:int、tinyint、bigint

    小数:float, double, demical -> 前两者为固定的一定小数点后精度,decimal则是基于字符串的原理进行存储,

                   可指定具体位数,demical(m,n) m表示所有的有效位数,n则表示小数点后的位数。

    字符串:char、varchar-> char(n), varchar(n),均可表示长度最大为n的字符串。其中char,会将长度小于n的字符串补充至n位,varchar则不会。

               优缺点:char 检索速度快,varchar 节省空间。

               优化数据库方法: 定长的列往前放置,不定长的列向后放置。

               原因: 在拿去数据时,对一行中的各列,char数据类型可以直接跳过n位,选取下一个列。而varchar则需要对后续的几位

                  进行遍历,直至该列数据结束。

        text、mediumtext、longtext,用于表示最大长度位(2的16、24、32次方)-1 长度的字符串。

    日期: ①DATE('YYYY-MM-DD') ②TIME('HH:MM:SS') ③ YEAR('YYYY') DATETIME('YYYY-MM-DD HH:MM:SS') ⑤TIMESTAMP('YYYYMMDD HHMMSS')

    二进制数据:带有关键词Blog的类型

    枚举:enum,例子: size ENUM(‘small','medium','large','x-large','xx-large')  从枚举其中只能选择一个数

    集合:set, 例子 col SET('a','b','c','d')  从集合中可以选择多个数,相互之间用’,'隔开

  主键 PRIMARY KEY:

    特性①主键不一定为单列②主键具有唯一性(在多列时,只需要多列具有唯一性即可) ③主键不可为NULL。

    声明方式:1. 列名......primary key

          2. primary key ('列名','列名')

  自增 AUTO_INCREMENT:

    自增起始值

      1.在创建表时 设置 auto_increment=N(结尾处,并非列的定义中)

      2.alter table 表名 auto_increment = N。 将该表的自增序列值更改为N。

    自增步长

      show session/global variables like 'auto_increment'; 查看会话/全局变量值

      set session/global auto_increment_increment=N;  设置会话/全局变量(测试结果发现auto_increment_offset似乎并不能改变表内的自增起始值,仍以表内auto_increment值为标准)

      自增步长只能通过改变 session/global中 auto_increment_increment 变量进行修改。

      而与auto_increment相关的变量包括:①auto_increment_increment,②auto_increment_offset,前者表示增加的步长,后者表示起始值。

      session 与 global

        可以使用 show session/global variables like 'auto_incre%' 的方式进行查看。其中session 为对话级别,仅在当前登录的对话有效。global 为全局级别,在下次登陆时时仍然有效。

  唯一索引 UNIQUE:

    unique 索引名 (列名,列名); 

    ①约束性:要求唯一,若为多列,则表示为多列唯一;②索引特性:加快索引的速度。

    与主键相比: 相同处:两者均要求唯一; 不同处:主键不可以为NULL,而唯一索引则存在NULL。

  外键 FOREIGN KEY:

    constraint 外键名 foreign key (本表列名,本表列名...) references 外表(列名), 外表(列名)...

    constraint fk_student_course foreign key (sid) references course(student_id);

    外键应用:①一对一,②一对多,③多对多等多种形式。

    外键的意义:①在一对一和一对多的情况下,如果某一列只有固定几个值,直接使用字符串进行记录,会增大所需的存储空间,而使用外键用ID记录可以减少所需的存储空间。此外,也可以增加新的值。

          ②在多对多情况下,除了上述意义外,直接在原表中增加一列,尽管可以使用”a,b,c,d“方式,但这种情况下,在进行双向的检索时便需要遍历,将外键建表则可以极大地加快检索速度。 

这篇关于MySQL 学习笔记2的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!