Mysql数据库2
- 什么是SQL?
- SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
- DML(Data Manipulation Language数据操作语言)
- 查询、插入、删除和修改数据库中的数据;
- SELECT、INSERT、 UPDATE 、DELETE等;
- DCL(Data Control Language数据控制语言)
- 用来控制存取许可、存取权限等;
- GRANT、REVOKE 等;
- DDL(Data Definition Language数据定义语言)
- 用来建立数据库、数据库对象和定义其列
- CREATE TABLE 、DROP TABLE、ALTER TABLE 等
- 功能函数
- 日期函数、数学函数、字符函数、系统函数等
- CHAR(size)
- 保存固定长度的字符串(可包含字母、数字以及特殊字符)。
- 在括号中指定字符串的长度。最多 255 个字符。
- VARCHAR(size)
- 保存可变长度的字符串(可包含字母、数字以及特殊字符)。
- 在括号中指定字符串的最大长度。最多 255 个字符。
- 注释:如果值的长度大于 255,则被转换为 TEXT 类型。
- TINYTEXT
- 存放最大长度为 255 个字符的字符串。
- TEXT
- 存放最大长度为 65,535 个字符的字符串。
- BLOB
- 用于 BLOBs (Binary Large OBjects)。
- 存放最多 65,535 字节的数据。
- MEDIUMTEXT
- 存放最大长度为 16,777,215 个字符的字符串。
- MEDIUMBLOB
- 用于 BLOBs (Binary Large OBjects)。
- 存放最多 16,777,215 字节的数据。
- LONGTEXT
- 存放最大长度为 4,294,967,295 个字符的字符串。
- LONGBLOB
- 用于 BLOBs (Binary Large OBjects)。
- 存放最多 4,294,967,295 字节的数据。
- ENUM(x,y,z,etc.)
- Number 类型:数据类型 描述
- TINYINT(size)
- -128 到 127 常规。
- 0 到 255 无符号*。在括号中规定最大位数。
- SMALLINT(size)
- -32768 到 32767 常规。
- 0 到 65535 无符号*。在括号中规定最大位数。
- MEDIUMINT(size)
- -8388608 到 8388607 普通。
- 0 to 16777215 无符号*。在括号中规定最大位数。
- INT(size)
- -2147483648 到 2147483647 常规。
- 0 到 4294967295 无符号*。
- 在括号中规定最大位数。
- BIGINT(size)
- -9223372036854775808 到 9223372036854775807 常规。
- 0 到 18446744073709551615 无符号*。在括号中规定最大位数。
- FLOAT(size,d)
- 带有浮动小数点的小数字。
- 在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
- DOUBLE(size,d)
- 带有浮动小数点的大数字。
- 在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
- DECIMAL(size,d)
- 作为字符串存储的 DOUBLE 类型,允许固定的小数点。
- 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
- Date 类型:数据类型 描述
- DATE()
- 日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
- DATETIME()
- 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS
- 注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
- TIMESTAMP()
- 时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS
- 注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
- TIME()
- 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
- YEAR()
- 2 位或 4 位格式的年。
- 注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。
- 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 Insert 或 Update 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
- Decimal
- 用于财务数据,定点数。
- SQL常用语法:
- 创建数据库:
- Create database ‘数据库名’ character set utf8;
- 删除数据库
- Drop database ‘数据库名’;
- 建立一个表USER,其由四列组成,第一列属性为非空,并做为主键,并自增
-
CREATE TABLE USER ( ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY, NAME VARCHAR (20), PASSWORD VARCHAR (50), SEX VARCHAR (2) ) ;
- 删除一个表:
- Drop table user;
- PRIMARY KEY
- 主码约束(主键)
- UNIQUE
- 唯一性约束
- NOT NULL
- 非空值约束
- AUTO_INCREMENT
- 用于整数列默认自增1
- UNSIGNED
- 无符号整数
- DEFAULT default_value
- 默认值约束
- DEFAULT cur_timestamp
- 创建新记录时默认保存当前时间(仅适用timestamp数据列)
- ON UPDATE cur_timestamp
- 修改记录时默认保存当前时间(仅适用timestamp数据列)
- CHARACTER SET name
- 指定字符集(仅适用字符串)
- 主键与外键
- 数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。
- 主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。
- 主键必须是唯一的
- 主键应该是紧凑的,因此整数类型比较适合
- 外键:引用另外一个数据表的某条记录。
- 外键列类型尽可能与主键列类型保持一致
- 外键列应该加上NOT NULL
- 主表和从表
-
-- 创建一个学生表 create table student( sid int not null auto_increment, name varchar(20) not null, primary key(sid) ); -- 分数表 create table score( cid int not null auto_increment primary key, score int, sid int, foreign key(sid) references student(sid) );
-
- 主表和从表明细
- 当主表中没有对应的记录时,不能将记录添加到子表
- 成绩表中不能出现在学员信息表中不存在的学号;
- 不能更改主表中的值而导致子表中的记录孤立
- 把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变;
- 子表存在与主表对应的记录,不能从主表中删除该行
- 不能把有成绩的学员删除了
- 删除主表前,先删子表
- 先删学员成绩表、后删除学员信息表
- 当主表中没有对应的记录时,不能将记录添加到子表
- 最少性
- 尽量选择单个键作为主键
- 稳定性
- 尽量选择数值更新少的列作为主键