MySQL学习笔记
一、基本操作
- 启动服务
net start mysql
- 登录
mysql -u username -p password
- 展示所有数据库
SHOW DATABASES;
- 展示创建的某个数据库的所有信息
SHOW CREATE DATABASE name;
- 创建数据库并设置字符集
CREATE DATABASE name [CHARACTER SET utf8];
- 修改数据库
ALTER DATABASE;
- 展示错误信息
SHOW WARNINGS;
- 删除数据库
DROP DATABASE name;
二、数据类型
1、整型
- TINYINT0 1
- SMALLINT 2
- MEDIUMINT 3
- INT 4
- BIGINT 8
2、浮点型 - FLOAT(M,D)
- DOUBLE(M,D)
3、日期时间型 - YEAR
- TIME
- DATA
- DATATIME
- TIMESTAMP
4、字符型 - CHAR(M)
- VARCHAR(M)
- TINYTEXT
- TEXT
- MEDIUMTEXT
- LONGTEXT
- ENUM(VALUE1,VALUE2…)
- SET(VALUE1,VALUE2…)
三、基本数据表操作
- 打开数据库
USE name;
- 创建数据表
CREATE TABLE table_name(column_name data_type,...,...);
- 查看数据表列表
SHOW TABLES [FROM db_name];
- 查看数据表结构
SHOW COLUMNS FROM tbl_name;
- 记录的插入
INSERT tbl_name[col_name,col_name,...] VALUES(value,...);
- 记录的查找
SELECT expr,... FROM tbl_name;
- 非空约束
NULL,NOT NULL
AUTO_INCREMENT
自动编号,且必须和主键一起使用PRIMARY KEY
主键约束,保证记录的唯一性,每张数据表只能存在一个主键,主键自动为NOT NULL
UNIQUE KEY
唯一约束,保证记录的唯一性,可存在多个唯一约束;字段可为空DEFAULT
设置字段默认值
四、约束
FOREIGN KEY...REFERENCES...
外键约束,保持数据一致性、完整性;实现一对一或一对多的关系- 外键约束的一些要求:
- 父表和子表必须使用相同的存储引擎,禁止临时表
- 存储引擎必须为InnoDB
- 外键列和参照列必须具有相同的数据类型。其中数字的长度和符号位必须相同,而字符长度可以不同
- 外键列和参照列必须创建索引。若外键列不存在索引,MySQL会自动创建
- 外键约束的参考操作:
- CASCADE
- SET NULL
- RESTRICT
- NO ACTION
DELETE FROM tbl_name WHERE 条件
删除记录
五、修改数据表
- 添加单列
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST|AFTER col_name]
- 添加多列
ALTER TABLE tbl_name ADD [COLUMN] (col_name column_definition,...)
- 删除列
ALTER TABLE tbl_name DROP [COLUMN] col_name
- 添加主键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [SYMBOL]] PRIMARY KEY [INDEX_TYPE] (index_col_name)
- 添加唯一约束
ALTER TABLE tbl_name ADD [CONSTRAINT [SYMBOL]] UNIQUE [INDEX|KEY] [INDEX_NAME] [INDEX_TYPE] (index_col_name,...)
- 添加外键约束
ALTER TABLE tbl_name ADD [CONSTRAINT [SYMBOL]] FOREIGN KEY [INDEX_NAME] (index_col_name,...) reference_definition
- 添加\删除默认约束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal|DROP DEFAULT}
- 删除主键约束
ALTER TABLE tbl_name DROP PRIMARY KEY
- 删除唯一约束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
- 删除外键约束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol
- 修改列定义
ALTER TABLE tbl_name MODIFY [COLUMN] col_name col_defination [FRIST|AFTER col_name]
- 修改列名称
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
- 数据表更名
ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name
RENAME TABLE old_tbl_name TO new_tbl_name [,old_tbl_name2 TO new_tbl_name2]
六、修改记录
- 插入记录
INSERT tbl_name [(col_name)] {VALUES|VALUE} ({expr|DEFAULT},...),(...),...
INSERT tbl_name SET col_name={expr|DEFAULT},...
可以使用子查询INSERT tbl_name [(col_name),...] SELECT ...
将查询结果直接插入到指定数据表
- 更新记录
- 单表更新
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}]...[WHERE where_condition]
- 多表更新
UPDATE table_reference SET col_name1={expr1|DEFAULT} [,col_name2={expr2|DEFAULT}]...[WHERE where_condition]
- 连接的语法结构
table_reference {[INNER|CROSS] JOIN | {LEFT|RUGHT} [OUTER] JOIN} table_reference ON condition_expr
- 一步到位的多表更新
CREATE...SELECT
- 连接的语法结构
- 单表更新
- 删除记录
- 单表删除
DELETE FROM tbl_name [WHERE where_condition]
- 多表删除
- 单表删除
- 条件查询
WHERE
- 查询结果分组
GROUP BY {col_name|position} [ASC|DESC]
- 分组条件
HAVING where_condition
- 查询结果排序
ORDER BY {col_name|expr|position} [ASC|DESV],...
- 限制结果返回的数量
LIMIT
七、子查询
- 子查询是指在另一个查询语句中的SELECT子句
- 使用比较运算符的子查询
- 用ANY、SOME、ALL修饰的比较运算符
- 使用[NOT]IN的子查询
- =ANY与IN等效
- !=ALL或<>ALL与NOT IN等效
- 使用[NOT]EXISTS的子查询
八、连接
- MySQL在SELECT语句、多表更新、多表删除语句中支持JOIN操作
- 语法结构
table_reference {[INNER|CROSS] JOIN | {LEFT|RUGHT} [OUTER] JOIN} table_reference ON condition_expr
- 连接类型
- INENR JOIN 内连接,仅显示左表及右表符合连接条件的记录
- LEFT [OUTER] JOIN 左外连接,显示左表的全部记录及右表符合连接条件的记录
- RIGHT [OUTER] JOIN 右外连接,
- 连接条件
- ON
- WHERE
- 多表连接(等值连接)
- 无限极分类表设计
- 自身连接 同一个数据表对其自身进行连接
笔记整理来源于慕课网 与MySQL的零距离接触