SQL语句的两大类:

DML:比如像update,delete,操作数据本身的

DDL:比如像CREATE DROP,等操作数据对象的

CREATE DATABASE创建数据库

CREATE INDEX 创建索引

CREATE TABLE 创建表

============

表的创建:

CREATE TABLE 表名 (定义字段:列名/列定义(数据类型/数据修饰符))

如果这个table没有什么特殊意义的话,尽量做到见名知意

比如:

CREATE TABLE stus (

       ->    Name CHAR(18),

       ->    Gender CHAR(1)); 

使用DESC stus;查看我们的刚定义的表。

修改表结构操作:
语法:alter table 表名 action

action可以是如下语句;

-add 列名 建表语句 [first|after 列名]

-add primary key(列名)

-add foreign key(列名) references 表名(列名)

-alter 列名 set default 默认值

============

常见的数据类型

1.Character String Types字符串型

              CHAR: 固定长度

              VARCHAR: 浮动长度

              BINARY: 按照二进制的格式存储(严格区分大小写)

              VARBINARY: 可变程度的二进制格式存储

              TINYBLOB: 极小的二进制大对象(binary large boject)

              BLOB: 小的的二进制大对象

              MEDIUMBLOB: 中等的二进制大对象

              LONGBLOB: 超大的二进制大对象

              TINYTEXT: 极小的整篇字符

              TEXT: 存储类似于论坛发帖的那样的对象的

              MEDIUMTEXT: 中等的整篇字符

              LONGTEXT: 超大的整篇字符

              ENUM: 内置的两种特殊类型,枚举类型(选男女)

              SET: 也是枚举,不过比较方法不同

2.Binary Large Object String Type二进制型

3.Numeric Types数值型

              精确数值型:整型,表示精确值(无符号类型的范围)

                     TINYINT (255)

                     SMALLINT (65535)

                     MEDIUNINT (16777215)

                     INT (4294967295)

                     BIGINT (18446744073709551615)

              浮点型:单精度浮点型和双精度浮点型(非精确值)

                     FLOAT 4字节

                     DOUBLE 8字节

                     REAL

              Bit型:

4.Boolean Types波尔型 TINYINT(1)

              BOOLEAN

              BOOL

5.Datetime Types日期时间型

              DATE:日期(3字节) ‘1000-01-01’-‘9999-12-31’

              TIME(p):时间

              DATETIME:日期+时间(3字节) ‘1000-01-01 00:00:01’-‘9999-12-31 23:59:59’

              TIMESTAMP(p):时间戳(4字节)(做相对计时的,从XX年XX月XX日到现在的经过的秒数) ‘1970-01-01 00:00:00’- ‘2038-01-18 22:14:07’

              YEAR:年份,

                    YEAR4 (1901-2155)

                    YEAR2 (00-99),表示2011年还是11年

6.Interval Types:

            枚举型,

                    ENUM 1-65535

           集合型

                     SET 1-64

分类的简单介绍:

1.字符串类型:(具体定义成什么,要视内容的变化而定)

              固定长度的定义方式:(最多255字符)

                     CHARACTER(length)

                     CHAR(length)

              可变长度的定义方式:(定义大小一般为大小+1)(最多65535)

                     CHARAVTER VARYING(length)

                     CHAR VARYING(length)

                     VARCHAR(length)

字符串类型的修饰类型:

              NOT NULL :非空

              NULL:允许为空

              DEFAULT:给一个默认值,默认值应该加引号,在mysql里所有的默认值都必须加引号

              BINARY:

              CHARACTER SET:字符集,使用哪一种格式的字符集。

              COLLATION:定义某种特定字符集的排序方式。

SHOW CHARACTER SET:用于显示我们系统支持的所有字符集的类型。

SHOW COLLATION:查看所有的排序方式,排序方式是肯定多于字符集的,因为每一种字符集都有多种排序方式。

       BLOB:二进制大对象的特点:

    按照字母表的严格区分大小写的方式进行排序的。BLOB在定义的时候,而这些大对象的存储一般都不会在表中存储,而是在表之外的特定地方

