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变成了默认的数据引擎。