MySQL

第1章 初设mysql

  • SQL,指结构化查询语言,全称是 Structured Query Language。

  • RDBMS
    RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。

命令行启动/停止MySQL服务

net start mysql
net stop mysql

发生系统错误 5.
以管理员身份运行

清屏:cls

  • -V输出版本信息并退出

  • -u用户名

  • -p密码

  • -P端口号3306

  • -h服务器名称(本地127.0.0.1)

mysql -uroot -p123456 -P3306 -h127.0.0.1

exit 退出

  • 修改mysql提示符
  1. mysql -uroot -p123456 --prompt 提示符
  2. prompt mysql>
\D完整的日期
\d当前数据库
\h服务器名称
\u当前用户

select version();显示当前服务器版本
select now();显示当前日期时间
select user();显示当前用户

  • 关键字与函数名称全部大写
  • 数据库名称、表名称、字段名称全部小写。
  • SQL语句必须与分号结尾。
创建数据库
CREATE DATABASE [IF NOT EXISTS] t1;
查看服务器下的数据库
SHOW DATABASES;
查看警告信息
SHOW WARNINGS;
查看创建数据库时的参数
SHOW CREATE DATABASE t1;
创建数据库的时候指定编码方式
CREATE DATABASE IF NOT EXISTS t2 CHARACTER SET gbk;
创建了以后再修改编码方式
ALTER DATABASE t2 CHARACTER SET=utf8;
删除数据库
DROP DATABASE t1;

第2章 数据类型与操作数据表

  • 数据类型之整形
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
  • 数据类型之浮点型
FLOAT(M,D)
DOUBLE(M,D)

M是所有的位数。D是小数点之后的位数。

  • 数据类型之日期时间型
YEAR
TIME
DATE
DATETIME
TIMESTAMP 时间戳
  • 数据类型之字符型
CHAR(M)
VARCHAR(M)
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
ENUM('value1','value2',''...) 枚举类型
SET('value1','value2',''...) 在集合中做随意的排列组合
  • 创建数据表
    打开数据库
USE 数据库名称;

显示当前打开的数据库select都会带括号

SELECT DATABASE();

创建数据表

CREATE TABLE(IF NOT EXISTS) table_name(
column_name data_type
)
  • 查看数据表
SHOW TABLES;
SHOW TABLES FROM mysql;

查看数据表结构

SHOW COLUMNS FROM tb1;
  • 记录的插入与查找
    插入记录
INSERT [INTO] tbl_name [(col_name,...)] values(val,...)
INSERT tb1(username,salary) VALUES('John',4500.69)

记录查找

SELECT * FROM tb1;
  • 空值与非空
NULL,字段值可以为空
NOT NULL,字段值禁止为空
  • 自动编号
AUTO_INCREMENT

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

  • 初涉主键约束
PRIMARY KEY

每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL
主键可以不和自动编号一起使用。反之不行。
主键的编号不能重复

  • 初涉唯一约束

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

UNIQUE KEY
  • 初涉默认约束
sex ENUM('1','2','3') DEFAULT '3'

第3章 约束以及修改数据表

  • 外键约束的要求解析

约束分为表级约束和列级约束
保持数据一致性完整性
实现一对一或一对多关系
父表和子表必须使用相同的存储引擎
数据表的存储引擎只能是InnoDB
外键列和参照列必须具有相同的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度则可以不同。
外键列和参照列必须创建索引。如果参照列不存在索引的话,MySQL将自动创建索引

pid BIGINT,
FOREIGN KEY(pid) REFERENCES provinces(id)
SHOW INDEXES FROM provinces;

\G 换一种方式显示

  • 外键约束的参照操作
ON DELETE CASCADE 从父表删除或更新且自动删除或更新子表中匹配的行。
SET NULL 从父表删除或更新行,并设置子表中的外键列为NULL。
RESTRICT 拒绝对父表的删除或更新操作
NO ACTION 标准SQL的关键字,在MySQL中与RESTRICT相同
一般使用逻辑外键而不是物理外键。即不用foreign关键字
delete from provinces where id=3;
  • 对多个数据列建立的约束称为表级约束。
    列级约束既可以在列定义时说明,也可以在列定义后说明。表级约束只能在列定义后说明。

  • 修改数据表,添加删除列
    添加单列

