#####################################################################

开发DBA:数据库设计(E-R关系图)、SQL开发、内置函数、存储例程(存储过程和存储函数)、触发器、事件调度器(event scheduler)

管理DBA:安装、升级,备份、恢复,用户管理、权限管理,监控、分析、基准测试,语句优化(SQL语句),数据字典,按需要配置服务器(服务器变量:MyISAM, InnoDB, 缓存, 日志)


SQL语言组成部分:

DDL: 

DML: 

完整性定义语言:DDL的一部分功能

主键、外键、惟一键、条件、非空、事务

视图定义:虚表,存储下来的SELECT语句

事务控制:

嵌入式SQL和动态SQL:

DCL:授权


数据类型的功用:

1、存储的值类型;

2、占据的礁存储空间;

3、定长,变长;

4、如何被索引及排序;

5、是否能够被索引;


数据字典:系统编目(system catalog)

保存数据库服务器上的元数据


元数据:

关系的名字

每个关系的各字段的名字

各字段的数据类型和长度

约束

每个关系上的视图的名字及视图的定义


授权用户的名字

用户的授权和帐户信息


统计类的数据:

每个关系字段的个数;

每个关系中行数;

每个关系的存储方法;


保存元数据的数据库:

information_schema

mysql

performance_shcema


数据类型:

字符型

char

varchar

binary

varbinary

text

blob

数值型

精确数值型

整型

十进制数据:decimal

近似数值型

单精度浮点型

双精度浮点型

日期时间型

日期型

时间型

日期时间型

时间戳

布尔型


内建类型

ENUM, SET


数值型:

TINYINT

SMALLINT

MEDIUMINT

INT

BIGINT

DECIMAL

FLOAT

DOUBAL


BIT


字符型:

CHAR

VARCHAR

TINYTEXT

TEXT

MEDIUMTEXT

LONGTEXT


BINARY

VARBINARY

TINYBLOB

BLOB

MEDIUMBLOB

LONGBLOB


ENUM

SET


日期时间型:

DATE

TIME

DATETIME

TIMESTAMP

YEAR


CHAR、VARCHAR和TEXT几种字符型常用的属性修饰符:

NOT NULL:非空约束

NULL:允许为空

DEFAULT 'string':默认值,不适用于TEXT类型

CHARACTER SET '字符集'

mysql> SHOW VARIABLES LIKE '%char%';

mysql> SHOW CHARACTER SET

COLLATION '规则': 排序规则

mysql> SHOW COLLATION;


BINARY、VARBINARY和BLOB几种字符型常用的属性修饰符:

NOT NULL

NULL

DEFAULT: 不适用于BLOB


整型的常用属性修饰符:

AUTO_INCREMENT:自动增长

前提:非空,且惟一;支持索引,非负值;

UNSIGNED:无符号

NULL

NOT NULL

DEFAULT 


浮点型常用修饰符:

NOT NULL

NULL

DEFAULT

UNSIGNED


日期时间型的修饰符:

NOT NULL

NULL

DEFAULT


ENUM和SET的修饰符:

NOT NULL

NULL

DEFAULT ''


MySQL SQL_MODE: SQL模式

TRADITIONAL, STRICT_TRANS_TABLES, or STRICT_ALL_TABLES



设定服务器变量的值:(仅用于支持动态的变量)

支持修改的服务器变量:

动态变量:可以MySQL运行时修改

静态变量:于配置文件中修改其值,并重启后方能生效;


服务器变量从其生效范围来讲,有两类:

全局变量:服务器级别,修改之后仅对新建立的会话有效;

会话变量:会话级别,仅对当前会话有效;

会话建立时,从全局继承各变量;


查看服务器变量:

mysql> SHOW [{GLOBAL|SESSION}] VARIABLES [LIKE ''];
mysql> SELECT @@{GLOBAL|SESSION}.VARILABLE_NAME;
mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='SOME_VARIABLE_NAME';
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='SOME_VARIABLE_NAME';


修改变量

前提:默认仅管理员有权限修改全局变量

mysql> SET {GLOBAL|SESSION} VARIABLE_NAME='VALUE';

注意:无论是全局还是会话级别的动态变量修改,在重启mysqld后都会失效;想永久有效,可定义在配置文件中的相应段中[mysqld];




创建数据库

mysql> CREATE DATABASE mydb;
mysql> USE mydb;

创建表:××× 非空 唯一 非负 AUTO_INCREMENT

UNSIGNED 无符号 就是不支持负数

mysql> CREATE TABLE t1 (ID INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,Name CHAR(30));
mysql> DESC t1;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| ID    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| Name  | char(30)         | YES  |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
mysql> SELECT * FROM t1;
mysql> insert into t1 (Name) VALUES ('TOM'),('Jerry');
mysql> SELECT * FROM t1;
+----+-------+
| ID | Name  |
+----+-------+
|  1 | TOM   |
|  2 | Jerry |
+----+-------+
2 rows in set (0.00 sec)

显示最后一次修改记录

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+
1 row in set (0.02 sec)
mysql> insert into t1 (Name) VALUES ('lily'),('haha');
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                3 |
+------------------+

清空表

mysql> DELETE FROM t1;
mysql> insert into t1 (Name) VALUES ('lucy');
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM t1;
+----+------+
| ID | Name |
+----+------+
|  5 | lucy |
+----+------+
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
1 row in set (0.00 sec)


LAST_INSERT_ID()只记录上次的第一个插入的数据,即使delete清空表记录也一样存在

##########################################################

TRUNCATE 清空


mysql> HELP TRUNCATE
mysql> TRUNCATE t1;
Query OK, 0 rows affected (0.06 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                5 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM t1;
Empty set (0.00 sec)
mysql> insert into t1 (Name) VALUES ('lucy');
Query OK, 1 row affected (0.07 sec)
mysql> SELECT * FROM t1;
+----+------+
| ID | Name |
+----+------+
|  1 | lucy |
+----+------+
1 row in set (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)


########################################################


超出字符长度,默认会被截取


mysql> create table t2 (name CHAR (3));
Query OK, 0 rows affected (0.14 sec)
mysql> INSERT INTO t2 VALUES ('jerry');
Query OK, 1 row affected, 1 warning (0.10 sec)
mysql> SHOW WARNINGS;
+---------+------+-------------------------------------------+
| Level   | Code | Message                                   |
+---------+------+-------------------------------------------+
| Warning | 1265 | Data truncated for column 'name' at row 1 |
+---------+------+-------------------------------------------+
mysql> SELECT * from t2;
+------+
| name |
+------+
| jer  |
+------+


###############################################

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode      |       |
+---------------+-------+