INSERT

  • 标准插入语法
1
INSERT [INTO] tbl_name [(col_name,...)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...
  • 可以使用子查询,但是不能插入多条记录
1
INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
  • 可以将查询结果插入到指定数据表
1
INSERT [INTO] tbl_name [(col_name,...)] SELECT ...

UPDATE

1
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}] ... [WHERE where_condition]

DELETE

1
DELETE FROM tbl_name [WHERE where_condition]

SELECT

1
2
3
4
5
6
7
8
9
SELECT select_expr [,select_expr ...]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name|position} [ASC|DESC], ...]
[HAVING where_condition]
[ORDER BY {col_name|expr|position} [ASC|DESC], ...]
[LIMIT {[offset,] row_count}|row_count OFFSET offset]
]
  • 查询表达式(select_expr)

每一个表达式表示想要的一列,必须有至少一个。

多个列之间以英文逗号分隔。

星号(*)表示所有列。tbl_name. *可以表示命名表的所有列。

查询表达式可以用[AS] alias_name为其赋予别名。

别名可用于GROUP BY, ORDER BY或HAVING字句。

  • WHERE条件表达式

对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。

在WHERE表达式中,可以使用MySQL支持的函数或运算符。

约束

  • 1.约束保证数据的完整性和一致性。
  • 2.约束分为表级约束和列级约束。
  • 3.约束类型包括:
    NOT NULL(非空约束)
    PRIMARY KEY(主键约束)
    UNIQUE KEY(唯一约束)
    DEFAULT(默认约束)
    FOREIGN KEY(外键约束)

    外键约束

保证数据一致性,完整性。
实现一对一或一对多关系。

  • 外键约束的要求

1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB。
3.外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;而字符的长度则可以不同。
4.外键列和参照列必须创建索引。如果外键列不存在索引的话,MySQL将自动创建索引。

  • 编辑数据表的默认存储引擎

MySQL配置文件

1
default-storage-engine=INNODB
  • 外键约束的参照操作
参考操作 说明
CASCADE 从父表删除或更新且自动删除或更新子表中匹配的行
SET NULL 从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
RESTRICT 拒绝对父表的删除或更新操作
NO ACTION 标准SQL的关键字,在MySQL中与RESTRICT相同
  • 表级约束与列级约束

对一个数据列建立的约束,称为列级约束。
对多个数据列建立的约束,称为表级约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束只能在列定义后声明。

  • 修改数据表

添加单列

1
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]

添加多列

1
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)

删除列

1
ALTER TABLE tbl_name DROP [COLUMN] col_name

对某张表执行多个动作,如删除多列

1
ALTER TABLE tbl_name DROP [COLUMN] col_name, DROP [COLUMN] col_name

添加主键约束

1
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY [index_type] (index_col_name,...)

添加唯一约束

1
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)

添加外键约束

1
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name) REFERENCES tbl_name (col_namme)

添加或删除默认约束

1
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT}

删除主键约束

1
ALTER TABLE tbl_name DROP PRIMARY KEY

删除唯一约束

1
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name

删除外键约束

1
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

修改列定义

1
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name]

修改列名称

1
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]

修改表名

1
2
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2]...

1. MySQL操作数据表

1.1 创建数据表

1
2
3
4
CREATE TABLE [IF NOT EXISTS] table_name (
column_name data_type,
...
)

1.2 查看数据表列表

1
SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]

1.3 查看数据表结构

1
SHOW COLUMNS FROM tbl_name;

1.4 插入记录

1
INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...);

1.5 记录查找

1
SELECT expr,... FROM tbl_name;

2. MySQL约束

2.1 空值与非空

NULL, 字段值可以为空
NOT NULL,字段值禁止为空

2.2 AUTO_INCREMENT

自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次增量为1

2.3 主键约束(PRIMARY KEY)

每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL

2.4 唯一约束(UNIQUE KEY)

唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束

2.5 默认值(DEFAULT)

当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

MySQL数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。


1.数值类型

MySQL支持所有标准SQL数值数据类型。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。

类型 大小(字节) 范围(有符号) 范围(无符号)
TINYINT 1 (-128,127) (0,255)
SMALLINT 2 (-32 768,32 767) (0,65 535)
MEDIUMINT 3 (-2^23,2^23-1) (0,2^24-1)
INT 4 (-2^31,2^31-1) (0,2^32-1)
BIGINT 8 (-2^63,2^63-1) (0,2^64-1)
FLOAT[(M,D)] 4 M是数字总位数,D是小数点后面的位数。
DOUBLE[(M,D)] 8

2.日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS

3.字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

类型 大小(字节) 用途
CHAR 0-255 定长字符串
VARCHAR 0-65535 变长字符串
TINYBLOB 0-255 不超过 255 个字符的二进制字符串
TINYTEXT 0-255 短文本字符串
BLOB 0-65 535 二进制形式的长文本数据
TEXT 0-65 535 长文本数据
MEDIUMBLOB 0-16 777 215 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 中等长度文本数据
LONGBLOB 0-4 294 967 295 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 极大文本数据

1-1 MySQL概述

MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司。

MySQL是一个开源的关系型数据库管理系统。

MySQL分为社区版和企业版。

1-3 启动与停止MySQL服务

  • 启动MySQL服务
1
net start MySQL
  • 关闭MySQL服务
1
net stop MySQL

1-4 MySQL登陆与退出

  • MySQL登陆
1
mysql 参数
参数 描述
-D, –database=name 打开指定数据库
–delimiter=name 指定分隔符
-h, –host=name 服务器名称
-p, –password[=name] 密码
-P, –port=# 端口号
–prompt=name 设置提示符
-u, –user=name 用户名
-V, –version 输出版本信息并且退出
  • MySQL退出
1
2
3
exit;
quit;
\q;

1-5 修改MySQL提示符

  • 连接客户端时通过参数指定

    1
    mysql -uroot -proot --prompt 提示符
  • 连接上客户端后,通过prompt命令修改

    1
    prompt 提示符
参数 描述
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户

1-6 MySQL常用命令以及语法规范

  • 显示当前服务器版本
1
SELECT VERSION();
  • 显示当前日期时间
1
SELECT NOW();
  • 显示当前用户
1
SELECT USER();
  • MySQL语句的规范

关键字与函数名称全部大写
数据库名称,表名称,字段名称全部小写
SQL语句必须以分号结尾

1-7 操作数据库

  • 创建数据库
1
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name
  • 查看数据库列表
1
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern' | WHERE expr]
  • 查看警告
1
SHOW WARNINGS;
  • 查看建数据库语句
1
SHOW CREATE DATABASE db_name;
  • 修改数据库
1
2
ALTER {DATABASE | SCHEMA} [db_name]
[DEFAULT] CHARACTER SET [=] charset_name;
  • 删除数据库
1
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;
  • 打开数据库
1
USE db_name;
  • 查看打开的数据库
1
SELECT DATABASE();