ALTER TABLE user1 ADD age TINYINT UNSIGNED NOT NULL DEFAULT 10;

添加多列,不能指定位置关系
删除列,用逗号做分割

ALTER TABLR user1 DROP truename
  • 修改数据表,添加约束(主键的名字)
ALTER TABLE users2 ADD ID SMALLINT UNSIGNED
ALTER TABLE users2 ADD CONSTRAINT PK_users2_id PRIMARY KEY(id)
ALTER TABLE users2 ALTER age SET DEFAULT 15;
ALTER TABLE users2 ALTER age DROP DEFAULT;
  • 修改数据表,删除约束
ALTER TABLE users2  DROP PRIMARY KEY;

一张表可以有多个唯一约束,删除约束而不是字段

ALTER TABLE user2 DROP INDEX username

显示索引,以网格的形式展现

SHOW INDEXES FROM users2\G;

删除外键约束

ALTER TABLE users2 DROP FOREIGN KEY 外键的名字
  • 修改数据表,修改列定义和更名数据表
    修改列定义(放在最前面)
ALTER TABLE users2 MODIFY id SMALLINT UNSIGNED NOT NULL FIRST;

修改列名称(CHANGE 功能大于 MODIFY)

ALTER TABLE users2 CHANGE pid p_id TINYINT UNSIGNED NOT NULL

修改表的名称

ALTER TABLE users2 RENAME users3;
RENAME TABLE user3 to user2

第4章 操作数据表中的记录

回顾和概述

约束:表级约束、列级约束

插入记录INSERT
  • 给自动编号的赋值。两种方法:NULL或DEFAULT
  • 赋值除了数值,还可以是表达式
  • 字段存在默认值的话,既可以赋值原来的默认值,也可以赋值DEFAULT
  • 一次性插入多条记录
INSERT tb VALUES(),()
插入记录INSERT SET-SELECT
  • INSERT SET与第一种方式的区别在于,此方法可以使用子查询(SubQuery)
INSERT tb1_name SET col_name={expr|DEFAULT} 
INSERT users SET username='ben',password='456';
表单更新记录UPDATE
  • 单表更新,多表更新
UPDATE users SET age=age+5;
UPDATE users SET age=age-id,sex=0;
SELECT * FROM users;
UPDATE users SET age=age+10 WHERE id%2=0;
单表删除记录DELETE
DELETE FROM users WHERE id=6;
INSERT users values();

把记录删掉以后。再添加纪录,id号不会补充原有删除的id号。

查询表达式解析
  • 查找记录,查询表达式的顺序影响结果的顺序
SELECT VERSION();
SELECT NOW();
SELECT user();
SELECT * FROM users;
SELECT columns FROM users;
SELECT id,username FROM users;
SELECT users.id,users.username FROM users;

不依附于任何表,就是一个表达式

SELECT 3+5;

为字段赋予别名,影响结果的输出

SELECT id as userid,username as uname FROM users;
WHERE 语句进行条件查询
  • 条件表达式
GROUP BY 对查询结果进行分组
SELECT * FROM users;
SELECT sex FROM users GROUP BY sex;
SELECT sex FROM users GROUP BY 1; 字段的第一个是1
having 语句设置分组条件(某一部分记录进行分组)
SELECT sex FROM users GROUP BY 1 HAVING age>35;
ORDER BY 对查询结果进行排序
SELECT * FROM users;
SELECT * FROM users ORDER  BY 1 HAVING age>35;
LIMIT限制查询数量
SELECT * FROM users LIMIT 2;
SELECT * FROM users LIMIT 2,2;
第三个开始,查询两个
INSERT test(username) SELECT username FROM users WHERE age>=30;

第5章 子查询与连接

你可能感兴趣的:(MySQL)