数值型:

       精确数值型:×××,BIT等

       浮点型:FLOAT REAL DOUBLE

       ×××的修饰符:

       AUTO_INCREMENT :自动增长,一个字段用于表述行的ID号的。大部分情况下,它是无符号类型的。凡是定义成这个的,必须定义成主键或者唯一键。类型不能为空

       UNSIGNED:无符号

       FLOAT的修饰符

       对于FLOAT我们可以定义整体位宽:(p),以及精度:(g,f

       char和int括号里的内容是不一样的,char后的括号表示限定多少长度,而int的括号表示到时候显示的时候显示多少位

日期时间

       日期时间的修饰符:

              NOTNULL

              NULL

              Default

       使用 SELECT CURRENT_DATE();

              SELECT CURRENT_TIME();可以查看当前系统的日期和时间

枚举型:

比如创建一个枚举型的用户表,前面有自动生成的ID号,然后对应非空的姓名,性别枚举只有男女,默认男,含年龄的表

      CREATE TABLE users (

->    ID INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

->    Name VARCHAR(100) NOT NULL,

->    Gender ENUM(‘M’,’F’) NOT NULL DEFAULT ‘M’,

->    Age TINYINT UNSIGNED

->    );

       插入数据

       INSERT INTO users (Name,Age) values (‘Jerry’,18);

       当我们插入一个非法的数据的时候,能否插入数据,则根据Mysql的工作模式来定义了。

============

Mysql的工作模式:

       决定了我们的sql在书写语法的时候到底有多高的规范要求。当存储数据在违反规则的时候,是否能够允许插入禁区

       SHOW VARIABLES LIKE ‘%sql_mode%’;查看工作模式

       SET sql_mode=’ansi’将我们的SQL模型定义为ansi。

常用的模式有哪些呢?   

              ANSI [QUOTES]:定义字符串只能使用单引号,双引号和反引号引用表的名字等……(在传统模型下,引号什么的是不分的)

              IGNORE_SPACE:忽略内建函数的空白字符

              STRICT_ALL_TABLES:所有的非法数据都不允许插入

              STRICT_TRANS_TABLES:

              TRADITIONAL:默认格式

Mysql变量类型:

       全局变量:对每一个新建立的会话(用户连接进来)都是生效的

       会话变量:只对当前会话有效,而且登出之后就无效了。

查看变量:

       SHOW VARIABLES 查看所有变量

              SHOW GLOBAL VARIABLES:查看所有的全局变量

              SHOW SESSION VARIABLES:查看所有的会话变量

       模式匹配:

       LIKE ‘%sql_mode%’比如:

              SHOW GLOBAL VARIABLES LIKE ‘time%’:time开头的

              SHOW GLOBAL VARIABLES LIKE ‘%time%’:包含time的

              SHOW GLOBAL VARIABLES LIKE ‘%time’:time结尾的

设置变量:

       SELECT @@global.sql_mode : 设置全局变量

       SELECT @@session.sql_mode :设置会话变量

       SET sql_mod = ‘XXX’设置的是会话变量

       SET GLOBAL sql_mode = ‘XXX’ 设置全局变量

MySQL到底如何区分大小写:

       1.对于关键字:

         是不分大小写的,但是,如果你习惯小写就一定小写,习惯大写一定大写,但是默认应该都是大写的。对于后期的缓存识别非常重要。

       2.对于数据库名,表明,视图的名字

         关乎于你的操作系统,Linux上是完全区分大小写的,Windows是不分大小写的

       3.存储过程和存储函数是不区分大小写的。

       4.触发器区分大小写。

       5.别名:区分大小写。

       6.字符串:取决于你的数据类型。char是区分的,

跟数据库相关的命令:

mysql每一个数据库都一个对应的目录来存储。每一个目录,都由表来对应数据文件。数据库其实就是由表组成的数据集。

1.创建数据库:

       CREATE DATABASE XXX;

       为了避免数据库重复,可以使用

       CREATE DATABASE IF NOT EXISTS db_name; 则表示如果db_name不存在则创建

2.指定额外信息:

       指定默认字符集,和排序法则

       CREATE DATEBASE db_name CHARACTER SET char_set COLLATE collate;

3.查看一个数据库在创建的时候用什么命令来创建:

       SHOW CREATE DATABASE db_name;

4.删除数据库:

       DROP DATABASE db_name;

       DROP DATABASE IF EXISTS db_name;如果数据库存在则删除,否则报告。 

5.改变数据库属性:改变字符集合默认法则的

       ALTER DATABASE db_name COLLATE collate

       ALTER DATABASE db_name CHARACTER SET charset

表和索引:

       索引的主要作用是加快查找的,但是也有弊病,就是当数据更新的时候,索引必须重建。所以对于数据库的修改,是会降低速度的。

       键:key,constraints

       候选键:类似于ID这样的,让某一个字段来唯一的代表/标示某一行的,这样的字段或者字段的组合就叫做候选键:能够唯一标示这个表中唯一行的某一个字段或者字段的组合。比如ID号什么的。

       主键(primary key):从候选键中挑出一个,来代表这一行。主键一般会被默认定义成为mysql的索引。

       唯一键(unique key):一个字段或者多个字段组成的数据必须是唯一的,他和主键候选键的区别,他们不允许为空,但是唯一键允许为空值。

       外键(foreign key):用于在表和表之间建立关系的。而外键则是用于在两个表之间建立关系的。

为了不产生多余的冗余,比如800人同时选择了课程“马克思主义×××思想×××理论和三个代表”则这就很多人选择了很多相同的,这就产生了很多冗余。我们可以完全重新编辑一个表,将这个表定义成1=“XXXXX”则,我们就可以在之后的定义课程中直接定义为课程1。这就是外键的定义。

       数据库的范式:数据库设计的时候数据冗余以及数据存储的约束/标准。一般分为1-5范式……常用的必须符合第三范式。

                 对于Mysql来讲,如果想支持外键,必须选择支持事务的存储引擎。

    索引应该优先创建在那些经常在SELECT语句里那些经常出现在WHERE语句中的命令的。

查看mysql的当前系统所有的支持的存储引擎:

       SHOW ENGINES;

       显示为DEFAULT的为默认的数据引擎。

       我们在创建数据库表的时候可以定义到底使用哪个数据引擎。在5.1以前的mysql中默认引擎都是MyISAM,但是当被oricla收购之后,则InnoDB变成了默认的数据引擎。